我建了一个表(GRP_ID组别,MENU_ID菜单,ACTIVE是否可用1/0),我想用DBCHECKBOX来点击就改变ACTIVE的值,写进数据库。例如MENU_ID有三个值sys,user,righi。我用三个DBCHECKBOX代表这三个值的,点击时就可改变ACTIVE的值。但是我我这三个DBCHECKBOX的DATAFIELD的属性设为ACTIVE,更新时就提示,不能插入重复值的提示,请问要这样才能解决呢?

解决方案 »

  1.   

    你在DBCHECKBOX的OnClick事件中写代码,这个问题就解决了。
      

  2.   

    TO:wpr321 (小荣) 
      你将代码贴出看看。
      

  3.   

    我的意思是一个DBCHECKBOX代表数据库中一行的某个字段值,然后通过DBCHECKBOX点击来改变数据库中相应的值。但是更新的时候就出现插入重复值的错误
      

  4.   

    例如一个表中有(GRP_ID组别,MENU_ID菜单,ACTIVE是否可用1/0)
                  (aa,sys,0)
                  (aa,query,1)
                  (aa,stockin,0)
                  (bb,sys,0)
                  (bb,query,1)
                  (bb,stockin,1)我想修改aa这个组的权限,用三个DBCHECKBOX分别代表sys,query,stockin的ACTIVE值,只要我点一下DBCHECKBOX,哪个相应的ACTIVE就改变。问题是我把那三个DBCHECKBOX连接到一个TQUERY(已经过滤到了AA组),DATAFIELD值设为ACTIVE,我保存数据库时他就提示插入重复值的错误
      

  5.   

    你没有设主键啊,数据库怎么知道你要改哪条,可以给GRP_ID组别,MENU_ID菜单设复合主键,不过这样做权限很麻烦
    如果你的MENU_ID的值是固定的话可以做成字段就方便了
      

  6.   

    GRP_ID,sys,query,stockin这样 
    数据就是
    aa,1,0,1
      

  7.   

    大家还不明白我的问题吧?因为相应的多个菜单行就有多个DBCHECKBOX来代表,这样多个DBCHECKBOX就连到同一个DATADIELD字段,其实这样这多个DBCHECKBOX就连到同一条记录的,更新的时候肯定出现重复值的。我怎样才能是他们分别代表个条记录啊?
      

  8.   

    楼主,我看的还是有些糊涂为什么,需要三个DBCHECKBOX控件呀
      

  9.   

    那里可能没个菜单做一个字段啊,那一个表不是很多字段啦?
    ------------------------------------------------------------------
    字段多了 数据少了啊晕  字段多了怕什么 你用什么库偶MSSQL   80个字段的表也是经常用滴
      

  10.   

    为什么要用DBCheckBox呢,换成CheckBox,在它的onclick事件中写代码.
      

  11.   

    超过1M就不要发了,我的油箱装不下. xhh_gzkz&21cn.com
      

  12.   

    我看了一下,像你那样用DBChecBox是做不到的.因为你四个都是关联一个字段.我就不论你这样做的合理性的问题,如果你非要这么做你就需要用CheckBox控件,然后手动的设置它们的checked属性.这样才能达到你需要的效果.
      

  13.   

    你增加checkBox控件后,代码做如下修改及可.
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      ADOQuery1.Edit;
      ADOQuery1.Post;
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      ADOQuery1.Edit;
    end;procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
    begin           //CheckBox1 对应修改密码 其它的可以类似的增加
         if (DataSet.FieldByName('active').AsBoolean) then
               CheckBox1.Checked:=true
               else
                CheckBox1.Checked:=false;
    end;procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
    begin
    DataSet.FieldByName('active').AsBoolean:=CheckBox1.Checked;
    end;
      

  14.   

    procedure TForm1.ADOQuery1AfterScroll(DataSet: TDataSet);
    begin           //CheckBox1 对应修改密码 其它的可以类似的增加
         if (DataSet.FieldByName('active').AsBoolean) then
               CheckBox1.Checked:=true
               else
                CheckBox1.Checked:=false;
    end;这样只能够通过选择了一行,然后就修改、保存一行,这个我知道。况且你保存的时候还要判断哪个CHECKBOX是不是有CHECKED了,要是有很多条菜单权限的话,就要写很多代码了
      

  15.   

    是这样的。是你的思路不对啊,如果有100个权限,你难道要加100个dbcheckbox吗?那也不是很繁吗?
    所以最好你就在dbgird里修改吧!