a我考网

 找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 93|回复: 1

[其他] Oracle认证:delta得到sql语句的函数详解

[复制链接]
发表于 2012-8-4 13:41:06 | 显示全部楼层 |阅读模式
{解析出sql语句}   function TForm1.gensqls(AdoCon:TADOConnection; pdelta: OleVariant; const ptablename, pkeyfields: WideString): WideString;) T* E; v) g# E
  var
& Q: }& b+ ^2 @( O' p% w  i, j: integer;
% i; a  ~- J  D9 c- M+ o  s1, s2: string;( o/ k4 m! @" y$ G1 z. q& ]
  Cmdstr: string;
" f/ a! s% ]# T# y6 _: k3 P  FieldList, Keylist: TstringList;
; h8 N. I9 I* F7 d, n& q6 Z9 a  Cdsupdate: TClientDataSet;
3 D6 c) l5 T* I3 f' Z$ A  sqlstr: WideString;' e1 x, }* _/ n9 e( G
  ado: TADOQuery;" v( U8 z5 T: r, w8 ^" K7 g
  begin
1 y! c6 h: f" R- K  if varisnull(pdelta) then6 t# U9 n( X! E' M* X8 S. C+ L( b
  Exit;
5 _- q. J- @8 \) q4 I  Cdsupdate:=TClientDataSet.Create(nil);. Q( e) V% R# m1 R. |& E6 s
  Cdsupdate.data:=pdelta;
' I$ {' Y  k- c/ @5 M  if not Cdsupdate.Active then
' ^' a$ E( w4 M1 a, G  Cdsupdate.Open;
' R# A2 R* S# g& x& U  try
+ r$ B8 `0 w6 Y( D. J$ L  h/ |3 V  FieldList:=TstringList.Create;
* z- N" w2 T7 D1 k% c. D. i* x* t  Keylist:=TstringList.Create;
8 e# r, s  R+ k# O0 i# J3 ^  Keylist.Delimiter:=',';
  x  s; m) }2 Y2 f  Keylist.DelimitedText:=pkeyfields;& P( P2 m- l( H7 B
  ado:=TADOQuery.Create(nil);% }' B/ w, \5 k) m# D
  ado.Connection:=AdoCon;
/ a6 u: V8 O9 i  ado.sql.Text:='select * from '+ptablename+' where 1=0';( P  P  z8 C; z' o0 L4 d8 \* y
  ado.Open;* l8 ~! J% P! h7 d' r
  ado.GetFieldNames(FieldList);
) C/ K9 Z2 E9 ^8 Y' l, z$ H0 |( \  ado.Free;
: g6 h0 P# h8 K% |) D( f% E2 Q$ F  for i:=1 to FieldList.Count do
- N, k; ]) J& Q3 r/ D. }4 M, z  if Cdsupdate.FindField(FieldList[i-1])nil then" K. f! ?! X  z1 L
  Cdsupdate.FindField(FieldList[i-1]).tag:=1;& p: ]' j" \& B3 e; l& y% _- X
  FieldList.Free;! L6 w' P& d) O4 @' s' \
  if Cdsupdate.RecordCount>0 then
; H# C0 U2 |3 v8 P5 w5 t  begin" c3 }, y3 [' ]. K4 z: h4 N
$ r. y# h. l+ u& W; g9 t" |8 X) ?
  Cdsupdate.First;
回复

使用道具 举报

 楼主| 发表于 2012-8-4 13:41:07 | 显示全部楼层

Oracle认证:delta得到sql语句的函数详解

</p>  s1:='';3 Q) l5 V% ^3 n% H
  s2:='';5 u, [& t* s# ?2 u3 P2 `6 ^
  while not Cdsupdate.Eof do7 W4 l0 ?* R8 |: C1 C
  begin
1 b  _5 p- b2 ]  Cmdstr:='';$ Q8 c% G, |: T$ z# s, |, F" `
  case Cdsupdate.UpdateStatus of' k7 L4 @# M, L" F+ B5 M: y8 b1 o
  usUnmodified: //从原数据行取得改削前提
& L! `! k0 z  \  begin, Y) Z. U* a( }+ ]# F
  s2:='';, \  B; R+ T0 [1 A9 k* o, _& R
  for j:=1 to Keylist.Count do
# o' U; `4 I2 z# h4 P  begin
* I" A% x/ u+ m* H7 C  if s2='' then( U1 V2 ~! w5 `; g8 E6 w0 B- v0 V- D
  s2:=Keylist[j-1]+'='+vartosql(Cdsupdate[Keylist[j-1]])
  Y" e8 F5 J* A7 E. F* ?  else& w" V0 X9 m) L$ k: ^1 ^/ p1 _
  s2:=s2+' and '+Keylist[j-1]+'='+vartosql(Cdsupdate[Keylist[j-1]]);, o; z; i+ Y" h0 \
  end;
8 w5 V& A3 Z1 G  end;
6 K4 ~/ S7 ]8 ~7 [- k5 {  usModified:8 j2 `8 z; ]7 b- n
  begin
: E. ~+ G, [5 \9 r; H" l4 g  s1:='';. g& }; r* s0 d7 S; I. a
  for i:=1 to Cdsupdate.FieldCount do
3 q3 V1 S: |8 [+ c1 k  begin
( @0 O) ]' J  ^: q, I  if (not Cdsupdate.Fields[i-1].isNull)and(Cdsupdate.Fields[i-1].tag=1) then* M: v0 }3 T* v
  begin
/ b2 `8 P# n! {+ f  if s1='' then' S. S$ J  c8 i+ F- B+ e+ O+ l
  s1:=Trim(Cdsupdate.Fields[i-1].FieldName)+' = '+vartosql(Cdsupdate.Fields[i-1].value)
# {$ D/ x7 J5 X' [9 z. I+ z7 {  else( a9 y/ C) k8 T6 ?  h
  s1:=s1+','+Trim(Cdsupdate.Fields[i-1].FieldName)+' = '+vartosql(Cdsupdate.Fields[i-1].value);6 |9 F& F1 p8 u! s. D6 l. u
  end;9 a" n. c# j4 o: `+ G
  end;
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Woexam.Com ( 湘ICP备18023104号 )

GMT+8, 2024-5-16 03:41 , Processed in 0.165745 second(s), 23 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表