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. SELECT 查询以获取varbinary(max)特定 ID_Document 的“文档”字段。
  2. 使用从数据库中提取 TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip');
  3. 使用将文件从一个路径复制到另一个路径Windows.CopyFile
  4. TZipforge使用组件解压文件
  5. FileSetReadOnly使用函数将解压缩文件的属性设置为ROM 。
  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 Server 数据库是否已损坏。检查数据库所在的磁盘是否有错误。重新安装 SQL 服务器。

于 2010-09-24T07:48:10.793 回答
0

已解决:这是我程序中的一个错误。保持文档状态的逻辑存在错误,有时Is_File_Compressed被错误地设置为False,即使它是真的。

感谢您的支持。

于 2010-09-24T14:03:01.627 回答