数据库是Oracle 8.16,客户端用的是BDE中的Oracle驱动,连接到数据库
保存照片代码如下:Query1.Close();
Query1.SQL.Clear();
Query1.SQL.Add('SELECT * FROM MyTable');
Query1.RequestLive := true;
Query1.Open;Query1.Insert;
Query1.FieldByName('NAME').AsString := 'ddddd';
TBlobField(Query.FieldByName('PHOTO')).LoadFromFile('C:\temp,jpg');
Query1.Post;程序运行Post 时报错:   "Ora-22990: Lob 定位器无法扩展展事物处理" 怎么回事啊?

解决方案 »

  1.   

    試試如下:
    ADOQuery1.Close; 
    ADOQuery1.SQL.Clear; 
    ADOQuery1.SQL.Add('insert into Pic values(.....,:Pic,...)'); 
    ................. 
    ADOQuery1.Parameters.ParamByName('Pic').Assign(Image1.Picture.Bitmap); 
    ................. 
    ADOQuery1.ExecSQL; 
    提取: 
    Image1.Picture.Bitmap.Assign(TBLOBField(ADOQuery1.Parameters.ParamByName('Pic')))
      

  2.   

    insert image into db, ado style:procedure TForm1.Button1Click(Sender: TObject);
    var
      imStream:TMemoryStream;
      imPicture:TJPEGImage;
    begin
      if OpenPictureDialog1.Execute then
      begin
        image1.Picture.LoadFromFile(OpenPictureDialog1.FileName);
        imStream := TMemoryStream.Create;
        imPicture := TJpegImage.Create;
        imPicture.Assign(image1.Picture.Graphic);
        imPicture.SaveToStream(imStream);
        AdoQuery1.Close;
        AdoQuery1.SQL.Clear;
        AdoQuery1.SQL.Add('insert into your_table values(:name, :image)');
        AdoQuery1.Parameters.ParamByName('name').Value := Edit1.Text;
        AdoQuery1.Parameters.ParamByName('image').LoadFromStream(imstream,ftBlob);
        AdoQuery1.ExecSQL;
        AdoQuery1.Close;
        FreeAndNil(imPicture);
        FreeAndNil(imStream);
      end;
    end;
      

  3.   

    你最 Query 的属性用cacheupdae
    用database的事务来保存修改
    然后在保存时:
     try  
       database1.StartTransaction;
       Query1.post;
       Query1.ApplyUpdates;
       database1.commit;
     Except 
     end;