Главная страница
    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.01 c
1-28012
Alex Shulg
2002-11-28 16:24
2002.12.09
Обработка исключительной ситуации


8-28152
Soft
2002-08-19 21:45
2002.12.09
Каким образом можно преобразовать данные с TIcon в TBitmap ?


8-28151
robbit
2002-08-19 18:03
2002.12.09
сохранение содержимого canvas в файл


1-27980
Илайдж
2002-11-29 15:03
2002.12.09
Работа с Excel без левых компонент.


4-28327
Gayrus
2002-10-26 10:42
2002.12.09
Regedit





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский