有关数据库 两个数据库表中有相同的字段,如何关联?即一个数据库表移动时,另一个怎么移动?如两个库表中都有"学号"这样一个字段,如何来完成?请高手指点迷津.谢谢. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 在table1表的移动事件里面写table2的记录集select * from table2 where table2.学号=table2.学号 select * from tb1,tb2 where tb1.id=tb2.id 修改一下:在table1表的移动事件里面写table2的记录集select * from tabled1,table2 where table2.学号=table2.学号 盗用 rainstormmaster的发言,这个问题已经好多人问了,你因该搜索一下!利用VB动态设计多“主细表”应用 ---- 在开发人事管理软件的工程中,当我们建立一个职工档案记录时,通常都会遇到设计职工履历表、职工家属情况的问题,我这里介绍一种用“主细表”方法的开发思路。 ---- 一. 数据库的建立 ---- 一个设计合理的数据库就是管理软件成功的一半。因此我们在开发之初就应该先慎重设计好数据库的结构。笔者在开发人事管理软件时建立一个名为:HR.mdb的数据库,该库包括下面三个表: 职工的自然情况一般是下面这些内容的:(Employee)职工姓名 性别 出生日期 民族 政治面貌 婚否……职工履历表的内容一般是下面这些内容的:(Vita)起始时间 终止时间 所在单位及部门 任职情况……职工家属情况一般是下面这些内容的:(Relative)亲人姓名 与本人关系 所在单位及部门 任职情况……---- 很显然,Employee 与Vita和Relative表之间是“一对多”的关系。即一条Employee记录对应多条Vita和Relative记录,亦即Employee为主表,Vita和Relative为细表。由于在设计ACCESS数据库时每个表必须要有一个主关键字(Primary Key),因此笔者设计了一个“职工ID”字段作为三个表相互连接的字段,同时也作为Employee表的主关键字。而另外两个表的主关键字就采用自动编号(AutoNum)字段了。 ---- 二. 建立表之间的连接 ---- 数据库设计好之后就可以着手设计各种应用,但程序设计中关键的问题是如何建立“主细表”之间的连接。 ---- 建立“主细表”之间的连接有两种方法: ---- 1、 利用VB的数据窗体向导生成“主细表”的连接。 ---- 根据向导,可以生成一个主表和一个细表的连接。但是这种方法生成的连接有它的缺陷。首先是它只能生成两个表的连接,对我们上面所说的情况就无能为力了;其次是开发者在为向导提供数据库时,系统把数据库的绝对路径加入了DATA控件,非常不利于程序的分发。下面介绍笔者使用的一种方法。 ---- 2、 动态创建“主细表”的连接 ---- 新建一个Form,然后添加三个DATA控件和三个DBGRID控件。三个DATA控件的名称分别为:datPrimaryRS,datSecondaryRS,DatThirdRS;三个DBGRID控件的名称分别为:grdPrimaryRS,grdSecondaryRS,grdDatThirdRS。三个DATA控件Form上既没有指定DatabaseName,也没有指定RecordSource,只是在Form调用时才动态赋值。三个DBGRID控件倒是指定了所对应的DATA控件。下面是Form_Load()函数: Private Sub Form_Load() datPrimaryRS.DatabaseName = App.path & “\HR.mdb”datPrimaryRS.RecordSource = "select * from [Employee] Order by [职工 ID]" datSecondaryRS.DatabaseName = App.path & “\HR.mdb datThirdRS.DatabaseName = App.path & “\HR.mdb '创建主表网格记录集 datPrimaryRS.RefreshEnd Sub---- 这里只是创建和显示了主表的数据,那么两个细表的数据如何创建和显示呢?从主细表的概念我们知道,我们查看主表的任何一条记录,细表必须同时显示出对应的多条记录。因此我们必须对主表的任何一条记录成为当前记录时触发的事件编码。而该事件就是Reposition。 Private Sub datPrimaryRS_Reposition() Screen.MousePointer = vbDefault On Error Resume Next datSecondaryRS.Refresh DatThirdRS.Refresh '使网格与主表记录集同步 datSecondaryRS.RecordSource = "select [职工ID],[起始日期],[终止日期],[所在单位及部门],[任职情况] from [Vita] where [职工ID]=" & datPrimaryRS.Recordset![职工ID] & " Order by [起始日期]" DatThirdRS.RecordSource = "select [职工ID],[亲人姓名],[关系],[所在单位及部门],[任职情况] from [Relative] where [职工ID]=" & datPrimaryRS.Recordset![职工ID] & "" datSecondaryRS.Refresh DatThirdRS.Refresh '为 dynasets 和快照显示当前记录位置 datPrimaryRS.Caption = "当前记录: " & (datPrimaryRS.Recordset.AbsolutePosition + 1)End Sub---- 很显然,如果有三个、四个…等多个细表也可以如法炮制。 ---- 至此,一个灵活的,表数不限的主细表连接就建立起来了。只要将三个DBGRID的AllowAddNew、AllowDelete和AllowUpdate三个属性设置为TRUE,那么就可以对这些主细表进行各种数据库表作了。 ADODC+DATAGRID 奇怪的问题 见过的朋友帮忙解决一下! 请教连接问题? 用ADO调用access文件时的问题,请解答 如何用sendkeys、sendmessage或keybd_event给dos窗口发送指定的数字!急急急! 各位,想请教一个关于判断文件是否打开的问题 关于datareprot的简单问题,来者有分. 高分相送,征求几个圆满的答案? VB有没集合,比如哈希函数啥的,就是能存储键值对的集合等? 做外挂程序 多日不来了,我失业了 在VB里面调用回调函数,回调函数有一个返回值,怎么表示返回值? 二个问题...
在table1表的移动事件里面写table2的记录集select * from tabled1,table2 where table2.学号=table2.学号
利用VB动态设计多“主细表”应用 ---- 在开发人事管理软件的工程中,当我们建立一个职工档案记录时,通常都会遇到设计职工履历表、职工家属情况的问题,我这里介绍一种用“主细表”方法的开发思路。 ---- 一. 数据库的建立 ---- 一个设计合理的数据库就是管理软件成功的一半。因此我们在开发之初就应该先慎重设计好数据库的结构。笔者在开发人事管理软件时建立一个名为:HR.mdb的数据库,该库包括下面三个表: 职工的自然情况一般是下面这些内容的:(Employee)
职工姓名 性别 出生日期 民族 政治面貌 婚否……职工履历表的内容一般是下面这些内容的:(Vita)
起始时间 终止时间 所在单位及部门 任职情况……职工家属情况一般是下面这些内容的:(Relative)
亲人姓名 与本人关系 所在单位及部门 任职情况……---- 很显然,Employee 与Vita和Relative表之间是“一对多”的关系。即一条Employee记录对应多条Vita和Relative记录,亦即Employee为主表,Vita和Relative为细表。由于在设计ACCESS数据库时每个表必须要有一个主关键字(Primary Key),因此笔者设计了一个“职工ID”字段作为三个表相互连接的字段,同时也作为Employee表的主关键字。而另外两个表的主关键字就采用自动编号(AutoNum)字段了。 ---- 二. 建立表之间的连接 ---- 数据库设计好之后就可以着手设计各种应用,但程序设计中关键的问题是如何建立“主细表”之间的连接。 ---- 建立“主细表”之间的连接有两种方法: ---- 1、 利用VB的数据窗体向导生成“主细表”的连接。 ---- 根据向导,可以生成一个主表和一个细表的连接。但是这种方法生成的连接有它的缺陷。首先是它只能生成两个表的连接,对我们上面所说的情况就无能为力了;其次是开发者在为向导提供数据库时,系统把数据库的绝对路径加入了DATA控件,非常不利于程序的分发。下面介绍笔者使用的一种方法。 ---- 2、 动态创建“主细表”的连接 ---- 新建一个Form,然后添加三个DATA控件和三个DBGRID控件。三个DATA控件的名称分别为:datPrimaryRS,datSecondaryRS,DatThirdRS;三个DBGRID控件的名称分别为:grdPrimaryRS,grdSecondaryRS,grdDatThirdRS。三个DATA控件Form上既没有指定DatabaseName,也没有指定RecordSource,只是在Form调用时才动态赋值。三个DBGRID控件倒是指定了所对应的DATA控件。下面是Form_Load()函数: Private Sub Form_Load()
datPrimaryRS.DatabaseName = App.path & “\HR.mdb”
datPrimaryRS.RecordSource =
"select * from [Employee] Order by [职工 ID]"
datSecondaryRS.DatabaseName = App.path & “\HR.mdb
datThirdRS.DatabaseName = App.path & “\HR.mdb
'创建主表网格记录集
datPrimaryRS.Refresh
End Sub---- 这里只是创建和显示了主表的数据,那么两个细表的数据如何创建和显示呢?从主细表的概念我们知道,我们查看主表的任何一条记录,细表必须同时显示出对应的多条记录。因此我们必须对主表的任何一条记录成为当前记录时触发的事件编码。而该事件就是Reposition。 Private Sub datPrimaryRS_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
datSecondaryRS.Refresh
DatThirdRS.Refresh
'使网格与主表记录集同步
datSecondaryRS.RecordSource = "select [职工ID],
[起始日期],[终止日期],[所在单位及部门],[任职情况]
from [Vita] where [职工ID]=" & datPrimaryRS.Recordset!
[职工ID] & " Order by [起始日期]"
DatThirdRS.RecordSource = "select [职工ID],[亲人姓名],
[关系],[所在单位及部门],[任职情况]
from [Relative] where [职工ID]=" &
datPrimaryRS.Recordset![职工ID] & ""
datSecondaryRS.Refresh
DatThirdRS.Refresh
'为 dynasets 和快照显示当前记录位置
datPrimaryRS.Caption = "当前记录: " &
(datPrimaryRS.Recordset.AbsolutePosition + 1)
End Sub---- 很显然,如果有三个、四个…等多个细表也可以如法炮制。 ---- 至此,一个灵活的,表数不限的主细表连接就建立起来了。只要将三个DBGRID的AllowAddNew、AllowDelete和AllowUpdate三个属性设置为TRUE,那么就可以对这些主细表进行各种数据库表作了。