两个DBGrid A和B,A有较多记录,B只有一条记录是A现在指向的列.
B能仅显示这一列,并随A的指针移动而变化.(鼠标或其他方式移动都要反映出来)
特别是要把A做成只读的.对A进行Insert时,下面要给出一个空的记录;对A进行EDIT时能在B里EDIT;对A进行DELETE也是就上面的指针移动问题了.
我知道应该不难,关键是我不知道Delphi的指针是怎么用的,麻烦各位高手留个范例给小弟学习一下:)

解决方案 »

  1.   

    两个DBGrid A和B,A有较多记录,B只有一条记录是A现在指向的列.
    可以在第一个dbgrid连接的adoquery的afterscroll事件中处理,思路是:
    变量获得光标在的行的数据的主键的值 然后在该事件中
      With ADOQuery2 Do
      Begin
        Close;
        SQL.Clear;
        SQL.Add('SELECT * FROM 表 WHERE 字段名称=:aa');
        Parameters.ParamByName('aa').Value := adoquery1.FieldByName('字段名称').Value;
        Open;
      End;
    这样就可以了
    至于你后面的问题 既然你把a设为只读了 怎么还能够insert edit呢?请在明示!
      

  2.   

    在dbgrid1所连接的datasource事件中写
     With ADOQuery2 Do
      Begin
        filtered:=false;
        filter:='字段名='+adoquery1.fieldbyname(‘字段名’).value;
       filtered:=true;
      End;
      

  3.   

    一个很简单的方法,不知道是不是你要的。用两个TABLE1和TABLE2打开同一个表,两个DataSource分别指向TABLE1和TABLE2,两个DBGRID分别显示两个TABLE的内容。两个TABLE建关联,把要显示单行记录的TABLE2的MasterSource指向TABLE1的DATESOURCE1,MasterFields设为相同名字的字段,GO就行了,你点DBGRID1的时候,下面的DBGRID2只显示上面选中的记录。至于只读之类的东东,只要在Object Inspecter中设置属性就行了。呵呵,一句码也没有写。
      

  4.   

    不好意思刚才没有说清楚.
    这个东西其实就是想控制用户直接输入在一个DBGrid里输入,所以为用户另外建了个DBGrid,不同的是,这个DBGrid只有一条记录.
    再说清楚一点就是:两个DBGrid,A和B.想要他们同步显示数据库里的同一张表,A是只读的,对表的操作都在B里进行.而且要求B只显示一条记录,就是A现在指向的那条记录.
    比如,一个用户想对A显示的表进行操作,那么他就要到专门为他准备的B上进行操作.如果是EDIT或DELETE,那么直接改就可以了.如果是INSERT,B里要显示一条空的记录给他填,而且象在A里填一样--提交,失败则回滚.
      

  5.   

    angle097113(深思不解) ,不好意思.我说的是对A对应的那张表进行操作.A本身设成只读.
    你的方法我试过了,EDIT和DELETE都可以,但是在INSERT的时候,因为adoquery1.FieldByName('字段名称').Value 还没有得到新记录的值,所以没有办法在B里给用户一个空的记录让他填.
    ---------------------------------------------------------------------------------
    Erice(白雪公猪),你的方法实际和angle097113(深思不解)是一样的.
    ---------------------------------------------------------------------------------
     lijccn(K') 你的方法好像没用,两个DBGrid都显示的是一样的.
      

  6.   

    有点明白楼主的意思了;
    不过我们做这个的时候一般都是用一个dbgrid和N个lable再加N个edit;^_^;
      

  7.   

    试试这样的思路:
    Tabel A,B
    A.open
    B.RecordSet=A.RecordSet建立A与B的主从关系(楼上说的:MasterFields设为相同名字的字段)这样可以保证你同步显示,致于其它的功能,自已觉得怎么做好,自己发挥了
      

  8.   

    最简单的办法:
    建立两张表A,b,结构一样,A房数据,B是临时表,每次用完就清空,只放一条纪录.
    编辑时,B表的记录和A表指向的纪录一样
    删除时,A表删除指向的纪录,B表清空
    增加时,B表增加一条空纪录,提交纪录时,把它追加到A表
      

  9.   

    otherface(凌志) 如果两个DBGrid都显示的是一样的显示一样,那你一定是没有做级联。一定要做级联才行,让两个表联动起来。至于楼主说的,要求A不能改,B能修改,只要设DBGRID的READONLY属性就行了。设为真就改不了了呗!这个方法我是做过才写上的,不会错的。如果还看不明白的话,我就没有办法了!
      

  10.   

    一个DBGrid 显示,另外若干个DBEdit放在“编辑”区里,使用同一DataSource,我一直都是这样。
      

  11.   

    一个DBGrid 显示,另外若干个DBEdit放在“编辑”区里,使用同一DataSource,这样是最好的。
      

  12.   

    用于显示的,用TQuery
    用于编辑的,用DBEdit和DataSource每插入或编辑后,重做一次查询
      

  13.   

    将A和B的数据源设为同一个
    而前一个设置为只读
    在对后一个进行的每一种修改的同时
    都刷新前一个在B的上下滚动的事件里面填写
    A.refresh;
      

  14.   

    lijccn(K')你说的等会儿到单位我再试试.
    -----------------------------------------------------------------------------
    love_me_forever(傻子),你的思路我想过,就是不会实现才来这里问的啊.
    -----------------------------------------------------------------------------
    47522341(睡到8:30)  cwf555(cwf) tanqth(青蛙) xue2002yan(雪刺猬),其实我也是这样做的,但是最近觉得应该还有别的更好的办法.所以我就总是想弄明白Delphi的记录指针的使用,比如love_me_forever(傻子)的那种实现方法,而且我想应该不是很难的问题.只要知道A现在指向的记录(特别是INSERT的时候,自增长字段也是空的,所以一定要记录指针才可以实现),然后在B里显示,操作这条记录就可以了.而A是把DBGrid而不是Qrury设为Readonly就可以了.关键是我不会用记录指针.(随便问一下,Delphi里是不是有这个东东-__-)
    -----------------------------------------------------------------------------
    谢谢各位的回答,不过好像还没等到最满意的回答(记录指针的用法)
    今天下午来结帖!!
      

  15.   

    其实这是一个很简单的问题
    何必把事情搞的这么麻烦呢做的太复杂
    就把delphi的一些特性都放弃了
    本末倒置
      

  16.   

    用locate的方法来定位就可以了……
      

  17.   

    yiweijin(已未尽) 我道是觉得你说的对,毕竟我们用的是Delphi,如果能用Delphi自己的特性来解决问题,应该比那些通用的方法要好。otherface(凌志) 如果你还试不出来的话,我就再写一次发给你。
      

  18.   

    如果数据源选择table
    那么a与b两个dbgrid
    a为只读
    在table控件的afterscroll事件中
    写上a.refresf
    然后a与b就同步了如果数据源用query的话
    就用updatesql和query 连用
    控制其中几个字段的更新
    删除和插入如果数据量很大
    建议用query和updatesql连用如果不考虑速度
    就用table
      

  19.   

    谢谢各位,不过我还是有点想问Delphi里到底有没有记录指针,HOHO.算了,让大家久等了,结帖吧.
     yiweijin(已未尽) ,你说的很有道理.其实我也是用别的方法实现的,但是我想如果可以弄懂这个问题的话以后做这方面就可以方便很多,我想我还是很乐意利用Delphi的特性的,只是要先知道这个特性才行:)