数据库类型:access; 表结构:id,name;使用ado连接。
id和name字段均不能为空也不能重复。
  用dbgrid来输入记录,按button1添加,按button2保存,如果字段id和name为空或重复在按下button2时提示用户错误信息。请贴出源码,非常感谢!注:上次很多人提到在dataset的beforepost中实现,可是beforepost事件还没执行,系统就已提示出数据库的错误信息了。

解决方案 »

  1.   

    button2的click事件写:
    try
        Table.post;
    except
        Application.showmessage('提交出错,请检查!','提示',MB_OK OR MB_ICONERROR);
    end;
      

  2.   

    难道非得在DBGrid中进行录入的工作吗?
    你既然放了两个Button,那何不把你的窗口分成上下两半,上半部放DBGrid,下半部放一些Edit组件来输入新记录呢?这些Edit组件只有在按了“添加”时才可用,并且按下“添加”时将光标置进来。
    按“保存”按钮的时候再判断这些数据是否能入数据表,如果为空(这是你的要求)则不能入表,否则就用SQL的INSERT语句插入新数据,至于重复记录的问题,应该放在数据表的设计里,定义你的那两个字段为唯一值就是了。将Insert语句放在TRY里面,若是重复值则insert肯定失败,这时给出提示就可以了。若新增成功,刷新一下DBGrid对应的数据即可。
      

  3.   

    "注:上次很多人提到在dataset的beforepost中实现,可是beforepost事件还没执行,系统就已提示出数据库的错误信息了。"
    这种事肯定你的数据表中已经存在这样非法,删除后重新执行
      

  4.   

    当你用dbgrid来直接进行数据维护的时候,当你移动游标,或离开DBGRID时,DELPHI将自己试图去POST数据,所以就会有
    “注:上次很多人提到在dataset的beforepost中实现,可是beforepost事件还没执行,系统就已提示出数据库的错误信息了。”
    的现象发生, hnhb(不死鸟) 说的对,建议你不要直接在DBGRID中编辑数据,如果你想坚持,请在DBGRID的OnColExit、OnColEnter、OnExit中加入控制代码吧