ファイルを処理する 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 インストールとの競合が原因でした。とにかく、何が起こったのか理解できないので、問題はまだ残っています。ファイルをフォルダーに抽出し、データベースに何も書き戻さずにフォルダーからファイルを開くと、データベース内のファイルが破損する可能性がありますか?