我这样来处理了。 可是我看到其他人的SQL跟踪记录 都是把所有的SQL语句拼成一句以后 再执行的。 procedure TMainFrm.Button8Click(Sender: TObject); var i:Integer; redtag:Integer; begin QSAVE.Connection:=DataModule1.ADOConnection1; QSAVE.SQL.Text:='select top 0* from aaaa with (nolock)'; qsave.Open; dxMemData1.First; try while not dxMemData1.Eof do begin QSAVE.Append; QSAVE.Edit; for i:=0 to dxMemData1.FieldCount-1 do begin if dxMemData1.Fields[i].Tag<>0 then begin if (redtag=1) and (dxMemData1.Fields[i].Tag=3)then begin //2,3,如果是3 表示这个字段要体现成负数 qsave.FieldValues[dxMemData1.Fields[i].FieldName]:=-dxMemData1.Fields[i].Value; end else begin qsave.FieldValues[dxMemData1.Fields[i].FieldName]:=dxMemData1.Fields[i].Value; end; end; end; QSAVE.Post; dxMemData1.Next; end; QSAVE.Connection.BeginTrans; QSAVE.UpdateBatch(arAll); QSAVE.Connection.CommitTrans; except QSAVE.Connection.RollbackTrans; end; end;
貌似有自动保存的语句吧
QuotedStr,自动给你的字符串加单引号,转义单引号
procedure TMainFrm.Button8Click(Sender: TObject);
var
i:Integer;
redtag:Integer;
begin
QSAVE.Connection:=DataModule1.ADOConnection1;
QSAVE.SQL.Text:='select top 0* from aaaa with (nolock)';
qsave.Open;
dxMemData1.First;
try
while not dxMemData1.Eof do
begin
QSAVE.Append;
QSAVE.Edit;
for i:=0 to dxMemData1.FieldCount-1 do
begin
if dxMemData1.Fields[i].Tag<>0 then
begin
if (redtag=1) and (dxMemData1.Fields[i].Tag=3)then
begin
//2,3,如果是3 表示这个字段要体现成负数
qsave.FieldValues[dxMemData1.Fields[i].FieldName]:=-dxMemData1.Fields[i].Value;
end
else
begin
qsave.FieldValues[dxMemData1.Fields[i].FieldName]:=dxMemData1.Fields[i].Value;
end;
end;
end;
QSAVE.Post;
dxMemData1.Next;
end;
QSAVE.Connection.BeginTrans;
QSAVE.UpdateBatch(arAll);
QSAVE.Connection.CommitTrans;
except
QSAVE.Connection.RollbackTrans;
end;
end;