![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как записать содержимое файла ;в поле 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]А это смотря какого типа файл?