Использование ANSI C для извлечения данных двоичного изображения из базы данных в файл .jpg - PullRequest
1 голос
/ 23 января 2012

Я использую компилятор ANSI C (LabWindows / CVI версии 2010) для извлечения целочисленных, строковых данных и данных с плавающей запятой из существующей базы данных Access 2010 с хорошим успехом.Однако мне не удалось извлечь данные изображений, хранящиеся в виде длинных двоичных данных, в файлы (.jpg или .tiff).Я подозреваю, что это не сложная задача, когда техника известна, но у меня просто нет опыта с кодом или техникой, чтобы сделать это.Любая помощь будет оценена.

1 Ответ

1 голос
/ 23 января 2012

Я ожидаю, что если вы успешно получите все данные в столбце изображения, вам нужно всего лишь записать их в файл, используя fwrite().

Обычный шаблон доступа для извлечения длинных данных изстолбец должен использовать функцию, которая получает его по одному куску за раз.Вот как работает функция ODBC SQLGetData ;вы передаете ему буфер фиксированной длины и длину, а его возвращаемое значение указывает, что данные были усечены, поэтому вы записываете данные, которые у вас есть, в файл, а затем вызываете его снова, пока он не вернет код успеха.

Глядя на документацию по SQL Toolkit National Instruments LabWindows / CVI, функция DBGetColBinaryBuffer() может возвращать код -1, DB_TRUNCATION, который описывается как «Буфер, переданный для хранения результата, недостаточно велик для хранениярезультат. Частичный результат был возвращен в буфер. ".

Я бы предположил, что DBGetColBinaryBuffer() предназначен для использования в цикле, и если вы сделаете это и запишете частичные результаты в файл,в итоге вы получите правильное изображение.

...