我现在有一个ACCESS数据库cxw,其中有3个表,分别是:
kcb---字段有两个,分别是kcid(文本型),kcname(文本型)
cjb---字段有4个,分别是kcid(文本型),xhid(文本型),qzcj(数值型),qmcj(数值型)
xsb---字段有两个,分别是xhid(文本型),xsname(文本型)
现在,用一个DBCTRL控件进行多表查询、显示和修改,需要修改的字段是qzcj和qmcj。
我并没有直接在这个控件中对数据进行修改,而是在窗口中用两个DBEdit与qzcj和qmcj相对应,用DBEdit来间接修改它们。我试了很多方法,但都没有成功,请各位高手帮帮我,小生在此有礼了!谢谢!

解决方案 »

  1.   

    Edit都改不了吗 贴关键代码看看,另外你的表、字段名实在难以理解 您说呢
      

  2.   

    直接用DBEDIT连接cjb的qzcj(数值型),qmcj(数值型)两个字段,再放入一个导航器
    连接DBEDIT所指的数据源,运行就OK了
      

  3.   

    我这么分析不知对你能否有帮助
    1、数据获得
    可以用你喜欢的方式从数据库中获得所需的数据
    //我一般用一个Sql语句来获得
    2、数据处理(前台)
    将数据显示到屏幕上
    对数据进行加工(增删改)
    3、数据的的更新(后台数据库)
    将对数据的处理结果反映到数据库上去
    //我一般用程序控制的方式去更改
      

  4.   

    谢谢各位的热心帮助,我把一些没说清楚的问题再解释一下:
        数据源的获得和连接:
    procedure TForm1.FormShow(Sender: TObject);
    begin
      query1.Close;
      query1.SQL.Clear;
      query1.SQL.Add('SELECT A.xs_id as 学号,B.xs_name as 姓名,C.kc_name as 课程');
      query1.SQL.Add(',A.qmcj ,A.zpcj as 总评');
      query1.SQL.Add(' from cjb A,xsb B,kcb C');
      query1.SQL.Add(' where A.xs_id=B.xs_id and a.kc_id=c.kc_id');  Query1.Open;
      DbEdit1.DataField:='qmcj';
      DbEdit2.DataField:='总评';
    end;
     
        在DBCTRL控件中显示查询的内容,如果不做任何数据修改,运行一切正常,但如果在DBEDIT1或2中修改了数据,DBCTRL控件中就会相应的变化,可是切换到下一个记录的时候,就会提示出错,出错信息是“缺少刷新或更新的键列信息”。
        我做过实验,如果不采用第三个表,只用两个表查询修改数据一切正常,一旦增加第三个表进入查询就会出现上述所说的错误。    这个问题已经困惑我一个星期了,恳请高手们指教。
      

  5.   

    当然错了
    上面的兄弟不是说了很清楚了吗?
    用动态的sql解决
    还有尽量不要是有dbcontrol控件
    我发现用edit也比用dbedit好,至少速度快
    还有可以多学一点东西,包括sql语句
      

  6.   

    我的SQL本来就是用的动态SQL,是在窗口显示的时候加载上面的查询代码。现在最关键的是,这个动态SQL所得到的数据集修改它的数据的时候就会出现数据指针错误。
    sandzou朋友,如果我不用dbcontrol控件,用edit的话,我怎么样才能够将我在edit里面改动的数据显示在DBGrid1中,并且在我点击保存按钮后,将所有我更改的数据保存到对应的数据表中?
        谢谢!
      

  7.   

    复杂的Sql生成的临时记录集,系统可能提供不了逆向的修改功能。
    否则很多程序员是不是又该失业了??^_^
      

  8.   

    “缺少刷新或更新的键列信息”?是不是没有关键字段所至呀!用的是MSSQLSERVER吧
      

  9.   

    to oneznzfan(DOS时代程序员) update tablename set fieldname='''+edit1.text+''' where condition
      

  10.   

    query1.SQL.Add('SELECT A.xs_id as 学号,B.xs_name as 姓名,C.kc_name as 课程');
      query1.SQL.Add(',A.qmcj ,A.zpcj as 总评');
      query1.SQL.Add(' from cjb A,xsb B,kcb C');
      query1.SQL.Add(' where A.xs_id=B.xs_id and a.kc_id=c.kc_id');只是显示多个表
    如果你要修改或者删除都有类似的问题,因为表的指针无法定位,当然报错
    显示的时候可以考虑用视图或者临时表
    修改的时候先定位到改记录,在修改
    好像只有这个方法
    希望高手们想想有没有更好的方法
    小弟在这献丑了
      

  11.   

    你用视图吧,但是视图一次只可以更新一个表中的字段,
    如果字段分在多张表里面,你可以用多条sql语句,总比上面的方法简单:)
    good luck
      

  12.   

    谢谢上面所有朋友的帮助,我决定放弃上面的方案.
    现在我用上述SQL生成一个临时表,显示和修改它没有任何问题,然后在保存的时候,再将数据用循环的方法写回到对应的表中,能够成功.
    前面的想法是为了提高编程效率,但经过尝试失败了.
    现在的方法实际上就是我原来常用的方法.
    看来DEPHI +SQL还不能让我们数据库程序员高效率.等待新的版本为我们解决问题.
    再次感谢各位!
      

  13.   


    改用DBGRID控件吧,那样很方便的