X
xiaolongmao
Unregistered / Unconfirmed
GUEST, unregistred user!
用ado直接连接连接的远程数据库(sqlserver2000)。用的是二层,刚学的,上传下载数据并带有进度条怎么实现呢,本地数据用accress或是msde。。。(有带源码的实例可付点费用购买,谢了) 另外我做了一个把更新程序直接存在数据库了,但是在上传下载的时候不会显示进度条,只有等下载完了才显示进度条(在局域网就不会,如果是远程的进度条不会显示),希望懂的人能改造一下。。 本人Q:267282011 邮箱 :267282011@qq.com procedure Tf_u.SpeedButton1Click(Sender: TObject); var myfileStream,exeBlobStream: TStream; Count,BufSize, N: Integer; f:textfile; Buffer: PChar; const MaxBufSize = $F0; begin // timer_down.Enabled := false; with ADOQuery_zxsj do begin close;sql.Clear; sql.Add('select * from ZXSJ'); open; // TBlobField(FieldByName('filestream_ZXSJ')).SaveToFile(fieldbyname('appname_zxsj').AsString); //showmessage(myfilename); myfileStream := TFileStream.Create('c:/text.exe', fmCreate);//创建文件 //////////////////////////////////////////////////////////////////////////////////////////////////////////////////// try //SaveToStream(Stream); exeBlobStream := ADOQuery_ZXSJ.CreateBlobStream(FieldByName('filestream_ZXSJ'), bmRead);//从数据库中取得记录 Count := 0; try if Count = 0 then begin exeBlobStream.Position := 0; Count := exeBlobStream.Size;//showmessage(inttostr(count)); end; if Count > MaxBufSize then BufSize := MaxBufSize else BufSize := Count; GetMem(Buffer, BufSize); ProgressBar_down.Position := 0; ProgressBar_down.Max := count div bufsize;//每次写入文件的数据流大小为bufsize,所以max为count 除以 bufsize try while Count <> 0 do begin if Count > BufSize then N := BufSize else N := Count; exeBlobStream.ReadBuffer(Buffer^, N);//从数据库表中取数据流 MyFileStream.WriteBuffer(Buffer^, N);//将数据流写入文件 Dec(Count, N); ProgressBar_down.Position := ProgressBar_down.Position + 1; end; finally FreeMem(Buffer, BufSize); end; finally exeBlobStream.Free; end; finally myfileStream.Free; end; end; showmessage('下载新程序ok');