我用Query1从informix数据库中读出一个context字段,然后再用
Table1将其插入SQL Server 2000中,单独插一条可以,但是循环起来
一次插入上千条就报错,设断点察看发现从第二条开始就不行了,为什么阿?
报的是:"access violation at 0x77f950fd:write of address 0x00030fb0".
昨天上午用这个方法还可以插入,但是下午就开始报错了,真郁闷!
我是这么写的:FieldByName('content').AsString:=Query1.Fields[7].AsString;
我用的是:
    Query1.First;
    while Not Query1.Eof do
    begin
      With Table2 do
      begin
        Insert;
        FieldByName('blocknum').AsString:=blockValue;
        FieldByName('listno').AsString:=Query1.Fields[0].AsString;
        FieldByName('accperson').AsString:=Query1.Fields[1].AsString;
        FieldByName('decperson').AsString:=Query1.Fields[2].AsString;
        FieldByName('dectel').AsString:=Query1.Fields[3].AsString;
        FieldByName('decfax').AsString:=Query1.Fields[4].AsString;
        FieldByName('decmail').AsString:=Query1.Fields[5].AsString;
        FieldByName('faulttime').AsDateTime:=Query1.Fields[6].AsDateTime;
        //就是下面这条不行
        FieldByName('content').AsString:=Query1.Fields[7].AsString;
        FieldByName('timelimit').AsInteger:=Query1.Fields[8].AsInteger;
        Post;
        Refresh;
      end;
可以用AsString方法么?用Query1从informix读出的text字段应该没问题,因为设置断点后可以看到读出的内容。
还是因为读或写text字段要用TMemoField,TBlobField才行?

解决方案 »

  1.   

    是因为读或写text字段要用TMemoField,TBlobField才行?
    不错原因就在这里,因为Text是与String不同的字段。
    要用TBlobField。
      

  2.   

    FieldByName('content').AsString:=Query1.Fields[7].AsString;
    改为
    FieldByName('content').value:=Query1.Fields[7].AsString;
    其他的也改,试试
      

  3.   

    //改为
    //FieldByName('content').value:=Query1.Fields[7].AsString;
    //其他的也改,试试
    我昨天就试过了,不行,还是抱同样的错,其他的也改了,也不行。
    song317大侠,您能给出具体怎么写吗?谢谢了
      

  4.   

    我用如下的方法,程序可以运行,但是sql server中content字段插不进去,为空
    //ts是一个TMemoryStream
            ts:=TMemoryStream.Create;
            TBlobField(Query1.Fields[7]).SaveToStream(ts);
            ts.Position:=0;
            TBlobField(Table2.FieldByName('content')).LoadFromStream(ts);
            ts.Free;
      

  5.   

    你试试一下,这样可以吗?
    FieldByName('content').AsString:=Query1.Fields[7].value;
      

  6.   

    为什么我单独插入一条纪录就没问题,包括text字段也能插进去,而插入多条就不行?
      

  7.   

    当然了,你用format(%s,[字符串])试试
      

  8.   

    //一个Updata小例子。可以参考
    procedure TfParameter.UpDataParVal(AKID: Integer);
    var
      ParValstream: TMemorystream;
      rStrList: TStringList;
    begin
      DM.MoldDB.StartTransaction;
      try
        with qryPub do
        begin
          try
          rStrList := TStringList.Create;
          rStrList.Add(KValue);    //要保存的字符串
          ParValstream:=Tmemorystream.create;
          rStrList.savetostream(ParValstream);
          ParValstream.position:=0;
          Close;
          SQL.Clear ;
          SQL.Add('update Parameter Set PValue=:AVal where PID=:AKID');
          ParamByName('AKID').asInteger:=AKID;
          ParamByName('AVal').loadfromstream(ParValstream,ftMemo); //Text字段
          ExecSQL;
          finally
          rStrList.Free;
          ParValstream.free;
          end;
        end;
        DM.MoldDB.Commit;
      except
        DM.MoldDB.Rollback;
        Application.MessageBox('更新参数表操作失败,请入管理员联系!','出错信息',mb_OK+MB_ICONERROR);
      end;
    end;