如何利用DBGrid显示一对多的关联字段
编号:QA001831
建立日期: 1999年10月7日 最后修改日期:1999年11月2日
所属类别:
xuyc:
vb5.0
win97
如何处理一对多的关联字段,如主表记录为A病,而子表记录为时间和其相关的发病率,在窗体中,子表记录采用DBGRID,请问如何处理?
回答:
主表记录可以显示在标准的列表框或DBList中,估计你已经会了。假定主表选择的病名保存在变量sDisease中。
你可以添加一个Data控件,并设置好DatabaseName属性。如果你不想显示Data控件,可以将Data控件的Visible属性设置为False。将DBGrid控件与Data控件关联。DBGrid控件最好是和Data控件捆绑使用,而不是工作在非捆绑模式。
你可以在用户选择主表记录后使用下面的代码:
Data1.RecordSource = "SELECT * FROM SubTable WHERE Disease = '" +sDisease + "'"
Data1.Refresh
这样你子表就会显示相应记录。
Seven来信说:
我参考了您关于“如何利用DBGrid显示一对多的关联字段”这一问题的解答,但是我希望作到,在一个主页面中,相对于每一条记录,ATTACH一个一对多的DBGRID,显示对应于这条记录唯一编号的其他相关的一对多的记录数据,为了方便输入,我想实现此DBGRID 不显示与主表相联系的唯一记录号,并且在每次对子表添加新记录时,自动对每条新记录输入与主表中相同的记录号作为此子表中每条记录的主键。
回答:
要不显示编号,有两个办法:
一是修改Data控件的条件就可以。如:
Data1.RecordSource = "SELECT Name, Year FROM SubTable WHERE ID = '" +sID + "'"
Data1.Refresh
另一种在设计时先按上面的方法设置Data1.RecordSource,然后在DBGrid的右键菜单上选择Retrieve Fields。然后可以再修改Data1.RecordSource为“SELECT * FROM ...”。这样DBGrid中显示的字段比Data1.RecordSource中的字段少。这种方法比较适合解决你的“每次对子表添加新记录时,自动对每条新记录输入与主表中相同的记录号作为此子表中每条记录的主键”的问题。你可以在DBGrid1_AfterInsert事件中修改Data1.Recordset设置ID字段。
此问题由李海回答。
| |
|
|
| |
|
|