在 VBA 中,在 Access 2003 中,我需要
TableA
使用新的自动编号作为主键 (AID
) 和当前日期创建记录- 创建多个记录,
TableC
其中AID
从新记录TableA
与多个外键 (BID
)关联,TableB
由 选择QueryB
。
因此,如果从with s 2、5、7、8QueryB
返回记录,那么我想在with和TableB
BID
TableA
AID = 1
Date = 8/23/13
然后TableC
这样出现:
AID BID
---------
1 2
1 5
1 7
1 8
我该怎么做呢?完成第一件事很顺利,直到我想起我需要第二个领域。现在我的代码如下:
Dim SQLstr As String
Dim db As DAO.Database
Set db = CurrentDb
SQLstr = "INSERT INTO TableA (FieldA, Date) "_
& "VALUES (list13.value, Date());"
db.Execute SQLstr
List13
打开表单中的控件在哪里(我无法将名称更改为有用的名称,否则它将不再控制显示在表单其余部分上的记录)。但是一旦我添加了FieldA
and list13.value
,我会收到一条错误消息说
参数太少。预期:1
我也不确定如何描述我想使用新记录(在这种情况下,AID = 1
)作为所有QueryB
记录关联的常量。经过大量搜索,我想我想使用@@IDENTITY
,但我不确定如何使用。
编辑: 我终于得到了以下代码来正确返回 AID:
Dim rs As DAO.Recordset
Dim AIDvar As Integer
Set rs = db.OpenRecordset("select @@identity")
AIDvar = rs(0)
我正在浏览here,建议使用以下代码将INSERT INTO与字段数据和常量混合使用:
strText = "foo"
strInsertSQL = _
"INSERT INTO tblA(fld1, fld2, fld3) " _
& "Select fldA, fldB, '" & strText & "' AS Expr1 " _
& "From tblB ;"
所以我剩下的是以下问题:
在我的第一个代码中使用“list13.value”有什么问题?编辑:所以,我用以下方法解决了这个问题:strText = CStr(List13.Value) SQLstr = "INSERT INTO InvoiceT (AcctID, InvDate) "_ & "VALUES (" & strText & ", Date());"
但是当我将它们与@@IDENTITY 代码放在一起时,我得到了一个溢出错误。我该如何解决?
- 我最后复制的那个代码块中的“foo”有什么意义?
- 同一代码块中的“AS Expr1”有什么意义?
- 如果我在 @@IDENTITY 代码块中用 AIDvar 替换 strText 会起作用吗?
- 如果 TableA 实际上没有打开,为什么“OpenRecordset”会起作用?我的想法哪里出错了,这让我感到困惑?