web-dev-qa-db-ja.com

ODBC接続/ Crystalレポート

非常に古いCrystal 8.5レポート(今年Crystal 2016での書き換えが予定されています)がいくつかありますが、昨日は機能しなくなりました。 Oracle Database 12c(12.2.0.1.0)データベースに対して実行されるデータソースとしてCrystal Query(.qry)ファイルを使用します。

Crystalで.rptファイルを実行すると、レポートが返すデータがgobbledygookであり、ページ数(数万)が期待される結果と関係がないにもかかわらず、メモリの問題がなくなるまでレポートは永久に実行されます。

Crystal SQL Designer 8.0で.qryファイルを実行すると、データの最初の行のみが返されます。

ODBC Data Source Administratorでトレースをオンにすると、潜在的な問題を示しているように見えるログファイルにいくつかのエントリがあります。

test            f3b4-f974   ENTER SQLSetConnectAttr 
    SQLHDBC             0x023ECB78
    SQLINTEGER                1041 <unknown>
    SQLPOINTER          [Unknown attribute 1041]
    SQLINTEGER                  -3 

test            f3b4-f974   EXIT  SQLSetConnectAttr  with return code -1 (SQL_ERROR)
    SQLHDBC             0x023ECB78
    SQLINTEGER                1041 <unknown>
    SQLPOINTER          [Unknown attribute 1041]
    SQLINTEGER                  -3 

    DIAG [S1C00] [Oracle][ODBC]Driver not capable. (0) 

test            f3b4-f974   ENTER SQLSetConnectAttr 
    SQLHDBC             0x023ECB78
    SQLINTEGER                1042 <unknown>
    SQLPOINTER          [Unknown attribute 1042]
    SQLINTEGER                  -3 

test            f3b4-f974   EXIT  SQLSetConnectAttr  with return code -1 (SQL_ERROR)
    SQLHDBC             0x023ECB78
    SQLINTEGER                1042 <unknown>
    SQLPOINTER          [Unknown attribute 1042]
    SQLINTEGER                  -3 

    DIAG [S1C00] [Oracle][ODBC]Driver not capable. (0) 

サードパーティのビューアを使用すると、ほとんどのレポートを生成できます。 .qryファイルを使用しないレポートを実行した場合、問題はありません。

誰かが同様の問題に遭遇したことがありますか?または、パッチなどの結果として私たちが気付いていない変更点についてのポインタがありますか?

2
Salmoni

Qryを使用したCrystal Reports 8.5でも同じ問題があります。これは、この問題を特定するために私が行ってきた道のりです。誰か他の人がこの問題にさらに光を当てられることを期待しています。

CR Designerを使用して同じエラーを生成できますが、コンピューターの日付が2019年に戻って設定されている場合は問題なく動作します。生成されたエラーは

"xBase error: Last file change date in error".

デザイナーを使用して、関連するdll実行可能ファイルをP2bxbse.dll(ファイルバージョン8.6.0.25)、P2sodbc.dll(fv 8.6.1.86)およびP2lodbc.dll(fv 8.6.0.31)に絞り込むことができました。 。障害点を観察すると、qryの実行時にこれらのdllの1つ(P2lodbc.dllと思われる)が、基礎となるデータベースから一時ファイルにメタデータを読み取り、ファイルのタイプが.dbfであることが判明します。 (dBaseデータベースファイル-\user\localdataディレクトリ内)。これは、エラーがODBCドライバまたは基になるデータベースと関係がない理由です。このファイルはすぐに作成され、qryが終了するまでロックされるため、分析が困難になります。

.dbfファイルのファイル形式のドキュメントは、特に、最後のファイル変更の日付に3バイトがあることを示しています(ref http://www.dbase.com/Knowledgebase/INT/db7_file_fmt.htm =)。このデータがどのように解釈され、2020年に対処するかについてインターネット上にいくつかの説明があるので、問題はここにあると思います。

編集、申し訳ありませんが、ここに投稿するためのアカウントを作成しましたが、システムはコメントを許可しません:((1つの評判のみ)なので、ここに私の入力を入力してください。

.rptを印刷するときにこの問題が発生する非常に古いプログラムがあります。プログラムのソースコードがないので、ここで変更の提案を行うことができません。幸いにも、たくさん印刷する必要はありません。印刷する必要があるHEXエディター(HxD)を使用して、関連する.dbf(xbase)データベースファイルのビット1、2、3を編集します。 77 0C 1F(これは31/dec/2019のコードです)に変更して.dbfファイルを保存すると、データベースデータを編集しない限り、レポートを印刷しても問題ありません。 (プログラムの実際の日付は2020年であってもかまいません)永続的な修正は、誰かが古いCrystalレポートを編集できる場合ですDLLファイルでデータベースのファイル編集日付を単に無視する: (

ファイルのバッチ処理を実行するために使用できるHEXエディターを知っている人はいますか? :)

3
Graham Inward

SQL Server 2016でも、まったく同じ問題が発生しています。ただし、.qryファイルも実行できません。

2019年にコンピューターの日付を1に変更すると、.qryファイルを実行できます。

1
Meg Bullock

症状には以下も含まれます:

xbaseエラー:エラーのある最終ファイル変更日

または

エラー:自動化エラー

呼び出されたオブジェクトはクライアントから切断されました。

Crystal Report 7/8.5を使用してこの問題があります

レポートがデータソースとしてクエリを使用しているときに日付エラーが表示されます。

システム時刻が一時的に2019に変更された後、正常に動作します。

0
Steven

this answer に加えて、これまでのレポートを引き続き使用するために使用したソリューションは次のとおりです:CR8.5をCR11.5に置き換えます

通知:レポートは vb6 で開発されたアプリケーションから起動され、維持する必要があります。

  • Crystal Reports 11をインストールする必要があったため、新しいライセンスを購入する必要がありました。
  • その後、古いvb6 CR8.5コンポーネントを新しいものに置き換えるのは非常に簡単です。から多くの助けを受けました

    • CR8の古い移行ドキュメント -OCXからReport Designer Component(RDC)に移行する手順に従う必要がありました-含むCrystal Report 8 ActiveX Designerランタイムライブラリ(CRAXDRT)、
    • 次に これを使用する方法に関する拡張ドキュメントCRAXDRT が大いに役立ちました(ただし、以前のバージョンのようであり、すべてを解決しなかった)、
    • レポートで変数を設定する必要があった時点で、魔法を使う必要がありました ここにあります

      Private Sub setIdContext(v As String)
          Dim myParamFields As CRAXDRT.ParameterFieldDefinitions
          Dim myParamField As CRAXDRT.ParameterFieldDefinition
          Set myParamFields = CrxRep.ParameterFields
          For Each myParamField In myParamFields
              With myParamField
                  Select Case .ParameterFieldName
                      Case "ID_Context"
                          .SetCurrentValue Val(v)
                  End Select
              End With
          Next
      End Sub
      

制限:...完全なCrystal Report BOXIの事物を配備する必要なしに、クライアントにVB6 exeを配備する方法に関する方法をまだ探しています:(

0
J. Chomel

この「2020 Crystal Reportバグ」の回避策は.qry中間ファイルを削除するです。

  • .qryにあるクエリの代わりに、データベースにデータベース*ビューを作成します。
  • crystal Reportsの「ツール」を使用して、新しい.rptファイルを作成します。

しかし、これにはレポートを書き直す必要があります。新しいレポートツールに直接移行することをお勧めします。

0
J. Chomel