我现在有一个ACCESS数据库cxw,其中有3个表,分别是:
kcb---字段有两个,分别是kcid(文本型),kcname(文本型)
cjb---字段有4个,分别是kcid(文本型),xhid(文本型),qzcj(数值型),qmcj(数值型)
xsb---字段有两个,分别是xhid(文本型),xsname(文本型)
现在,用一个DBCTRL控件进行多表查询、显示和修改,需要修改的字段是qzcj和qmcj。
我并没有直接在这个控件中对数据进行修改,而是在窗口中用两个DBEdit与qzcj和qmcj相对应,用DBEdit来间接修改它们。我试了很多方法,但都没有成功,请各位高手帮帮我,小生在此有礼了!谢谢!
kcb---字段有两个,分别是kcid(文本型),kcname(文本型)
cjb---字段有4个,分别是kcid(文本型),xhid(文本型),qzcj(数值型),qmcj(数值型)
xsb---字段有两个,分别是xhid(文本型),xsname(文本型)
现在,用一个DBCTRL控件进行多表查询、显示和修改,需要修改的字段是qzcj和qmcj。
我并没有直接在这个控件中对数据进行修改,而是在窗口中用两个DBEdit与qzcj和qmcj相对应,用DBEdit来间接修改它们。我试了很多方法,但都没有成功,请各位高手帮帮我,小生在此有礼了!谢谢!
连接DBEDIT所指的数据源,运行就OK了
1、数据获得
可以用你喜欢的方式从数据库中获得所需的数据
//我一般用一个Sql语句来获得
2、数据处理(前台)
将数据显示到屏幕上
对数据进行加工(增删改)
3、数据的的更新(后台数据库)
将对数据的处理结果反映到数据库上去
//我一般用程序控制的方式去更改
数据源的获得和连接:
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控件中就会相应的变化,可是切换到下一个记录的时候,就会提示出错,出错信息是“缺少刷新或更新的键列信息”。
我做过实验,如果不采用第三个表,只用两个表查询修改数据一切正常,一旦增加第三个表进入查询就会出现上述所说的错误。 这个问题已经困惑我一个星期了,恳请高手们指教。
上面的兄弟不是说了很清楚了吗?
用动态的sql解决
还有尽量不要是有dbcontrol控件
我发现用edit也比用dbedit好,至少速度快
还有可以多学一点东西,包括sql语句
sandzou朋友,如果我不用dbcontrol控件,用edit的话,我怎么样才能够将我在edit里面改动的数据显示在DBGrid1中,并且在我点击保存按钮后,将所有我更改的数据保存到对应的数据表中?
谢谢!
否则很多程序员是不是又该失业了??^_^
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');只是显示多个表
如果你要修改或者删除都有类似的问题,因为表的指针无法定位,当然报错
显示的时候可以考虑用视图或者临时表
修改的时候先定位到改记录,在修改
好像只有这个方法
希望高手们想想有没有更好的方法
小弟在这献丑了
如果字段分在多张表里面,你可以用多条sql语句,总比上面的方法简单:)
good luck
现在我用上述SQL生成一个临时表,显示和修改它没有任何问题,然后在保存的时候,再将数据用循环的方法写回到对应的表中,能够成功.
前面的想法是为了提高编程效率,但经过尝试失败了.
现在的方法实际上就是我原来常用的方法.
看来DEPHI +SQL还不能让我们数据库程序员高效率.等待新的版本为我们解决问题.
再次感谢各位!
改用DBGRID控件吧,那样很方便的