我有一个表其中有一个BLOB字段来存图片不过我插入一行记录的时候先写入其他字段 然后在写入图片字段在写入图片字段的时候要先定位到要插入的那条记录现在用什么方法做呢?
我用了一个ADOTABLE控件 来找那条记录 但是现在有错 报数据类型不被支持 这是什么原因呢?!
self.ADOTableThread.Close;
     self.ADOTableThread.TableName := 'FCS_DISASTER_PIC';
     self.ADOTableThread.Filter := 'COMM_TIME ='+'''+Floattostr(tempRec.CommTime)+''';
     self.ADOTableThread.Open;
     self.ADOTableThread.Edit;     TBlobField(self.ADOTableThread.FieldByName('PICTURE')).LoadFromFile(fstrLocalePictureTempFileName);
     self.ADOTableThread.Post;

解决方案 »

  1.   

    我一般用ADODataSet(dst)。
    dst.active :=false;
    dst.commandtext:='';  //此处写记录满足的条件,以定位的要找的记录
    dst.active :=true;
    dst.edit;  
    TBlobField(dst.FieldByName('PICTURE')).loadfromfile(fstrLocalePictureTempFileName);
    //也可以用流的方法实现。
    // var ms: TMemoryStream;
    // ms := TMemoryStream.Create;
    //  ms.LoadFromFile(filename);
    //  (self.DSTTEMP.FieldByName('PICTURE') as TBlobField).LoadFromStream(ms);
    dst.post;
      

  2.   

    楼上的dst.commandtext:='';  //此处写记录满足的条件,以定位的要找的记录
    这句是不是也要写Sql语句啊!我写Select * from XX where...不成因为不能包含那个Blob字段如果不包含那个Blob字段也不成 后面向里面插入的时候会说找不到那个字段 所以我才郁闷啊!
      

  3.   

    var
       ImageStream:TFileStream;
    begin
        ImageStream:=TFileStream.Create(fstrLocalePictureTempFileName,fmOpenRead);
        qrytemp.Close;
        qrytemp.SQL.Text:='update  FCS_DISASTER_PIC set PICTURE=:PICTURE where COMM_TIME ='+'''+Floattostr(tempRec.CommTime)+''';
        qrytemp.Parameters.ParamByName('PICTURE ').LoadFromStream(ImageStream,ftBlob);
        qrytemp.ExecSQL;
        ImageStream.Free;
    end;