Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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.009 c
1-27945
@Ujin
2002-11-27 15:35
2002.12.09
AtiveX формы, COM и т.п....


1-27934
GrAlexis
2002-11-27 17:14
2002.12.09
Сообщение CM_EXIT


3-27832
UniDeMoN
2002-11-17 04:33
2002.12.09
создание собственной базы данных


3-27860
NeyroSpace
2002-11-20 18:45
2002.12.09
Помогите ! Если форма создается динамически, то DBкомпоненты


3-27896
tv
2002-11-21 14:17
2002.12.09
Как определить, есть ли запись в таблице при добавлении новой.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский