SourStream:TFileStream.Create(FName,fmOpenRead);
TempStream:TMemoryStream.Create; 我只会
TBlobField(FieldByName('DocFile')).LoadFromStream(TempStream); 如何用流的方法实现存储进度显示呢????
TempStream:TMemoryStream.Create; 我只会
TBlobField(FieldByName('DocFile')).LoadFromStream(TempStream); 如何用流的方法实现存储进度显示呢????
解决方案 »
- Series1.MultiBar为何编译通不过?
- 打开别人的源程序显示缺少控件TfcStatusbar和TfcOutlookbar和TdxDBGridReportLink
- 一个关于修改数据库字段的问题!!!!
- 关于登录窗口中adoquery的一个简单问题
- 用RAVE开发报表的问题
- SystemParametersInfo这个函数怎么用?它是用来屏蔽一些功能键的。
- 菜鸟提问,隆重赠分----100分
- 把一个DLL做成一个MIDFORM里面含有许多个childFrom,然后由EXE把他们全套一起调出来是否可以?如果可以给个例子吧?
- 我想让一个进度条与一个batchmove相联系,使bctchmove执行时显示进度条进度,怎么作呢?
- 请问,怎样获得网卡的MAC地址!解决了给分,只给一个人!@!!
- delphi程序报了毁灭性错误啊,想死了,大家帮帮忙
- 怎么处理100万条数据,让cpu得利用率不高,而且速度优良,大家讨论.参与者有分,分不够在加
跟踪代码到Recordset.Update(EmptyParam, EmptyParam);ADODB.pas的4473行(Delphi7)发现接下来的调用没法弄了,呵呵
代码如下
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ExtCtrls, DB, ADODB, ComCtrls;type
TForm1 = class(TForm)
ADOQuery1: TADOQuery;
Button2: TButton;
ProgressBar1: TProgressBar;
ADOConnection1: TADOConnection;
Button4: TButton;
ADOQuery1file_name: TWideStringField;
ADOQuery1file_content: TBlobField;
procedure Button2Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;type
TMyBlobField = class(TBlobField)
public
procedure LoadFromStream(Stream: TStream; ProgressBar: TProgressBar);
end; TMyStream = class(TStream)
public
function CopyFrom(Source: TStream; Count: Int64; ProgressBar: TProgressBar): Int64;
end;var
Form1: TForm1;
M1: TMemoryStream;
F1: TFileStream;implementation{$R *.dfm}procedure TForm1.Button2Click(Sender: TObject);
begin
M1 := TMemoryStream.Create;
F1 := TFileStream.Create('G:\F4-第一时间.rm', fmOpenRead);
end;{ TMyBlobField }procedure TMyBlobField.LoadFromStream(Stream: TStream; ProgressBar: TProgressBar);
begin
with TMyStream(DataSet.CreateBlobStream(Self, bmWrite)) do
try
CopyFrom(Stream, Stream.Size, ProgressBar);
finally
Free;
end;
end;{ TMyStream }function TMyStream.CopyFrom(Source: TStream; Count: Int64; ProgressBar: TProgressBar): Int64;
const
MaxBufSize = $F000;
var
BufSize, N: Integer;
Buffer: PChar;
begin
if Count = 0 then
begin
Source.Position := 0;
Count := Source.Size;
end;
Result := Count;
ProgressBar.Max := Count;
if Count > MaxBufSize then BufSize := MaxBufSize else BufSize := Count;
GetMem(Buffer, BufSize);
try
while Count <> 0 do
begin
if Count > BufSize then N := BufSize else N := Count;
Source.ReadBuffer(Buffer^, N);
WriteBuffer(Buffer^, N);
Dec(Count, N);
ProgressBar.StepBy(N);
ProgressBar.Update;
end;
finally
ProgressBar.Position := 0;
FreeMem(Buffer, BufSize);
end;
end;procedure TForm1.Button4Click(Sender: TObject);
begin
//select * from Table_2
with ADOQuery1 do
begin
Close;
Open;
First;
Edit;
FieldByName('file_name').Value := 'G:\孙燕姿Stefanie.rmvb';
TMyBlobField(FieldByName('file_content')).LoadFromStream(F1, Self.ProgressBar1);
Post;
Close;
end;
end;end.
var
SourStream :TFileStream;
DestStream :TStream;
Buf: array [1..1024*100] of Char;
.........
.........
SourStream:=TFileStream.Create(FName,fmOpenRead);
DestStream:=CreateBlobStream(FieldByName('DocFile'),bmWrite); SourStream.Position:=0;
PBForm:= TPBForm.Create( Nil );
PBForm.show;
PBForm.FormStyle:=fsStayOnTop;
try
while SourStream.Position<SourStream.Size do//如果指针位置不到文件末尾
begin
application.ProcessMessages ;
PBForm.PB1.Position :=Trunc(SourStream.Position/SourStream.Size*100);
SourStream.Read(Buf,SizeOf(Buf));//读取
DestStream.Write(Buf,SizeOf(Buf));//写入
end;
//TBlobField(FieldByName('DocFile')).LoadFromStream(TempStream);
finally
PBForm.Close;
SourStream.Free;//释放
DestStream.Free;//释放
end;
............
............