来源:Oracle认证 发布时间:2012-11-12 Oracle认证视频 评论
{解析出sql语句}
function TForm1.gensqls(AdoCon:TADOConnection; pdelta: OleVariant; const ptablename, pkeyfields: WideString): WideString;
var
i, j: integer;
s1, s2: string;
Cmdstr: string;
FieldList, Keylist: TstringList;
Cdsupdate: TClientDataSet;
sqlstr: WideString;
ado: TADOQuery;
begin
if varisnull(pdelta) then
Exit;
Cdsupdate:=TClientDataSet.Create(nil);
Cdsupdate.data:=pdelta;
if not Cdsupdate.Active then
Cdsupdate.Open;
try
FieldList:=TstringList.Create;
Keylist:=TstringList.Create;
Keylist.Delimiter:=',';
Keylist.DelimitedText:=pkeyfields;
ado:=TADOQuery.Create(nil);
ado.Connection:=AdoCon;
ado.sql.Text:='select * from '+ptablename+' where 1=0';
ado.Open;
ado.GetFieldNames(FieldList);
ado.Free;
for i:=1 to FieldList.Count do
if Cdsupdate.FindField(FieldList[i-1])<>nil then
Cdsupdate.FindField(FieldList[i-1]).tag:=1;
FieldList.Free;
if Cdsupdate.RecordCount>0 then
begin
Cdsupdate.First;
s1:='';
s2:='';
while not Cdsupdate.Eof do
begin
Cmdstr:='';
case Cdsupdate.UpdateStatus of
usUnmodified: //从原数据行取得修改条件
begin
s2:='';
for j:=1 to Keylist.Count do
begin
if s2='' then
s2:=Keylist[j-1]+'='+vartosql(Cdsupdate[Keylist[j-1]])
else
s2:=s2+' and '+Keylist[j-1]+'='+vartosql(Cdsupdate[Keylist[j-1]]);
end;
end;
usModified:
begin
s1:='';
for i:=1 to Cdsupdate.FieldCount do
begin
if (not Cdsupdate.Fields[i-1].isNull)and(Cdsupdate.Fields[i-1].tag=1) then
begin
if s1='' then
s1:=Trim(Cdsupdate.Fields[i-1].FieldName)+' = '+vartosql(Cdsupdate.Fields[i-1].value)
else
s1:=s1+','+Trim(Cdsupdate.Fields[i-1].FieldName)+' = '+vartosql(Cdsupdate.Fields[i-1].value);
end;
end;
编辑特别推荐:常用的SQL注射语句解析
Oracle提议基于开放标准的云管理API
修改计算机名称导致Oracle的em不能用
① 凡本网注明稿件来源为"原创"的所有文字、图片和音视频稿件,版权均属本网所有。任何媒体、网站或个人转载、链接转贴或以其他方式复制发表时必须注明"稿件来源:我考网",违者本网将依法追究责任;
② 本网部分稿件来源于网络,任何单位或个人认为我考网发布的内容可能涉嫌侵犯其合法权益,应该及时向我考网书面反馈,并提供身份证明、权属证明及详细侵权情况证明,我考网在收到上述法律文件后,将会尽快移除被控侵权内容。