with w_main.adoquery_ZXSJ do
    begin
      close;sql.Clear;
      sql.Add('select * from ZXSJ');
      open;
      myfilename := ExtractFilePath(Application.ExeName) + fieldbyname('appname_zxsj').AsString;//获得文件的完整路径
//              TBlobField(FieldByName('filestream_ZXSJ')).SaveToFile(fieldbyname('appname_zxsj').AsString);
      myfileStream := TFileStream.Create(myfilename, fmCreate);
      showmessage(myfilename);
      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;
          Result1 := 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;
              exeBlobStream.ReadBuffer(Buffer^, N);
              exeBlobStream.WriteBuffer(Buffer^, N);
              Dec(Count, N);
            end;
          finally
            FreeMem(Buffer, BufSize);
          end;
        finally
          exeBlobStream.Free;
        end;
      finally
        myfileStream.Free;
      end;
  end;

解决方案 »

  1.   

    'select * from ZXSJ'
    是取不到图的。
      

  2.   

    with adoquery_ZXSJ do
                begin
                  close;sql.Clear;
                  sql.Add('select * from ZXSJ');
                  open;
                  TBlobField(FieldByName('filestream_ZXSJ')).SaveToFile(fieldbyname('appname_zxsj').AsString);              myini.WriteString('system','version',g_version_sql);//将新版本号写入ini              MessageBox(Handle,pchar('软件升级完成!'),'信息',MB_ICONINFORMATION);
                  winexec(pchar(ExtractFilePath(Application.ExeName)+i_exename),SW_SHOWNORMAL);
                  application.ShowMainForm:=false;
                  application.Terminate;
                end;
    但这样是可以的,只是把savetofile函数改成了他里面的具体代码而已??????????????
      

  3.   

    自己搞定            while Count <> 0 do
                begin
                  if Count > BufSize then N := BufSize else N := Count;
                  exeBlobStream.ReadBuffer(Buffer^, N);
                  exeBlobStream.WriteBuffer(Buffer^, N);//这里错了
                  Dec(Count, N);
                end;    exeBlobStream.WriteBuffer(Buffer^, N);//这里错了
    改成MyFileBlobStream.WriteBuffer(Buffer^, N);就可以了