Помогите!

 

TEvg

аксакал

админ. бан
У меня завал.

Простая задача. Дельфия. СУБД Interbase.
Надо сохранять данные, например файлы, в поле типа BLOB.

Необходимо использовать компоненты IBX (закладка InterBase)

Очень нужен работающий пример.

Я беру компоненты
TIBDatabase
TIBTransaction
TIBTable

И пишу:

procedure TfrmMain.Button1Click(Sender: TObject);
var
  B: TStream;
  FS:TFileStream;
begin
  Table1.Insert;
  B:=Table1.CreateBlobStream(Table1.FieldByName('B'), bmWrite);
  OD.Execute;
  FS := TFileStream.Create(OD.FileName,fmOpenRead);
  B.Position:=0;
  FS.Position:=0;
  B.CopyFrom(FS, FS.Size);
  FS.Free;
  B.Free;
end;

где, В - блобовый поток, FS - файловый поток, 'B' - имя поля в БД. OD - обычный OpenDialog.

И если бы эта фигня не работала! Но она работает, но.. как-то странно. Раз десять тыкнешься - файла 3 запишет. Но меня такая неучтенка совсем не устраивает.

На чтение, примерно тот же код - только блоб на чтение открывается и из него данные тянут - работает без замечаний. Шарился в инете - примерно тоже самое что и у меня.. Мне бы исходник заведомо работающий!
 
+
-
edit
 

Jameson

опытный

Э, а какая версия Дельфи, и если 4 -5 -6 то стоят ли фиксы? Кстати, попробуй в B.CopyFrom(FS, FS.Size); вместо FS.Size ставить 0. Это значит копирование всего потока.
 А то там не size а count. Тут может крыться проблема..
 
+
-
edit
 

Jameson

опытный

Да, и еще. Мне твой код не нравится. Что там возвращает execute, ты не смотришь, а может там ошибка какая. Исключения тоже не обрабатываешь..
 

в начало страницы | новое
 
Поиск
Настройки
Твиттер сайта
Статистика
Рейтинг@Mail.ru