Я тестирую одно приложение, которое обрабатывает файлы (хранящиеся на сервере sql с использованием файлового потока). Это Delphi Win32 приложение.
Открытие документа xls, хранящегося в БД (изначально сохраненного в Office 2003), приводит к ошибке в 64-разрядной версии Excel 2010.
Существуют ли известные проблемы совместимости с Office 2010 64bit с приложениями win32?
Я пытаюсь приблизиться к проблеме, но пока прошу помощи.
* Дополнительные примечания:
При открытии файла Excel выдает следующую ошибку «Невозможно открыть файл ФАЙЛ из-за проблем с содержимым» / «Невозможно открыть файл из-за того, что некоторые детали отсутствуют или недействительны».
Открытие файла с компьютера A в Office 2007 открывает файл без проблем.
Проблема при открытии того же файла на компьютере B в Office 2010.
Снова открывается из машины А, это создает проблему! На всех этих этапах я просто читаю из БД, а не пишу. Так почему же это может произойти? *
Дополнительное обновление: как открыть документы
Вот шаги, которые я использую:
1. Выберите Query, чтобы получить поле 'DOCUMENT' varbinary(max)
для конкретного ID_Document.
извлечение из Db с использованием
TBlobField(sqlQuery.FieldByName('DOCUMENT')).SaveToFile(sDestinationPath + FileUniqueName + .zip')
;
Копировать файл из одного пути в другой файл, используя Windows.CopyFile
Распакуйте файл, используя TZipforge
компонент
Установить атрибут распакованного файла только для чтения с помощью функции FileSetReadOnly
.
открыть документ, используя
ShellExecute (0, 'open', PWideChar (FIleName), '', '', SW_SHOWNORMAL);
Как вы видите, ничего не записывается обратно в БД. Когда файл извлекается из TBlobField, он даже копируется в другое место перед разархивированием и открытием.
ЗАКЛЮЧИТЕЛЬНОЕ ПРИМЕЧАНИЕ:
Office был переустановлен, и теперь все работает, проблема с коррупцией возникла из-за конфликта с установкой открытого офиса, который спросил: «Вы хотите исправить установку офиса?». В любом случае проблема все еще остается, потому что я не могу понять, что случилось. Как я могу испортить файл в БД, если я извлечу его в папку и открою из папки, ничего не записав обратно в БД?