Добрый вечер.
Опишу ситуацию Есть 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 поля.
Подскажите что я делаю не так. Заранее спасибо. Думаю всё правильно описал. |