Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как записать содержимое файла ;в поле BLOB? [D6, Win2k]


Nadine ©   (2002-11-27 13:12:00) 

Подскажите, пожалуйста, как записать содержимое файла в поле BLOB?


exit   (2002-11-27 17:39:00) [1]

P.S. Хотя как это возможно для Оракла... (в смысле "Database не назначен")


exit   (2002-11-27 17:38:00) [2]

Она могла выполниться и если Database не назначен. (Это я на всякий случай условие поставил). :-)


Nadine   (2002-11-27 17:30:00) [3]

Как последний раз г-н exit посоветовал, прога выполнилась без ошибок, то что в базе получилось, еще не проверяла. Большое спасибо.


Nadine   (2002-11-27 17:23:00) [4]

Попробовала LoadFromFile - та же ошибка. У меня база на Oracle 9.


exit   (2002-11-27 17:21:00) [5]

А если так:

var
FromFile: TFileStream;
begin
try
Fromfile:=TfileStream.Create(Edit1.Text,fmopenread);
fromfile.Seek(0, soFromBegining);
if Table1.Database <> nil then
begin
Table1.Database.StartTransaction;
Table1.insert;
Table1.FieldByName("dateRep").AsDateTime:=Now;
Table1.FieldByName("NameRep").AsString:=Edit1.Text;
Table1.FieldByName("ExtRep").AsString:=rightstr(Edit1.Text,3);
Table1.FieldByName("TestBlobData").LoadFromStream(Fromfile);
table1.Post;
Table1.Database.Commit;
end;
finally
fromfile.Free;
end;
end;


Andy78   (2002-11-27 17:11:00) [6]

У поля типа Blob должен быть метод loadfromfile. Попробуй его.


Nadine   (2002-11-27 17:05:00) [7]

Спасибо. Но та же ошибка повторяется "Указатели LOB не могут разделять транзакции".


exit   (2002-11-27 16:53:00) [8]


var
FromFile: TFileStream;
begin
try
Fromfile:=TfileStream.Create(Edit1.Text,fmopenread);
fromfile.Seek(0, soFromBegining);
Table1.insert;
Table1.FieldByName("dateRep").AsDateTime:=Now;
Table1.FieldByName("NameRep").AsString:=Edit1.Text;
Table1.FieldByName("ExtRep").AsString:=rightstr(Edit1.Text,3);
Table1.FieldByName("TestBlobData").LoadFromStream(Fromfile);
table1.Post;
finally
fromfile.Free;
end;
end;


Nadine   (2002-11-27 16:46:00) [9]

Извините, а можно полностью код написать, а то я не очень поняла, куда эти куски вставлять надо.


DN   (2002-11-27 16:40:00) [10]

Поле есть такое в базе?
И лучше наверно сначала прочитать этот файл куда-нибудь в мемо что-ли, а потом в базу что-то вроде этого:
...
Table1.FieldByName("Text").AsVariant:=Memo1.Text;
...


exit   (2002-11-27 16:32:00) [11]


Table1.FieldByName("TestBlobData").LoadFromStream(FromFile);

и еще, если уж так нужен еще один Stream:

var
ToBlobStream: TMemoryStream;
begin
try
ToBlobStream := TMemoryStream.Create;
finally
ToBlobStream.Free;
end;


Nadine   (2002-11-27 16:24:00) [12]

Дали такое задание, именно записывать содержимое файлов в поле BLOB. NOW - это сегодняшняя дата. В поле Edit1 записывается название фала, который надо в базу записать. Можно как-нить конкретно указать, что в моем коде неправильно? Пожалуйста, помогите, очень сильно надо.


DN   (2002-11-27 16:06:00) [13]

А зачем вам сохранять doc, xls - файлы в базу, лучше хранить в базе ссылки на файлы, а затем подгружать их по мере необходимости.
В Вашем коде не совсем все понятно: что есть Now? Сегодняшняя дата?


Nadine   (2002-11-27 15:20:00) [14]

Файлы с расширением doc, xls и dbf. Но в основном интересуют первые два типа. При выполнении команды Table1.Post возникает ошибка "Указатели LOB не могут разделять транзакции".
var
FromFile: TFileStream;
ToBlobStream: TStream;
I: integer;
begin
Fromfile:=TfileStream.Create(Edit1.Text,fmopenread);
fromfile.Position:=0;
Table1.insert;
Table1.FieldByName("dateRep").AsDateTime:=Now;
Table1.FieldByName("NameRep").AsString:=Edit1.Text;
Table1.FieldByName("ExtRep").AsString:=rightstr(Edit1.Text,3);
ToBlobStream:=Table1.CreateBlobStream(Table1.FieldByName("TestBlobData"),bmReadWrite);
ToBlobStream.CopyFrom(Fromfile,FromFile.Size);
table1.Post;
fromfile.Free;
toblobstream.Free;
end;


DN   (2002-11-27 15:07:00) [15]

А это смотря какого типа файл?


Наверх

Титульная страница Поиск, карта сайта Написать письмо