Эти возможности могут помочь, если требуется занести большие объекты (фотографии, документы) в вашу базу данных или считать в файл документ, хранящийся в базе данных какой-либо информационной системы, не имеющей функцию сохранения в файл. Возможности SQL баз данных не всегда позволяют сделать такие операции записи или чтения файлов удобным образом, для таких случаев и добавлены эти возможности.
Рассмотрим операции с файлами на простом примере - dBASE, используем таблицу с документами:
Код: Выделить всё
create table Documents(id int,Document longbinary,Name char(32),Comment char(254));
Для создания записи с копирование содержимого файла REPORT.DOC запускаем nhdbf.exe со следующими параметрами:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (1,?,'Отчёт.doc','Отчёт по форме 34')" report.doc
Второй параметр задаёт запрос INSERT, в котором должен быть указано, в числе прочих, поле LONGBINARY со знаком вопроса вместо значения.
Третий параметр указывает путь и имя файла, который будет загружен в поле Document.
За один запуск программы можно добавить только одну запись. При этом в запросе можно указывать только одно поле LONGBINARY.
Повторяя запуск программы с другими параметрами, можно добавить ещё записи, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (25,?,'Архив-2009.dat','Архив за 2009 год')" C:\Archives\2009\archive.dat
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "insert into Documents (id,file,name,comment) values (173,?,'Письмо-скан.jpg','Письмо ОСПР-24 от 10.01.2010')" \\server\scans\015.jpg
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "update Documents set Document=? where id=25" C:\Archives\2009\archive-2.dat
Для считывания содержимого поля Document из базы данных в файл необходимо подготовить SQL запрос SELECT, чтобы первым столбцом в наборе данных было поле LONGBINARY, а вторым - путь и имя файла. Такое условие сделано для того, чтобы за один запрос можно было считать более одной записи - программа для каждой записи из результирующего набора сохраняет файл, используя значение второго поля как имя файла, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,Name from Documents"
Можно указывать в качестве второго поля и строковую константу, например:
Код: Выделить всё
nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,'\\server\reports\report-2452.doc' from Documents where id=1"
В приложенном ZIP файле находится пример выполнения записи-чтения файлов с результатом выполнения
