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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Ryumka
Сообщения: 14
Зарегистрирован: 06 окт 2009, 13:26

Здравствуйте.
Мне необходимо создать базу файлов в виде таблицы, в которой будут содержаться колонки:
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 программно обращаться к полям и колонкам для возможности последующей сортировки.

Заранее благодарна,
Александра
Вложения
Clipboard02.jpg
Clipboard02.jpg (31.86 КБ) 134 просмотра
Clipboard01.jpg
Clipboard01.jpg (23.14 КБ) 135 просмотров
atavin-ta
Сообщения: 585
Зарегистрирован: 30 янв 2009, 06:38

А в чём проблема?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ryumka
Сообщения: 14
Зарегистрирован: 06 окт 2009, 13:26

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

С Уважением,
Александра
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

переместил, раздел по OLE немного о другом :)

TBlobField объявлен в модуле DB, он подключен?
Так вы хотите хранить в базе ссылку или сам бинарный файл?
Изображение
Ryumka
Сообщения: 14
Зарегистрирован: 06 окт 2009, 13:26

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

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;
Ответить