Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Blob Download


Автор: Anakin 5.9.2011, 02:30
Добрый вечер.

Опишу ситуацию
Есть MySql сервер и в нём таблица с blob полем в котором хранитса фаил.
На форме стоит ListBox который заполняетса данными с таблици и описанием фаила.

Вот код заполнения ListBox`a
Код

Procedure TfrmShowIncome.select;
var
ini: Tinifile;
id_tt:String;
acp:String;
begin
Ini:=TiniFile.Create(ExtractFilePath(paramstr(0))+'Options.ini');
id_tt:=Ini.ReadString('Options','idtt',id_tt);
acp:=Ini.ReadString('Options','accept',acp);
  frmMain.q_select.Close;
  frmMain.q_select.SQL.Clear;
  frmMain.q_select.SQL.Add('SELECT id,name,idtt,accepted FROM t_inc_client');
  frmMain.q_select.SQL.Add('WHERE ((accepted=:Prm1)and(idtt=:Prm2));');
  frmMain.q_select.Params.ParamByName('Prm1').Value:=StrToInt(acp);
  frmMain.q_select.Params.ParamByName('Prm2').Value:=StrToInt(id_tt);
  frmMain.q_select.Open;
  lb_show.Clear;
  while not frmMain.q_select.Eof do
  begin
    lb_show.Items.AddObject(frmMain.q_select.Fields.Fields[1].AsString, Pointer(frmMain.q_select.Fields.Fields[0].AsInteger));
    frmMain.q_select.Next;
  end;
  ini.Free;
End;


Тут код когда когда я тыкаю по заполненому ListBox`u

Код

procedure TfrmShowIncome.lb_showClick(Sender: TObject);
Var
b:Integer;
begin
  frmMain.q_select2.Close;
  frmMain.q_select2.SQL.Clear;
  frmMain.q_select2.SQL.Add('SELECT ID,name,incomdata,code,filename,incomfiles FROM t_inc_client WHERE (ID=:Prm);');
  frmMain.q_select2.Params.ParamByName('Prm').Value:=IntToStr(integer(lb_show.Items.Objects[lb_show.ItemIndex]));
  frmMain.q_select2.Open;
  lbl_data.Caption:=frmMain.q_select2.Fields.Fields[2].AsString;
  lbl_code.Caption:=frmMain.q_select2.Fields.Fields[3].AsString;
  lbl_filename.Caption:=frmMain.q_select2.Fields.Fields[4].AsString;
  blob:=frmMain.q_select2.CreateBlobStream(frmMain.q_select2.FieldByName('incomfiles'), bmRead);
  fname:=frmMain.q_select2.Fields.Fields[4].AsString;
  bsize:=blob.Size;
  b:=1024;
  lbl_size.Caption:=FloatToStr(bsize/b);
  ProgressBar.Position:=Blob.Size;
end;

Когда я тыкаю по списку заполняютса TLable информацией
Тут же я получаю размер blob поля

Но когда я тыкаю по этому ЛистБоксу программа зависает и через какоето время отвисает и все TLable заполняютса.
Такое впечатление что фаил скачивает с сервера после чего его данные заполняютса в Лэиблы.
Я подозреваю что дело в параметре Blob параметре bmRead
Но сут не совсем в этом, в принципе мне известен размер blob поля и я хочу показать на ProgressBare статус скачивания фаила с blob поля.

Подскажите что я делаю не так.
Заранее спасибо.
Думаю всё правильно описал.

Автор: Anakin 12.9.2011, 10:43
Всё ещё актуально ((
Кто может сказать где я ошибку допускаю ?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)