![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как считать содержимое файла чтобы загнать его в blob базы [D5, D7, WinXP]
ilias1979 © (2005-02-23 13:57:00)Здравствуйте, мне необходимо полностью считать содержимое любого произвольного файла будь то doc, xls, rtf, bmp, jpg в переменную, чтобы потом загнать ее в blob поле FireBird. Хотелось бы чтобы эта переменная в результате имела тип string. Так как, как я понимаю именно этому типу delphi соответствуют blob поля FireBird. Как правильнее такое реализовать и что неправильно в моем коде который выдает access violation. (сдается мне что я сильно туплю и решение гораздо проще)
Функция извлечения из файла инфы
FileReadIL(fileName:string):string;
var
f:HFILE;
FileSize,i:integer;
buffer:array of char;
stroka:string;
begin
f:=_lopen(PChar(fileName), OF_READ);
FileSize:=_llseek(f,0, FILE_END);
SetLength(buffer,FileSize);
_llseek(f, 0, FILE_BEGIN);
_lread(f,@buffer,FileSize);
_lClose(f);
stroka:='';
for i:=0 to (fileSize-1) do
stroka:=stroka+buffer[i];
result:=stroka;
end;
собственно вызов функции и загон инфы в базу
if opendialog1.Execute then
begin
content:=FileReadIL(opendialog1.FileName);
memo1.text:=content;
ibquery1.Params[0].AsBlob:=content;
ibdatabase1.Connected:=true;
ibtransaction1.StartTransaction;
ibquery1.ExecSQL;
ibtransaction1.Commit;
end;
ilias1979 (2005-02-24 14:41:00) [1]Спасибо, все как Вы и говорили оказалось проще
На самом деле я сильно тупил
Вместо моей длинной API функции достаточно написать одну строку и все на удивление работает
IBQuery1.Params[0].LoadFromFile(OpenDialog1.FileName, ftBlob);
Eraser (2005-02-23 14:38:00) [2]ilias1979
И TBlobStream...
Плохиш (2005-02-23 14:16:00) [3]Ключевое слово для справки TBlobField, там даже примеры есть.