Здравствуйте.
Мне необходимо создать базу файлов в виде таблицы, в которой будут содержаться колонки:
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 программно обращаться к полям и колонкам для возможности последующей сортировки.
Заранее благодарна,
Александра
База файлов в Delphi
Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду
- Вложения
-
- Clipboard02.jpg (31.86 КБ) 131 просмотр
-
- Clipboard01.jpg (23.14 КБ) 132 просмотра
А в чём проблема?
Вопрос: "Почему вы все сионисты? Нельзя ли писать на чём то другом?".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Ответ: "Писать можно на чём угодно. Но зачем же так себя ограничивать? Пиши на С!".
Проблема в том, что я не знаю, как в базу данных присоединить файлы в поля. Для открытия, чтения и записи в программе, в которой они были созданы. Нужно, чтобы в поле была ссылка на файл.
С Уважением,
Александра
С Уважением,
Александра
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
переместил, раздел по OLE немного о другом 
TBlobField объявлен в модуле DB, он подключен?
Так вы хотите хранить в базе ссылку или сам бинарный файл?

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

Спасибо. Проблема решена. В БД создала поля как текстовые. В Дэльфи при клике на заданную строку заданного столбца открывается нужный файл программано.
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;
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;