现在要一个多行数据录入界面,最后将所有数据一次性提交到数据库!而Delphi的DBGrid只能完成一行增加后,再点击按钮增加!这样的数据输入不太方便!()
  偶的办法是做一个数据不敏感DBGrid控件(delphi的DBGrid是Data-ware控件)。可是工作量太大,现在又要的急!所以只有投机取巧:
  偶的办法是:adoquery1通过datsource1和dbgrid1相连.现在为了实现多行输入,根据adoquery1.Fielddefs另建一个adoQuery2的数据结构,去掉primary key等约束条件,这样才能增加多行空数据,并将adoquery1的数据倒入到adoQuery2中,同时插入N(如10行)行空数据,将adoQuery2连接到DBGrid1上,这样就可以完成多行输入的功能。
  问题是:adoquery1数据到adoQuery2的数据复制,偶的办法是adoquery1.savetofile(...),adoquery2.LoadFromFile(...),如果数据库巨大,肯定会影响到数据库的效率。如果用adoquery2.recordset := adoquery1.recordset 则带上adoquery1的primary key等约束条件,不能滞要求.....
  请问:能否用程序修改adoquery2的primary key等约束条件信息, adoconnection有一个openschema方法,可是偶没有找到Setschema等方法
  哪位大侠能帮忙,不胜感激@!
  

解决方案 »

  1.   

    将ADOQUERY的游标锁定设为批量更新: ltBatchUpdate
      

  2.   

    AdoConnection1.BeginTrans;
        try
          //do something
          AdoConnection1.CommitTrans;
        except
          AdoConnection1.RollbackTrans;
        end;
      

  3.   

    这样数据先保存在内存中,最后再UPDATEBATCH方法把数据写入数据库
      

  4.   

    用批量处理就不要这么麻烦了,再不行用STRINGGRID也行啊!用循环。呵呵!
      

  5.   

    To: jim138, Sail365(东少爷), jinjazz(近身剪(N-P攻略))  老板要求的效果的是:要一进入界面,DbGrid 即有N个空行,可以进行编辑(不是点增加按钮,一行一行的增加),最后将所有数据提交到数据库。 
      
      

  6.   

    那就用Stringgrid来,自己控制,方便
      

  7.   

    设置一个不许用户输入的主键字段:
    进入界面后先增加n个行,用户输入后再post
      

  8.   

    To: gamaster(a明-非sql相关不回):
      哈哈!高!偶就是用这个办法解决问题了. adoquery用ltBatchOptimistic。真踏破铁鞋无觅处,得来全不费功夫!