1.  
  2.  将数据集操作方面的东西全部封装成一个单独的类 
  3.  
  4.  TcustomAdoDataSet是TadoQuery、TadoTable、TadoDataSet、TadoCommand的公共祖先类 
  5.  
  6.  应尽量使用TadoDataSet和TadoCommand类 
  7.  
  8. }  
  9.   
  10. unit untOpeDataSet;  
  11.   
  12.   
  13.   
  14. interface  
  15.   
  16.   
  17.   
  18. uses  
  19.   
  20.   SysUtils,  
  21.   
  22.   db, adodb, commonFunction, msg;  
  23.   
  24.   
  25.   
  26. type  
  27.   
  28.   TopeDataSet = class  
  29.   
  30.   public  
  31.   
  32.     {修改已发生,但还没有得到应用的记录,在关闭窗口前应给予提示}  
  33.   
  34.     function adoUpdatesPending(adoDataSet: TCustomAdoDataSet): boolean;  
  35.   
  36.     {增加}  
  37.   
  38.     procedure Append(adq: TadoQuery);  
  39.   
  40.     {保存}  
  41.   
  42.     procedure Save(adq: TadoQuery);  
  43.   
  44.     {删除}  
  45.   
  46.     procedure delete(adq: TadoQuery);  
  47.   
  48.     {刷新数据集}  
  49.   
  50.     procedure flash(adq: TadoQuery);  
  51.   
  52.     {事务提交}  
  53.   
  54.     procedure adqCommit(adq: TadoQuery);  
  55.   
  56.     {查询数据集}  
  57.   
  58.     procedure adqQuery(adq: TadoQuery; s: string);  
  59.   
  60.     {带参查询数据集}  
  61.   
  62.     procedure adqQueryPara(adq: TadoQuery; s: string; s1: variant);  
  63.   
  64.     procedure adqQueryPara2(adq: TadoQuery; s: string; s1: variant; s2: variant);  
  65.   
  66.     procedure adqQueryPara3(adq: TadoQuery; s: string; s1: variant; s2: variant; s3: variant);  
  67.   
  68.     procedure adqQueryPara4(adq: TadoQuery; s: string; s1: variant; s2: variant; s3: variant; s4:       variant);  
  69.   
  70.     {更新数据集}  
  71.   
  72.     procedure adqExec(adq: TadoQuery; s: string);  
  73.   
  74.     {带参更新数据集}  
  75.   
  76.     procedure adqExecPara(adq: TadoQuery; s: string; s1: variant);  
  77.   
  78.     procedure adqExecPara2(adq: TadoQuery; s: string; s1: variant; s2: variant);  
  79.   
  80.     procedure adqExecPara3(adq: TadoQuery; s: string; s1: variant; s2: variant; s3: variant);  
  81.   
  82.     procedure adqExecPara5(adq: TadoQuery; s: string; s1: variant; s2: variant; s3: variant; s4:       variant; s5: variant);  
  83.   
  84.     procedure adqExecPara6(adq: TadoQuery; s: string; s1: variant; s2: variant; s3: variant; s4:       variant; s5: variant; s6: variant);  
  85.   
  86.   end;  
  87.   
  88.   
  89.   
  90. implementation  
  91.   
  92.   
  93.   
  94. { TopeDataSet }  
  95.   
  96.   
  97.   
  98. function TopeDataSet.adoUpdatesPending(  
  99.   
  100.   adoDataSet: TCustomAdoDataSet): boolean;  
  101.   
  102. var  
  103.   
  104.   clone: TadoDataSet;  
  105.   
  106. begin  
  107.   
  108.   clone := TadoDataSet.create(nil);  
  109.   
  110.   try  
  111.   
  112.     clone.clone(adoDataSet);               //复制  
  113.   
  114.     clone.filterGroup := fgPendingRecords; //已得到修改但还没有得到应用的所有记录  
  115.   
  116.     clone.filtered := true;  
  117.   
  118.     result := not(clone.bof and clone.eof);  
  119.   
  120.     clone.close;  
  121.   
  122.   finally  
  123.   
  124.     clone.free;  
  125.   
  126.   end;  
  127.   
  128. end;  
  129.   
  130.   
  131.   
  132. procedure TopeDataSet.adqCommit(adq: TadoQuery);  
  133.   
  134. begin  
  135.   
  136.   try  
  137.   
  138.     adq.Connection.CommitTrans;  
  139.   
  140.     info(SopeSuccess, Scorp);  
  141.   
  142.   except  
  143.   
  144.     adq.Connection.RollbackTrans;  
  145.   
  146.     info(SopeFail, Scorp, 16);  
  147.   
  148.   end;  
  149.   
  150. end;  
  151.   
  152.   
  153.   
  154. procedure TopeDataSet.adqExec(adq: TadoQuery; s: string);  
  155.   
  156. begin  
  157.   
  158.   adq.Close;  
  159.   
  160.   adq.SQL.Clear;  
  161.   
  162.   adq.SQL.Text := s;  
  163.   
  164.   adq.ExecSQL;  
  165.   
  166. end;  
  167.   
  168.   
  169.   
  170. procedure TopeDataSet.adqExecPara(adq: TadoQuery; s: string;  
  171.   
  172.   s1: variant);  
  173.   
  174. begin  
  175.   
  176.   adq.Close;  
  177.   
  178.   adq.SQL.Clear;  
  179.   
  180.   adq.SQL.Text := s;  
  181.   
  182.   adq.Parameters[0].Value := s1;  
  183.   
  184.   adq.ExecSQL;  
  185.   
  186. end;  
  187.   
  188.   
  189.   
  190. procedure TopeDataSet.adqExecPara2(adq: TadoQuery; s: string; s1,  
  191.   
  192.   s2: variant);  
  193.   
  194. begin  
  195.   
  196.   adq.Close;  
  197.   
  198.   adq.SQL.Clear;  
  199.   
  200.   adq.SQL.Text := s;  
  201.   
  202.   adq.Parameters[0].Value := s1;  
  203.   
  204.   adq.Parameters[1].Value := s2;  
  205.   
  206.   adq.ExecSQL;  
  207.   
  208. end;  
  209.   
  210.   
  211.   
  212. procedure TopeDataSet.adqExecPara3(adq: TadoQuery; s: string; s1,  
  213.   
  214.   s2, s3: variant);  
  215.   
  216. begin  
  217.   
  218.   adq.Close;  
  219.   
  220.   adq.SQL.Clear;  
  221.   
  222.   adq.SQL.Text := s;  
  223.   
  224.   adq.Parameters[0].Value := s1;  
  225.   
  226.   adq.Parameters[1].Value := s2;  
  227.   
  228.   adq.Parameters[2].Value := s3;  
  229.   
  230.   adq.ExecSQL;  
  231.   
  232. end;  
  233.   
  234.   
  235.   
  236. procedure TopeDataSet.adqExecPara5(adq: TadoQuery; s: string; s1,  
  237.   
  238.   s2, s3, s4, s5: variant);  
  239.   
  240. begin  
  241.   
  242.   adq.Close;  
  243.   
  244.   adq.SQL.Clear;  
  245.   
  246.   adq.SQL.Text := s;  
  247.   
  248.   adq.Parameters[0].Value := s1;  
  249.   
  250.   adq.Parameters[1].Value := s2;  
  251.   
  252.   adq.Parameters[2].Value := s3;  
  253.   
  254.   adq.Parameters[3].Value := s4;  
  255.   
  256.   adq.Parameters[4].Value := s5;  
  257.   
  258.   adq.ExecSQL;  
  259.   
  260. end;  
  261.   
  262.   
  263.   
  264. procedure TopeDataSet.adqExecPara6(adq: TadoQuery; s: string; s1,  
  265.   
  266.   s2, s3, s4, s5, s6: variant);  
  267.   
  268. begin  
  269.   
  270.   adq.Close;  
  271.   
  272.   adq.SQL.Clear;  
  273.   
  274.   adq.SQL.Text := s;  
  275.   
  276.   adq.Parameters[0].Value := s1;  
  277.   
  278.   adq.Parameters[1].Value := s2;  
  279.   
  280.   adq.Parameters[2].Value := s3;  
  281.   
  282.   adq.Parameters[3].Value := s4;  
  283.   
  284.   adq.Parameters[4].Value := s5;  
  285.   
  286.   adq.Parameters[5].Value := s6;  
  287.   
  288.   adq.ExecSQL;  
  289.   
  290. end;  
  291.   
  292.   
  293.   
  294. procedure TopeDataSet.adqQuery(adq: TadoQuery; s: string);  
  295.   
  296. begin  
  297.   
  298.   adq.Close;  
  299.   
  300.   adq.SQL.Clear;  
  301.   
  302.   adq.SQL.Text := s;  
  303.   
  304.   adq.Open;  
  305.   
  306. end;  
  307.   
  308.   
  309.   
  310. procedure TopeDataSet.adqQueryPara(adq: TadoQuery; s: string;  
  311.   
  312.   s1: variant);  
  313.   
  314. begin  
  315.   
  316.   adq.Close;  
  317.   
  318.   adq.SQL.Clear;  
  319.   
  320.   adq.SQL.Text := s;  
  321.   
  322.   adq.Parameters[0].Value := s1;  
  323.   
  324.   adq.open;  
  325.   
  326. end;  
  327.   
  328.   
  329.   
  330. procedure TopeDataSet.adqQueryPara2(adq: TadoQuery;  
  331.   
  332.   s: string; s1, s2: variant);  
  333.   
  334. begin  
  335.   
  336.   adq.Close;  
  337.   
  338.   adq.SQL.Clear;  
  339.   
  340.   adq.SQL.Text := s;  
  341.   
  342.   adq.Parameters[0].Value := s1;  
  343.   
  344.   adq.Parameters[1].Value := s2;  
  345.   
  346.   adq.open;  
  347.   
  348. end;  
  349.   
  350.   
  351.   
  352. procedure TopeDataSet.adqQueryPara3(adq: TadoQuery;  
  353.   
  354.   s: string; s1, s2, s3: variant);  
  355.   
  356. begin  
  357.   
  358.   adq.Close;  
  359.   
  360.   adq.SQL.Clear;  
  361.   
  362.   adq.SQL.Text := s;  
  363.   
  364.   adq.Parameters[0].Value := s1;  
  365.   
  366.   adq.Parameters[1].Value := s2;  
  367.   
  368.   adq.Parameters[2].Value := s3;  
  369.   
  370.   adq.Open;  
  371.   
  372. end;  
  373.   
  374.   
  375.   
  376. procedure TopeDataSet.adqQueryPara4(adq: TadoQuery;  
  377.   
  378.   s: string; s1, s2, s3, s4: variant);  
  379.   
  380. begin  
  381.   
  382.   adq.Close;  
  383.   
  384.   adq.SQL.Clear;  
  385.   
  386.   adq.SQL.Text := s;  
  387.   
  388.   adq.Parameters[0].Value := s1;  
  389.   
  390.   adq.Parameters[1].Value := s2;  
  391.   
  392.   adq.Parameters[2].Value := s3;  
  393.   
  394.   adq.Parameters[3].Value := s4;  
  395.   
  396.   adq.Open;  
  397.   
  398. end;  
  399.   
  400.   
  401.   
  402. procedure TopeDataSet.Append(adq: TadoQuery);  
  403.   
  404. begin  
  405.   
  406.   adq.Append;  
  407.   
  408. end;  
  409.   
  410.   
  411.   
  412. procedure TopeDataSet.delete(adq: TadoQuery);  
  413.   
  414. var  
  415.   
  416.   i: integer;  
  417.   
  418. begin  
  419.   
  420.   if adq.IsEmpty then  
  421.   
  422.     abort;  
  423.   
  424.   i := adq.RecNo;  
  425.   
  426.   if queryInfo(SifDel, Scorp) then  
  427.   
  428.   begin  
  429.   
  430.     try  
  431.   
  432.       adq.RecNo := i;  
  433.   
  434.       adq.Delete;  
  435.   
  436.       adq.UpdateBatch();  //批更新  
  437.   
  438.     except  
  439.   
  440.       adq.CancelBatch();  
  441.   
  442.       info(SdelError, Scorp, 16);  
  443.   
  444.     end;  
  445.   
  446.   end;  
  447.   
  448. end;  
  449.   
  450.   
  451.   
  452. procedure TopeDataSet.flash(adq: TadoQuery);  
  453.   
  454. begin  
  455.   
  456.   adq.Close;  
  457.   
  458.   adq.Open;  
  459.   
  460. end;  
  461.   
  462.   
  463.   
  464. procedure TopeDataSet.Save(adq: TadoQuery);  
  465.   
  466. begin  
  467.   
  468.   try  
  469.   
  470.     adq.UpdateBatch();  
  471.   
  472.     info(Ssave_success, Scorp);  
  473.   
  474.   except  
  475.   
  476.     adq.CancelBatch();  
  477.   
  478.     info(Ssave_fail, Scorp, 16);  
  479.   
  480.   end;  
  481.   
  482. end;  
  483.   
  484.   
  485.   
  486. end.  
  487.   
  488. procedure adqExec(adq: TadoQuery; s: string);  
  489.   
  490. begin  
  491.   
  492.   adq.Close;  
  493.   
  494.   adq.SQL.Clear;  
  495.   
  496.   adq.SQL.Text := s;  
  497.   
  498.   adq.ExecSQL;  
  499.   
  500. end;  
  501.   
  502.   
  503.   
  504. procedure adqExecPara(adq: TadoQuery; s: string;  
  505.   
  506.   s1: variant);  
  507.   
  508. begin  
  509.   
  510.   adq.Close;  
  511.   
  512.   adq.SQL.Clear;  
  513.   
  514.   adq.SQL.Text := s;  
  515.   
  516.   adq.Parameters[0].Value := s1;  
  517.   
  518.   adq.ExecSQL;  
  519.   
  520. end;  
  521.   
  522.   
  523.   
  524. procedure adqQuery(adq: TadoQuery; s: string);  
  525.   
  526. begin  
  527.   
  528.   adq.Close;  
  529.   
  530.   adq.SQL.Clear;  
  531.   
  532.   adq.SQL.Text := s;  
  533.   
  534.   adq.Open;  
  535.   
  536. end;  
  537.   
  538.   
  539.   
  540. procedure adqQueryPara(adq: TadoQuery; s: string; s1: variant);  
  541.   
  542. begin  
  543.   
  544.   adq.Close;  
  545.   
  546.   adq.SQL.Clear;  
  547.   
  548.   adq.SQL.Text := s;  
  549.   
  550.   adq.Parameters[0].Value := s1;  
  551.   
  552.   adq.open;  
  553.   
  554. end;  
  555.   
  556.   
  557.   
  558. procedure Append(adq: TadoQuery);  
  559.   
  560. begin  
  561.   
  562.   adq.Append;  
  563.   
  564. end;  
  565.   
  566.   
  567.   
  568. procedure delete(adq: TadoQuery);  
  569.   
  570. var  
  571.   
  572.   i: integer;  
  573.   
  574. begin  
  575.   
  576.   if adq.IsEmpty then  
  577.   
  578.     abort;  
  579.   
  580.   i := adq.RecNo;  
  581.   
  582.   if queryInfo(SifDel, Scorp) then  
  583.   
  584.   begin  
  585.   
  586.     try  
  587.   
  588.       adq.RecNo := i;  
  589.   
  590.       adq.Delete;  
  591.   
  592.       adq.UpdateBatch();    
  593.   
  594.     except  
  595.   
  596.       adq.CancelBatch();  
  597.   
  598.       showmessage('Fail');  
  599.   
  600.     end;  
  601.   
  602.   end;  
  603.   
  604. end;  
  605.   
  606.   
  607.   
  608. procedure flash(adq: TadoQuery);  
  609.   
  610. begin  
  611.   
  612.   adq.Close;  
  613.   
  614.   adq.Open;  
  615.   
  616. end;  
  617.   
  618.   
  619.   
  620. procedure Save(adq: TadoQuery);  
  621.   
  622. begin  
  623.   
  624.   try  
  625.   
  626.     adq.UpdateBatch();  
  627.   
  628.     showmessage('Success');  
  629.   
  630.   except  
  631.   
  632.     adq.CancelBatch();  
  633.   
  634.     showmessage('Fail');  
  635.   
  636.   end;  
  637.   
  638. end;  
  639.   
  640.   
  641.   
  642. end.