当我添加记录时,当前记录的最后一个字段获取焦点!但是我按TAB键时,它老是移动焦点到倒数第二个字段?我要他移到第一个字段去?我在dbgrid1keyprees中写了代码:
if(key=#13)then
keybd_event(vk_tab,0,0,0);
我该怎么办啊?
谁有在dbgrid中检查输入数据完整性(不能为空,不能重复等)的例程?有的话发到我的E-MAIL:[email protected],谢谢!!!

解决方案 »

  1.   

    1、我在dbgrid中添加记录从来没有出现过你的焦点问题,它老实移到第一个字段,建议你删除这个dbgrid控件,重新建一个同样的dbgrid控件,就有可能决了。
        2、如果你的dbgrid关联的是一个query,每输入一个数据后,就在另一个临时query中用select count 命令查出含有该数据的记录个数;如果你的dbgrid关联的是一个table,每输入一个数据后,就记下这个数,然后删除该字段值,用locate函数寻找含有该值的记录,如果没有,就把该值写回该字段。或者每输一个数后就在table的BeforeEdit事件中用locate检测。如果有重复的就报错。
        3、用IsEmpty()函数可以测试任何类型的数据是否为空,检测数据为空可以在table的AfterEdit事件中进行。
      

  2.   

    答一:
    if key=#13 then
       if DBGrid1.SelectedIndex<>DBGrid1.FieldCount-1 then
          DBGrid1.SelectedIndex:=dbgrid1.SelectedIndex +1
       else
          if  tstringgrid(dbgrid1).row<tstringgrid(dbgrid1).RowCount-1 then
          begin
          tstringgrid(dbgrid1).row:=tstringgrid(dbgrid1).row+1;
          dbgrid1.SelectedIndex:=0;
          dataset.Next ;//dataset是DBGrid后台数据集
          end;
    答二:
    数据完整性(不能为空,不能重复等)只能检查DBGrid后台数据集的完整性,可设其为主键,若不能为主键,可在数据集BeforePost中加以判断。
      

  3.   

    判断是否为空和不能重复的问题我已经解决,还有个问题就是,当处在编辑状态下时,但当前行的数据输入还不够完整,有些字段为空,这个时候移动光标到其他行时就会报错,我用的是adoquery!请大家帮忙!!!
      

  4.   

    if  tstringgrid(dbgrid1).row<tstringgrid(dbgrid1).RowCount-1 then
          begin
          tstringgrid(dbgrid1).row:=tstringgrid(dbgrid1).row+1;
      

  5.   

    if  tstringgrid(dbgrid1).row<tstringgrid(dbgrid1).RowCount-1 then
          begin
          tstringgrid(dbgrid1).row:=tstringgrid(dbgrid1).row+1;这个什么意思?
      

  6.   

    在onkeydown中用下面的代码
    if key=13 then
         postmessage(dbgrid1.Handle,wm_keydown,vk_tab,0);
      

  7.   

    用 datasource.locktype=ltBatchOptimistic ,用updatabatch 递交