我用ADOConnection1连接数据库,ADOQuery1连ADOConnection1,DataSource1连ADOQuery1,DBGridEh1连DataSource1:
1、我已通过一个按钮从数据库查询出A、B、C、D四列信息显示在DBGridEh1中(这四列数据来源于一个表或交叉两个表的信息)
2、之后需要对DBGridEh1中的数据进行编辑,新增行,删除行等等操作,完成之后点击另外一个按钮更新到SQL数据库中;
问题:
    1、我新增行时自动赋值:A列=变量1,B列=变量2?
    2、C列只允许录入0-9的数字,否则提示信息并不允许离开焦点?
    3、D列只允许录入10个字符长度?
    4、点保存按钮时,检查DBGridEh1里的数据,C列和D列是否有空值?
       1)、如果C、D两列有任意空值,提示第n行有空值,并不更新数据库?
       2)、如果C、D两列无空值,将DBGridEh里的数据更新或新增记录到数据库(一个表或交叉两个表)?看似有点复杂,但对于高手不算难事,主要是不知道怎么循环判断,望高手指导一下!

解决方案 »

  1.   

    首先DBGridEh1是数据感知组件,不能像stringgrid那样任意操作
    自动赋值,完全可以在添加时,给数据集赋值,不就是append一个记录吗,然后对字段赋值就行了,但是对于多表联合查询是不行的,所以你的问题先要搞清楚是单表还是多表,是对数据集直接操作还是在界面上临时操作,如果脱离数据集临时操作,就不能用DBGridEh1组件
      

  2.   

    用 stringgrid 来做 新增、修改 的界面    dbgrideh 做 查询、删除 的动作
      

  3.   

    新增的功能只放在一个页面中。这个 form 只提供新增的功能
        
                                修改、删除,及其它 期限的放在 查询 的 form 里,点 修改 的按钮 则返回到 新增 的 form 
                             这样的设计,方便权限的执行
      

  4.   

    stringgrid 上放 隐藏的 text combobox     注意 currentRow,currentCol 就可以了    判断 text 的输入值,做判断    OK 后,就可以按 新增 的按钮了
      

  5.   

        2、C列只允许录入0-9的数字,否则提示信息并不允许离开焦点? 
        4、点保存按钮时,检查DBGridEh1里的数据,C列和D列是否有空值? 
    ---------------------------------------------------------
    2、可以在数据集的beforepost事件判断,假设数据集为Adoquery,代码如下:
       if not (Adoquery.FieldbyName('C').AsString in ['0', '9']) then
       begin
         Abort;
         ShowMessage('没有在0--9之间');
       end;4、可以在保存按钮下,写如下代码:
       if Adoquery.Locate('C', '', []) then
       begin
         Exit;
         ShowMessage('C列不能为空!');
       end;   if Adoquery.Locate('D', '', []) then
       begin
         Exit;
         ShowMessage('D列不能为空!');
       end;
      

  6.   

    LS的,exit了还能showmessage吗?
      if Adoquery.Locate('D', '', []) then 
      begin 
        Exit; 
        ShowMessage('D列不能为空!');   
      end;
      

  7.   

    多表不好这样操作的。
    至于说判断为不为0-9的情况,你可以在DBGridEh1的KeyPress里去判断的啊