数据量大的时候用 @寫法1) 
数据量小的时候用 @寫法2)
因为Append这类的处理都是要放到缓存中的
如果数据量大,系统处理的速度会很慢你还可以在 @寫法1 的基础上改进一下
一次性执行多条语句(在SQL Server中是可以的,没有测试过Oracle)
              sqlinststa := '';              For n:=1 to m-1 do
              begin
               sqlinststa:=sqlinststa + 'insert into tab_chkduty(sta_id,chk_day,modtime) ';
               sqlinststa:=sqlinststa + 'values('''+stadata[n]+''',To_Date('''+DateToStr(p)+''',''YYYY/MM/DD''),sysDate )'#13#10;
              end;                 try
                  DM.C_CHKDUTY.Close;
                  DM.C_CHKDUTY.open;
                  DM.C_CHKDUTY.CommandText:=sqlinststa;
                  DM.C_CHKDUTY.execute;
                  DM.C_CHKDUTY.ApplyUpdates(0);
               Except
                  showmessage('數據庫錯誤!!');
               end;

解决方案 »

  1.   

    同意楼上的,但是如何解决数据的冲突是个问题如果使用SQL语句则必须有足够的条件来检查呵呵!
      

  2.   

    只就你自己的程序(一)来看,执行起来效率可能要受影响了,因为每此循环都要执行下列语句:DM.C_CHKDUTY.Close;
                      DM.C_CHKDUTY.open;
                      DM.C_CHKDUTY.CommandText:=sqlinststa;
                      DM.C_CHKDUTY.execute;
                      DM.C_CHKDUTY.ApplyUpdates(0);
    close,open 在三层结构中会很慢的。不过经楼上的改动好多了,值得我们学习!我的见解是:在循环语句终于一般不用sql.当然,楼上的改进只是在循环中生成了sql语句,并没有在循环阶段执行,真得不错的!望大家在讨论:)
      

  3.   

    zswang(伴水) 寫的sql語句 報''sql命令的結束有問題''.
    #13是回车 #10是换行     我不明白有什麼問題???
      

  4.   

    我在後面加了';'還是有問題,報'字符無效'錯誤sqlinststa:=sqlinststa + 'values('''+stadata[n]+''',To_Date('''+DateToStr(p)+''',''YYYY/MM/DD''),sysDate );'#13#10;
                                                   |
                                                   |
                                                   |
      

  5.   

    我加了逗號後 又出現'ora-00911: 字符無效'錯誤.sqlinststa:=sqlinststa + 'values('''+stadata[n]+''',To_Date('''+DateToStr(p)+''',''YYYY/MM/DD''),sysDate );'#13#10;
                                                  /|\
                                                   |
                                                   |
      

  6.   

    问题是不是在中间层:看看DataSetProvider属性Options->poAllowCommandText是否为true呢?
      

  7.   

    字符无效,就是字符无效呀
    好好看你的sql语句去
      

  8.   

    在sql中#13#10用于分隔两个SQL语句,
    你可以用换行符分割一大堆的SQL语句让SQL一起执行
      

  9.   

    #13#10是回車和換行, 加#13#10寫的sql語句 報''sql命令的結束有問題''.
    加了逗號後 又出現'ora-00911: 字符無效'錯誤.我沒輒了.算了,我用方法2.   等我的程序完成後一起給分....