fmDataModVod.ClientDatSetMovie.First;
 if image1.Picture.Graphic<>nil then    //把img里的图片用流形式保存到数据库
  begin
   if not fmDataModVod.SQLConnVod.InTransaction then
   begin
     TD.TransactionID := 1;
     TD.IsolationLevel := xilREADCOMMITTED;
     fmDataModVod.SQLConnVod.StartTransaction(TD);  //这句出错
     try
       fmDataModVod.ClientDatSetMovie.Edit;
       str:=Tmemorystream.Create;
       image1.Picture.Graphic.SaveToStream(str);
       str.Position:=0;
       Tblobfield(fmDataModVod.ClientDatSetMovie.FieldByName('pic')).loadfromstream(str);
       fmDataModVod.ClientDatSetMovie.Post;
       fmDataModVod.ClientDatSetMovie.ApplyUpdates(0);
       fmDataModVod.SQLConnVod.Commit(TD);
       str.Free;
     except
       fmDataModVod.SQLConnVod.Rollback(TD);
       raise;
     end;
   end;
  end
else
  begin
    fmDataModVod.ClientDatSetMovie.FieldByName('pic').value:=null;
  end;出错信息如下:
Project Project1.exe raised exception class EDatabaseError with message'. Cannot create new transaction because capacity was exceeded.'. Process stopped. Use Step or Run to continue.谁来帮我看看,分析一下。  

解决方案 »

  1.   

    我有例子
    代码如下:
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, DB, DBTables;
     
    type
      TForm1 = class(TForm)
        Database1: TDatabase;
        Query1: TQuery;
        Button1: TButton;
        Button2: TButton;
        procedure Button1Click(Sender: TObject);
        procedure Button2Click(Sender: TObject);
      private
        No : Integer;
      public
        { Public declarations }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.Button1Click(Sender: TObject);
    var
      S : TStream;
    begin
      S := TFileStream.Create('C:\WINDOWS\DESKTOP\设备描述表(中).xls', fmOpenRead);
      try
        Inc(No);
        with Query1 do
          begin
          SQL.Text := 'INSERT INTO TEST(A, B) VALUES(:A, :B)';
          ParamByName('A').AsInteger := No;
          ParamByName('B').LoadFromStream(S, ftBlob);
          ExecSQL;
          end;
      finally
        S.Free;
      end;
    end;
     
    procedure TForm1.Button2Click(Sender: TObject);
    begin
      with Query1 do
        begin
        SQL.Text := 'SELECT A, B FROM TEST';
        Open;
        TBlobField(FieldByName('B')).SaveToFile('C:\WINDOWS\DESKTOP\设备描述表(中)11.xls');
        Close;
        end;
    end;
     
    end.