Страница 1 из 1

База файлов в Delphi

Добавлено: 10 ноя 2009, 15:43
Ryumka
Здравствуйте.
Мне необходимо создать базу файлов в виде таблицы, в которой будут содержаться колонки:
1) ссылка на файл maple
2) комментарии к файлу
3) параметры для сортировки таблицы

При создании базы данных через Database Desctop, встроенный в дельфи 2005, сделала таблицу в Paradox 7, содержащую необходимые колонки. Однако колонку, в которой должны находиться ссылки на файлы, нельзя редактировать из данного приложения. Автоматически выписывается "BLOB OLE OBJECT", и больше с ней ничего сделать нельзя.

Перенесла таблицу в проект delphi для win32. Открыла таблицу. Долго искала в интернете, на форумах и книгах, как же вставить требуемые файлы в колонки таблицы. Нашла следующую информацию:

Сохранение OLE объекта в базе данных
Иногда необходимо хранить OLE объекты не в файлах, а в базе данных (BLOB поле в таблице). Конечно, в данном случае OLE объект должен быть присоединенным (embedded) в целях переносимости. К сожалению, в стандартной поставке Delphi нет специального объекта типа TDBOLEContainer для данных целей, но OLE объект можно сохранять и восстанавливать с помощью методов SaveToStream и LoadFromStream. Например:
procedure TOLEForm.SaveOLE(Sender: TObject);
var
BlSt : TBlobStream;
begin
With Table1 do
BlSt:=TBlobStream.Create(BlobField(FieldByName('OLE')),
bmReadWrite);
OLEContainer.SaveToStream(BlSt as TStream);
BlSt.Free;
end;

При попытке включить данный код в мой проект при объявлении класса TBlobField была выдана ошибка:

[Fatal Error] My_Nakls.pas(7): F1026 File not found: 'TBlobField.dcu'

Не знаю, с какой стороны подступиться. Задача элементарная, а решения не вижу. Подскажите, пожалуйста, как сделать все-таки эту базу данных, в которой необходимо разместить ссылки на файлы maple с возможностью их открытия, редактирования и сохранения изменений. И как потом из delphi программно обращаться к полям и колонкам для возможности последующей сортировки.

Заранее благодарна,
Александра

Re: База файлов в Delphi

Добавлено: 11 ноя 2009, 07:24
atavin-ta
А в чём проблема?

Re: База файлов в Delphi

Добавлено: 11 ноя 2009, 11:03
Ryumka
Проблема в том, что я не знаю, как в базу данных присоединить файлы в поля. Для открытия, чтения и записи в программе, в которой они были созданы. Нужно, чтобы в поле была ссылка на файл.

С Уважением,
Александра

Re: База файлов в Delphi

Добавлено: 11 ноя 2009, 13:29
Игорь Акопян
переместил, раздел по OLE немного о другом :)

TBlobField объявлен в модуле DB, он подключен?
Так вы хотите хранить в базе ссылку или сам бинарный файл?

Re: База файлов в Delphi

Добавлено: 20 янв 2010, 16:54
Ryumka
Спасибо. Проблема решена. В БД создала поля как текстовые. В Дэльфи при клике на заданную строку заданного столбца открывается нужный файл программано.

if DBGrid1.SelectedField.AsString=Nakls['File'] then
begin
if Nakls.FieldByName('ID').AsInteger=30 then //открытие нужного файла приклеено к значению соседнего столбца
begin
{Nakls :=}ShellExecute(0,'Open',pchar('c:\h.xmcd'),nil,nil,1);
if not FileExists ( 'c:\h.xmcd' ) then MessageDlg ('Файл не найден',MtError,[mbOK],0); //выдать ошибку если файл не существует
end;
if Nakls.FieldByName('ID').AsInteger=10 then
ShellExecuteA(0, 'Open',pchar( ExtractFilePath(application.exename )+'МНК.xmcd'),nil,nil,1);
if Nakls.FieldByName('ID').AsInteger=20 then
ShellExecuteA(0, 'Open',pchar( ExtractFilePath(application.exename )+'\ModelSupport\1-5.xmcd'),nil,nil,1);

end;