1

ファイルを処理する 1 つのアプリケーションをテストしています (SQL Server を使用して格納されていますFILESTREAM)。これは Delphi 32 ビット アプリケーションです。

データベースに保存されている XLS ドキュメント (元々は Office 2003 で保存されたもの) を開くと、Excel 2010 64 ビットからエラーが発生します。Office 2010 64 ビットと 32 ビット アプリケーションの既知の互換性の問題はありますか?

エラー メッセージとワークフロー

ファイルを開くと、Excel で次のいずれかのエラー メッセージが表示されます。

  • 内容に問題があるため、ファイル FILE を開くことができません

  • 一部のパーツが欠落しているか無効であるため、ファイルを開くことができません

Office 2007 を使用してマシン A でファイルを開くと、問題なくファイルが開きます。Office 2010 を使用してコンピューター B で同じファイルを開くと、エラー メッセージが表示されます。マシン A で再度開くと、エラー メッセージも表示されます。これらのすべてのステップで、データベースから読み取るだけで、書き込みは行いません。では、なぜこのようなことが起こるのでしょうか?

ドキュメントを開くにはどうすればよいですか?

  1. varbinary(max)特定の ID_Documentの「DOCUMENT」フィールドを取得するための SELECT クエリ。
  2. を使用してデータベースから抽出 TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip');
  3. を使用して、あるパスから別のパスにファイルをコピーしますWindows.CopyFile
  4. TZipforgeコンポーネントを使用してファイルを解凍します
  5. 関数を使用して、解凍したファイルの属性を ROM に設定しFileSetReadOnlyます。
  6. を使用してドキュメントを開くShellExecute(0, 'open', PWideChar(FIleName), '', '', SW_SHOWNORMAL);

ご覧のとおり、データベースに書き戻すものは何もありません。ファイルが抽出されるTBlobFieldと、解凍して開く前に別の場所にコピーされます。

インストールが壊れている可能性があります

Office が再インストールされ、すべてが機能するようになりました。破損の問題は、「Office インストールを修正しますか?」と尋ねた、開いている Office インストールとの競合が原因でした。とにかく、何が起こったのか理解できないので、問題はまだ残っています。ファイルをフォルダーに抽出し、データベースに何も書き戻さずにフォルダーからファイルを開くと、データベース内のファイルが破損する可能性がありますか?

4

3 に答える 3

1

Office 2010 64 ビットでは、32 ビット バージョンで作成されたファイルに問題はありません。ファイル (.docx、.xls) はビット数に依存しません。

いくつか質問があります:

  1. どのようにファイルを開きますか?
  2. いくつかのコードを表示できますか?
  3. データベースからファイルを読み取っているだけですか?
  4. ファイルに適切な拡張子を付けていますか? .xls を .xlsx として保存すると、ファイルを開くときに問題が発生します。
于 2010-09-23T14:39:00.870 に答える
0

SQL サーバー データベースが破損していないかどうかを確認します。データベースが存在するディスクにエラーがないかチェックしてください。SQL サーバーを再インストールします。

于 2010-09-24T07:48:10.793 に答える
0

解決済み: これは私のプログラムのバグでした。ドキュメント ステータスを永続化するロジックにエラーがあり、true であっても誤ってIs_File_Compressedに設定されることがありました。False

ご支援ありがとうございます。

于 2010-09-24T14:03:01.627 に答える