我正在测试一个处理文件的应用程序(使用 存储在 SQL Server 中FILESTREAM
)。它是一个 Delphi 32 位应用程序。
打开存储在数据库中的 XLS 文档(最初使用 Office 2003 保存)在 Excel 2010 64 位中出现错误。Office 2010 64 位与 32 位应用程序是否存在一些已知的兼容性问题?
错误消息和工作流程
打开文件时,Excel 会给出以下错误消息之一:
-
由于内容问题,无法打开文件 FILE
-
无法打开文件,因为某些部分丢失或无效
使用 Office 2007 在计算机 A 上打开文件会毫无问题地打开该文件。使用 Office 2010 在计算机 B 上打开相同文件会产生错误消息。在机器A上再次打开也有错误信息!在所有这些步骤中,我只是从数据库中读取,而不是写入。那么为什么会发生这种情况呢?
如何打开文件?
- SELECT 查询以获取
varbinary(max)
特定 ID_Document 的“文档”字段。 - 使用从数据库中提取
TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip');
- 使用将文件从一个路径复制到另一个路径
Windows.CopyFile
TZipforge
使用组件解压文件FileSetReadOnly
使用函数将解压缩文件的属性设置为ROM 。- 使用打开文档
ShellExecute(0, 'open', PWideChar(FIleName), '', '', SW_SHOWNORMAL);
如您所见,没有任何内容可以写回数据库。一旦文件被提取出来,TBlobField
它甚至会在解压缩和打开它之前复制到另一个地方。
可能损坏的安装
Office 已重新安装,现在一切正常,损坏问题是由于与打开的 Office 安装发生冲突,询问“您要修复 Office 安装吗?”。无论如何,问题仍然存在,因为我无法理解发生了什么。如果我将文件提取到文件夹中并从文件夹中打开它而不将任何内容写回数据库,我该如何破坏数据库中的文件?