非常に古い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
ファイルを使用しないレポートを実行した場合、問題はありません。
誰かが同様の問題に遭遇したことがありますか?または、パッチなどの結果として私たちが気付いていない変更点についてのポインタがありますか?
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エディターを知っている人はいますか? :)
SQL Server 2016でも、まったく同じ問題が発生しています。ただし、.qryファイルも実行できません。
2019年にコンピューターの日付を1に変更すると、.qryファイルを実行できます。
症状には以下も含まれます:
xbaseエラー:エラーのある最終ファイル変更日
または
エラー:自動化エラー
呼び出されたオブジェクトはクライアントから切断されました。
Crystal Report 7/8.5を使用してこの問題があります
レポートがデータソースとしてクエリを使用しているときに日付エラーが表示されます。
システム時刻が一時的に2019に変更された後、正常に動作します。
this answer に加えて、これまでのレポートを引き続き使用するために使用したソリューションは次のとおりです:CR8.5をCR11.5に置き換えます!
通知:レポートは vb6 で開発されたアプリケーションから起動され、維持する必要があります。
その後、古いvb6 CR8.5コンポーネントを新しいものに置き換えるのは非常に簡単です。から多くの助けを受けました
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を配備する方法に関する方法をまだ探しています:(
この「2020 Crystal Reportバグ」の回避策は.qry
中間ファイルを削除するです。
.qry
にあるクエリの代わりに、データベースにデータベース*ビューを作成します。.rpt
ファイルを作成します。しかし、これにはレポートを書き直す必要があります。新しいレポートツールに直接移行することをお勧めします。