Гость
Map
Форумы / Informix [игнор отключен] [закрыт для гостей] / Ошибка чтения поля TEXT в файл / 5 сообщений из 5, страница 1 из 1
13.05.2012, 12:58
    #37792027
Гость123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка чтения поля TEXT в файл
Имеется сервер Informix с таблицей, в которой есть поле типа TEXT, в которое на этом сервере записываются файлы.
И имеется компьютер на котором установлен ODBC-драйвер из поставки Informix'а.
Считывание файлов происходит из программы на Delphi через TADOConnection - TADOQuery таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
var ADOQ:TADOQuery;
FileName: string;

  ADOQ.SQL.Add('SELECT datafile FROM table1'); 
  ADOQ.Open;
  TBlobField(ADOQ.Fields[0]).SaveToFile(FileName);

Ошибка в том, что в поле таблицы лежит файл размером, допустим, 10 Килобайт, а приведенная выше операция считывает пять байт.
Причем известно, что в этом файле шестой байт имеет значение $00.

Таким образом, происходит отсчение данных как будто это нуль-терминированная строка.

Кто виноват, Delphi, ODBC-драйвер или сервер?
И куда копать?
...
Рейтинг: 0 / 0
13.05.2012, 14:47
    #37792096
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка чтения поля TEXT в файл
Гость123Имеется сервер Informix с таблицей, в которой есть поле типа TEXT, в которое на этом сервере записываются файлы.
И имеется компьютер на котором установлен ODBC-драйвер из поставки Informix'а.
Считывание файлов происходит из программы на Delphi через TADOConnection - TADOQuery таким образом:

Код: plaintext
1.
2.
3.
4.
5.
6.
var ADOQ:TADOQuery;
FileName: string;

  ADOQ.SQL.Add('SELECT datafile FROM table1'); 
  ADOQ.Open;
  TBlobField(ADOQ.Fields[0]).SaveToFile(FileName);

Ошибка в том, что в поле таблицы лежит файл размером, допустим, 10 Килобайт, а приведенная выше операция считывает пять байт.
Причем известно, что в этом файле шестой байт имеет значение $00.

Таким образом, происходит отсчение данных как будто это нуль-терминированная строка.

Кто виноват, Delphi, ODBC-драйвер или сервер?
И куда копать?


Это леко проверит. Попробуйте не использовать Delphi, а использовать ODBC с включенной трассировкой.
Не известно насколько правильно Delphi транслирует типы данных Informix в типы данных внутреннего представления.
Рашьше у Delphi были проблемы с таким преобразованем даже при использовании Native SQL Link драйверов для Informix.

С уважением,
Вадим.
...
Рейтинг: 0 / 0
13.05.2012, 17:15
    #37792181
Гость123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка чтения поля TEXT в файл
Странно, трудно заподозрить Delphi во внимании к нулевым символам.

Попробую трассировку. Спасибо.
...
Рейтинг: 0 / 0
13.05.2012, 22:36
    #37792405
bk0010
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка чтения поля TEXT в файл
Это ADO гадит (я уже ранее нарывался). BDE и AnyDAC версий 2-5 (через ODBC) будут выгружать нормально.
...
Рейтинг: 0 / 0
24.05.2012, 22:12
    #37810636
Гость123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Ошибка чтения поля TEXT в файл
На всякий случай расскажу.

Трассировка помогла. Среди обилия информации удалось найти строчки, в которых фигурировал реальный объем файла, то есть сервер передавал его целиком.

Судя по всему ADO действительно виноват. Выгрузка с помощью dbExpress была удачной.

Но тут вылезла еще одна "фича". При закачке файлов назад, в базу данных, теперь уже dbExpress зачем-то добавляет в конец файла дополнительный символ $00.
Вот так и работаю: получаю - используя dbExpress, закачиваю - используя ADO.
...
Рейтинг: 0 / 0
Форумы / Informix [игнор отключен] [закрыт для гостей] / Ошибка чтения поля TEXT в файл / 5 сообщений из 5, страница 1 из 1
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]