Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
ВнизКак записать содержимое файла в поле BLOB? Найти похожие ветки
← →
Nadine (2002-11-27 13:12) [0]Подскажите, пожалуйста, как записать содержимое файла в поле BLOB?
← →
DN (2002-11-27 15:07) [1]А это смотря какого типа файл?
← →
Nadine (2002-11-27 15:20) [2]Файлы с расширением 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 16:06) [3]А зачем вам сохранять doc, xls - файлы в базу, лучше хранить в базе ссылки на файлы, а затем подгружать их по мере необходимости.
В Вашем коде не совсем все понятно: что есть Now? Сегодняшняя дата?
← →
Nadine (2002-11-27 16:24) [4]Дали такое задание, именно записывать содержимое файлов в поле BLOB. NOW - это сегодняшняя дата. В поле Edit1 записывается название фала, который надо в базу записать. Можно как-нить конкретно указать, что в моем коде неправильно? Пожалуйста, помогите, очень сильно надо.
← →
exit (2002-11-27 16:32) [5]
Table1.FieldByName("TestBlobData").LoadFromStream(FromFile);
и еще, если уж так нужен еще один Stream:
var
ToBlobStream: TMemoryStream;
begin
try
ToBlobStream := TMemoryStream.Create;
finally
ToBlobStream.Free;
end;
← →
DN (2002-11-27 16:40) [6]Поле есть такое в базе?
И лучше наверно сначала прочитать этот файл куда-нибудь в мемо что-ли, а потом в базу что-то вроде этого:
...
Table1.FieldByName("Text").AsVariant:=Memo1.Text;
...
← →
Nadine (2002-11-27 16:46) [7]Извините, а можно полностью код написать, а то я не очень поняла, куда эти куски вставлять надо.
← →
exit (2002-11-27 16:53) [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 17:05) [9]Спасибо. Но та же ошибка повторяется "Указатели LOB не могут разделять транзакции".
← →
Andy78 (2002-11-27 17:11) [10]У поля типа Blob должен быть метод loadfromfile. Попробуй его.
← →
exit (2002-11-27 17:21) [11]А если так:
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;
← →
Nadine (2002-11-27 17:23) [12]Попробовала LoadFromFile - та же ошибка. У меня база на Oracle 9.
← →
Nadine (2002-11-27 17:30) [13]Как последний раз г-н exit посоветовал, прога выполнилась без ошибок, то что в базе получилось, еще не проверяла. Большое спасибо.
← →
exit (2002-11-27 17:38) [14]Она могла выполниться и если Database не назначен. (Это я на всякий случай условие поставил). :-)
← →
exit (2002-11-27 17:39) [15]P.S. Хотя как это возможно для Оракла... (в смысле "Database не назначен")
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2002.12.09;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.01 c