比如,表中已有20条记录,此时,我需要用DBGrid输入5条数据.但输入时,我并不希望那20条数据也显示在表格上.
adoquery1, datasource1, DBGrid1.
如果用 adoquery1.open, adoquery1.append;
可以输入,但DBGrid1里就会把原有的数据显示出来,
当然用:adoquery1.sql.text := 'select from tabel1 where ID = '99999'
这样查询,肯定表格中是不会有数据的,可是觉得不太好.有没有其它的办法?

解决方案 »

  1.   

    非要用DBGrid输入数据吗?既然这样,给你一种思路:建一个与原表相同字段结构的表,比如可以命名为WorkTable,它有5条空记录。可以另拖一个DataSet关联它。在你想输入5条新记录时,就把DataSource指向这个表,输入完后,用代码把这个表里的5条记录Append到你的原表中去,然后清空WordTable。
      

  2.   

    lihuasoft(学习低调做人)
    你的这种方法也不错,还是先讲一下为什么用这个控件吧.正在做一个发货的页面,很明显,发货会涉及到两张表,一张主表,记录发货的主要信息,如单据号(主键),客户编号,发货总金额,等等. 另外一个表就是从表了,单据号,型号,数量,单价,备注等.在这种情况,当然希望在一个FORM里搞定,并且让用户输入时比较方便,因此,主表采用DBEdit之类的输入,重表就用DBGrid做输入,因为输入的东西,一行行的,在一起,再做一个自动求合,很直观明了.那么,就肯定会有,新增,修改,删除,新增明细,删除明细,保存,取消.
    新增:DBGrid要求是空白的,并可以输入.
    修改:DBGrid里要有某单据号的所有明细,其它明细不能显示,方便用户修改.(修改肯定是针对单据号修改).
    新增明细,删除明细:针对DBGrid的一条记录操作.
    保存:主从表的数据一起提交.
    取消:主表取消增增或修改,从表(也就是DBGrid)需要回滚到取消或新增之前的状态(包括显示的数据).所以,如果采用临时表,感觉也不是很方便...