我想用QUERY控件insert tb1(blob) values(:para1),然后设置参数的方式添加带BLOB字段的记录,不知怎么处理比较合适,同时取出又该如何?
不想用TABLE控件(总是预取数据)!

解决方案 »

  1.   

    //装载文件到流
      MStream:=TMemoryStream.Create;
      try
        MStream.LoadFromFile(trim(edtfile.Text));
      except
        ShowMessage(OpenFileErr);
        MStream.Free;
        exit;
      end;
    .....TBlobField(ADOTable1.FieldByName('files')).LoadFromStream(MStream);
    try
          ADOTable1.Post;
      

  2.   

    把数据库blob字段存到文件:
    procedure TMainFrm.N4Click(Sender: TObject);
    var
      MStream:TStream;
      MFileStream:TFileStream;
      pImage: pointer;
      FileName:string;
      aFileName:String;
    begin  SaveDialog1.FileName:=suiDBGrid2.DataSource.DataSet.FieldByName('filename').AsString;
      SaveDialog1.Execute;
      if not SaveDialog1.Execute then Exit ;
      try
         //从数据库读出文件信息
         MStream:=suiDBGrid2.DataSource.DataSet.CreateBlobStream(suiDBGrid2.DataSource.DataSet.FieldbyName('Files'),bmRead);
         FileName :=suiDBGrid2.DataSource.DataSet.FieldByName('FileName').asString ;
         //组合文件名
         aFileName := SaveDialog1.FileName;
         MStream.Position:=0;
         GetMem(pImage, MStream.Size);
         //创建文件
         MFileStream := TFileStream.Create(aFileName, fmCreate);
         MStream.Read(pImage^,MStream.Size);
         MFileStream.Write(pImage^ ,MStream.Size);
         FreeMem(pImage);     MFileStream.Free ;
         MStream.Free ;
        except
          if(MStream<>nil)then MStream:=nil ;
          if(MFileStream<>nil)then MFileStream:=nil ;
          exit;
        end;
      ShowMessage(SaveSuccess);
    end;
    再用ShellExecute打开