我用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才行?
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才行?
不错原因就在这里,因为Text是与String不同的字段。
要用TBlobField。
改为
FieldByName('content').value:=Query1.Fields[7].AsString;
其他的也改,试试
//FieldByName('content').value:=Query1.Fields[7].AsString;
//其他的也改,试试
我昨天就试过了,不行,还是抱同样的错,其他的也改了,也不行。
song317大侠,您能给出具体怎么写吗?谢谢了
//ts是一个TMemoryStream
ts:=TMemoryStream.Create;
TBlobField(Query1.Fields[7]).SaveToStream(ts);
ts.Position:=0;
TBlobField(Table2.FieldByName('content')).LoadFromStream(ts);
ts.Free;
FieldByName('content').AsString:=Query1.Fields[7].value;
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;