我有四个表,每个表都有自己的表单,所有这些表共享同一列,这是唯一的id。当我同时在一个表单中添加新行时,如何更新其他表,这是如何在其他表中获取具有唯一ID且其他列为空的行?
有没有办法为唯一ID字段指定多个控件来源?
我尝试使用这种方法在一个表中的唯一ID与其他表唯一ID之间建立一对一的关系但是这不起作用。
答案 0 :(得分:2)
您可以在插入事件之前或之后从表单执行INSERT语句。如果您的表单有一个名为txtID的文本框绑定到表单记录源中的ID字段:
Private Sub Form_AfterInsert()
Dim db As DAO.Database
Set db = CurrentDb
db.Execute "INSERT INTO Table2 (ID) VALUES (" & Me.txtID & ");", dbFailOnError
db.Execute "INSERT INTO Table3 (ID) VALUES (" & Me.txtID & ");", dbFailOnError
db.Execute "INSERT INTO Table4 (ID) VALUES (" & Me.txtID & ");", dbFailOnError
Set db = Nothing
End Sub
该方法假定除了ID字段之外的那些表中的所有字段都将接受Null值(在表设计视图中,Required属性为No)。
但是从before insert事件执行此操作可能更好,如果任何其他插入失败,则取消当前表单的INSERT。在这种情况下,您可能还想回滚任何其他成功的插入 - 这可能会变得更加复杂。
编辑:我给了你一个非常粗略的轮廓。现在您收到的参数消息太少,建议您按照这些行修改它,这样您就可以查看要求数据库引擎执行的确切INSERT语句。
Private Sub Form_AfterInsert()
Dim db As DAO.Database
Dim strSql As String
Set db = CurrentDb
strSql = "INSERT INTO Table2 (ID) VALUES (" & Me.txtID & ");"
Debug.Print strSql
db.Execute strSql, dbFailOnError
strSql = "INSERT INTO Table3 (ID) VALUES (" & Me.txtID & ");"
Debug.Print strSql
db.Execute strSql, dbFailOnError
strSql = "INSERT INTO Table4 (ID) VALUES (" & Me.txtID & ");"
Debug.Print strSql
db.Execute strSql, dbFailOnError
Set db = Nothing
End Sub
您可以在立即窗口中查看那些Debug.Print语句的输出。 (您可以使用Ctrl + g进入立即窗口)您还可以通过从立即窗口复制它们然后将其粘贴到新查询的SQL视图中来测试这些语句中的任何一个。
Edit2 :如果Record_Num是文本(例如R98609)而不是数字数据类型,请在构建INSERT语句时在值周围添加引号。
strSql = "INSERT INTO Table2 (ID) VALUES ('" & Me.txtID & "');"
答案 1 :(得分:2)
也许更好的问题是为什么你有四个具有相同主键的表,你是否考虑将所有数据放在一个表中