怎样把exe文件放到数据库中,从数据库中读取文件并保存为exe文件 我要做个远程更新的程序,我把程序放进服务器的数据库中,客户端在登陆时自动从数据库中更新最新版本。还有,我把exe文件的扩展名改成其他比如ttt,怎么在程序中打开这样的文件 *.ttt 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 procedure TForm1.Button1Click(Sender: TObject);begin AdoQuery1.SQL.Add('insert into test(bf) values(:p)'); Adoquery1.Parameters.ParamByName('p').LoadFromFile('c:\test.doc',ftBlob); AdoQuery1.ExecSQL;end;procedure TForm1.Button2Click(Sender: TObject);var MS: TMemoryStream;begin AdoQuery1.Close; AdoQuery1.SQL.Add('select * from test'); AdoQuery1.Open; Ms:=TMemoryStream.Create; TBlobField(AdoQuery1.FieldByName('bf')).SaveToFile('c:\outtest.doc');end;access数据库用ole字段,sql数据库可以用image字段 还有,我把exe文件的扩展名改成其他比如ttt,怎么在程序中打开这样的文件 *.ttt这个有人知道吗 这是我现在用的代码。带进度条...procedure TfrmUpdate.DownLoadPro; //从数据库的表中下载const MaxBufSize = $F000;var myfilename:string;//保存文件的路径和文件名 myfileStream,exeBlobStream: TStream; Count,BufSize, N: Integer; Buffer: PChar;begin with AdoUpdate do begin Open; Edit; myfilename := ExtractFilePath(Application.ExeName) + FieldByName('F_Appname').AsString;//获得文件的完整路径 myfileStream := TFileStream.Create(myfilename, fmCreate);//创建文件 try //SaveToStream(Stream); ExeBlobStream := CreateBlobStream(FieldByName('F_FileStream'), 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); ProgressBar1.Position := 0; ProgressBar1.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); ProgressBar1.Position := ProgressBar1.Position + 1; end; finally FreeMem(Buffer, BufSize); end; finally ExeBlobStream.Free; end; finally myfileStream.Free; end; end; MessageBox(Handle,pchar('软件升级完成,现在可以重新XXXX系统了 '),'信息',MB_ICONINFORMATION);end;下面的上传到数据库的表中procedure TfrmUpdate.UpLoadPro;const BufSize = $F000;var Counter, N: Integer; Buffer: PAnsiChar; FieldStrm: TStream; ExeFileStream:TFileStream; size_tmp: Double;begin with AdoUpdate do begin Open; Edit; try ExeFileStream:=TFileStream.Create('XXXXX.exe',fmopenRead); //打开文件 FieldStrm := CreateBlobStream(FieldByName('F_FileStream'), bmWrite); GetMem(Buffer, BufSize); try Counter := ExeFileStream.Size; size_tmp := ExeFileStream.Size; ProgressBar1.Position := 0; ProgressBar1.Max := Counter div BufSize; //每次上传文件流为61440 byte = $F000 while Counter <> 0 do begin if Counter > BufSize then N := BufSize else N := Counter; ExeFileStream.ReadBuffer(Buffer^, N); FieldStrm.WriteBuffer(Buffer^, N); Dec(Counter, N); ProgressBar1.Position := ProgressBar1.Position + 1; Application.ProcessMessages; end; finally FreeMem(Buffer, BufSize); FieldStrm.Free; end; FieldByName('F_Version').AsString:=iniVersion; FieldByName('F_Size').AsFloat:=size_tmp; FieldByName('F_UpdateTime').AsDateTime:=now(); Post; Application.MessageBox('新版本程序上传至服务器成功!','提示',MB_OK+MB_IconInformation); finally ProgressBar1.Position := ProgressBar1.Max; ExeFileStream.Free; CanLeave:=True; end; end;end; 请问boolean变量默认的初值是什么? 关于DLL中继承主窗体的问题,大家来讨论下! 续:exe文件生成exe文件的问题!(做过电子杂志的高手请进) 请问如何在Delphi中调用shell 关于随机数问题?在线等答案 准备学Delphi,大家给点好的建议! 如何实现资源管理器中TREEVIEW的关闭打开功能? 请大家谈谈程序员和系统分析员 chechy,上个问题太简单了。还是看看这个吧。 如何判断用户当前有多长时没敲击键盘? 暴难的问题!!怎么样修改远程XML文件的数据? 打开html文件问题。
begin
AdoQuery1.SQL.Add('insert into test(bf) values(:p)');
Adoquery1.Parameters.ParamByName('p').LoadFromFile('c:\test.doc',ftBlob);
AdoQuery1.ExecSQL;
end;procedure TForm1.Button2Click(Sender: TObject);
var MS: TMemoryStream;
begin
AdoQuery1.Close;
AdoQuery1.SQL.Add('select * from test');
AdoQuery1.Open;
Ms:=TMemoryStream.Create;
TBlobField(AdoQuery1.FieldByName('bf')).SaveToFile('c:\outtest.doc');
end;access数据库用ole字段,sql数据库可以用image字段
这个有人知道吗
procedure TfrmUpdate.DownLoadPro; //从数据库的表中下载
const
MaxBufSize = $F000;
var
myfilename:string;//保存文件的路径和文件名
myfileStream,exeBlobStream: TStream;
Count,BufSize, N: Integer;
Buffer: PChar;begin
with AdoUpdate do
begin
Open;
Edit;
myfilename := ExtractFilePath(Application.ExeName) + FieldByName('F_Appname').AsString;//获得文件的完整路径
myfileStream := TFileStream.Create(myfilename, fmCreate);//创建文件
try //SaveToStream(Stream);
ExeBlobStream := CreateBlobStream(FieldByName('F_FileStream'), 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); ProgressBar1.Position := 0;
ProgressBar1.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);
ProgressBar1.Position := ProgressBar1.Position + 1;
end;
finally
FreeMem(Buffer, BufSize);
end;
finally
ExeBlobStream.Free;
end;
finally
myfileStream.Free;
end;
end;
MessageBox(Handle,pchar('软件升级完成,现在可以重新XXXX系统了 '),'信息',MB_ICONINFORMATION);
end;下面的上传到数据库的表中
procedure TfrmUpdate.UpLoadPro;
const
BufSize = $F000;
var
Counter, N: Integer;
Buffer: PAnsiChar;
FieldStrm: TStream;
ExeFileStream:TFileStream;
size_tmp: Double;begin
with AdoUpdate do
begin
Open;
Edit;
try
ExeFileStream:=TFileStream.Create('XXXXX.exe',fmopenRead); //打开文件
FieldStrm := CreateBlobStream(FieldByName('F_FileStream'), bmWrite);
GetMem(Buffer, BufSize);
try
Counter := ExeFileStream.Size;
size_tmp := ExeFileStream.Size;
ProgressBar1.Position := 0;
ProgressBar1.Max := Counter div BufSize; //每次上传文件流为61440 byte = $F000
while Counter <> 0 do
begin
if Counter > BufSize then
N := BufSize
else
N := Counter;
ExeFileStream.ReadBuffer(Buffer^, N);
FieldStrm.WriteBuffer(Buffer^, N);
Dec(Counter, N);
ProgressBar1.Position := ProgressBar1.Position + 1;
Application.ProcessMessages;
end;
finally
FreeMem(Buffer, BufSize);
FieldStrm.Free;
end;
FieldByName('F_Version').AsString:=iniVersion;
FieldByName('F_Size').AsFloat:=size_tmp;
FieldByName('F_UpdateTime').AsDateTime:=now();
Post;
Application.MessageBox('新版本程序上传至服务器成功!','提示',MB_OK+MB_IconInformation);
finally
ProgressBar1.Position := ProgressBar1.Max;
ExeFileStream.Free;
CanLeave:=True;
end;
end;
end;