Как записать файл в базу данных и считать его

Обсуждение программы nhdbt - терминал баз данных ODBC
Закрыто
nhutils
Сообщения: 595
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Как записать файл в базу данных и считать его

Сообщение nhutils »

В программу NHDBT, начиная с версии 1.3, включена дополнительная программа nhdbf.exe, позволяющая записывать файлы в поля LONGBINARY базы данных и считывать значения таких полей в файл.
Эти возможности могут помочь, если требуется занести большие объекты (фотографии, документы) в вашу базу данных или считать в файл документ, хранящийся в базе данных какой-либо информационной системы, не имеющей функцию сохранения в файл. Возможности SQL баз данных не всегда позволяют сделать такие операции записи или чтения файлов удобным образом, для таких случаев и добавлены эти возможности.

Рассмотрим операции с файлами на простом примере - dBASE, используем таблицу с документами:

Код: Выделить всё

create table Documents(id int,Document longbinary,Name char(32),Comment char(254));
В поле Document будет храниться содержимое документа (файл).

Для создания записи с копирование содержимого файла 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
Первый "driver={Microsoft dBase driver (*.dbf)};dbq=." параметр задаёт базу данных, в примере используется текущий каталог.
Второй параметр задаёт запрос 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
Аналогично добавлению, программа позволяет обновлять записи (UPDATE):

Код: Выделить всё

nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "update Documents set Document=? where id=25" C:\Archives\2009\archive-2.dat
Второй параметр здесь уже задаёт запрос UPDATE. Если выбирается несколько строк (WHERE…), то содержимое поля Document будет обновлено во всех выбранных строках!

Для считывания содержимого поля Document из базы данных в файл необходимо подготовить SQL запрос SELECT, чтобы первым столбцом в наборе данных было поле LONGBINARY, а вторым - путь и имя файла. Такое условие сделано для того, чтобы за один запрос можно было считать более одной записи - программа для каждой записи из результирующего набора сохраняет файл, используя значение второго поля как имя файла, например:

Код: Выделить всё

nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,Name from Documents"
Здесь программа обработает все записи из таблицы Documents, при этом для строки с id=25 документ будет сохранён в C:\Archives\2009\archive-2.dat и т.д.
Можно указывать в качестве второго поля и строковую константу, например:

Код: Выделить всё

nhdbf.exe "driver={Microsoft dBase driver (*.dbf)};dbq=." "select Document,'\\server\reports\report-2452.doc' from Documents where id=1"
В этом примере программа выберет одну запись (id=1) и запишет документ в сетевой файл \\server\reports\report-2452.doc.

В приложенном ZIP файле находится пример выполнения записи-чтения файлов с результатом выполнения
:!: кодировка 866
Вложения
test.zip
(259.79 КБ) 748 скачиваний
nhutils
Сообщения: 595
Зарегистрирован: 09 дек 2009, 18:08
Контактная информация:

Re: Как записать файл в базу данных и считать его

Сообщение nhutils »

Примечание.
В версии 1.3.0 при считывании (SELECT) поля базы данных в файл с указанием полного пути необходимо, чтобы путь к каталогу файла существовал, иначе будет ошибка 3 (путь не найден).
В следующих версиях программа будет сама создавать путь, если он не существует.
Закрыто