ファイルを処理する 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 で再度開くと、エラー メッセージも表示されます。これらのすべてのステップで、データベースから読み取るだけで、書き込みは行いません。では、なぜこのようなことが起こるのでしょうか?
ドキュメントを開くにはどうすればよいですか?
varbinary(max)特定の ID_Documentの「DOCUMENT」フィールドを取得するための SELECT クエリ。- を使用してデータベースから抽出
TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip'); - を使用して、あるパスから別のパスにファイルをコピーします
Windows.CopyFile TZipforgeコンポーネントを使用してファイルを解凍します- 関数を使用して、解凍したファイルの属性を ROM に設定し
FileSetReadOnlyます。 - を使用してドキュメントを開く
ShellExecute(0, 'open', PWideChar(FIleName), '', '', SW_SHOWNORMAL);
ご覧のとおり、データベースに書き戻すものは何もありません。ファイルが抽出されるTBlobFieldと、解凍して開く前に別の場所にコピーされます。
インストールが壊れている可能性があります
Office が再インストールされ、すべてが機能するようになりました。破損の問題は、「Office インストールを修正しますか?」と尋ねた、開いている Office インストールとの競合が原因でした。とにかく、何が起こったのか理解できないので、問題はまだ残っています。ファイルをフォルダーに抽出し、データベースに何も書き戻さずにフォルダーからファイルを開くと、データベース内のファイルが破損する可能性がありますか?