错误3346,尝试将INERT插入两个连续的表

我有那两个表是MS Access:

lkpSchemaPIT:

| UID |    lkpSchemaTitleEng     |  

|-----|--------------------------|

|--1--|---------Title1-----------|

|--2--|---------Title2-----------|

lkpSchemaPITChronology:

| ID | UID | PUID | Sort | Level | DateStart | DateEnd |  

|----|-----|------|------|-------|-----------|---------|

|--0-|--1--|--0---|---5--|--2----|---Now()---|--NULL---|

第一个表仅包含要在访问中放入树视图的节点。我使用第二张表来构造树,但也要跟踪节点多年来可能拥有的所有父节点。您可以看到两个表中的UID是相同的,但是它们之间没有关系,在构建树时,我使用带有联接的查询。

我的问题是:当我想在lkpSchemaPIT表中添加新节点时,我还需要能够添加其“树视图”信息(父项,排序,级别等)。

到目前为止,这是我的代码:

With CurrentDb

.Execute _

"INSERT INTO lkpSchemaPIT " & _

"(lkpSchemaTitleEng) " & _

"VALUES " & _

"('" & Title & "')"

.Execute _

"INSERT INTO lkpSchemaPITChronology VALUES (" & .OpenRecordset("SELECT @@IDENTITY").Fields(0) & ", " & [ParentID] & ", " & [NewSort] & ", " & [Level] & ", " & Date & ", null)"

End With

ParentID,NewSort,Level是在我调用所有这些之前已经确定的3个变量。“日期”参数是返回当前日期的VBA函数。

我知道第一个INSERT INTO正在工作,因为我的表中显示了一个新值。但是第二个INSERT INTO不起作用,我能够得到错误:

错误3346-查询值和目标字段的数量不同。

有人遇到过这种问题吗?

回答:

再次,这是一个示例,其中避免使用引号引起的括弧(包括#日期/时间)和字符串串联(将数据和SQL放在一起),使得呈现难以阅读和维护的代码的情况下,参数化查询将非常宝贵。

MS

Access允许在该PARAMETERS子句中定义参数占位符名称和数据类型,然后在VBA中,可以使用QueryDefs将值绑定到此类参数。无需引号或字符串插值。

(均保存为存储的查询)

PARAMETERS TitleParam Text(255);

INSERT INTO lkpSchemaPIT (lkpSchemaTitleEng)

VALUES (TitleParam);

PARAMETERS UIDParam Long, PUIDParam Long, SortParam Long,

LevelParam Long, DateStart Datetime;

INSERT INTO lkpSchemaPITChronology (UID, PUID, [Sort], [Level], DateStart)

VALUES (UIDParam, PUIDParam, SortParam, LevelParam, DateStartParam);

...

Dim qdef As QueryDef

With CurrentDb

' FIRST QUERY

Set qdef = .QueryDefs("myFirstSavedAppendQuery")

qdef!TitleParam = [Title]

qdef.Execute dbFailOnError

' SECOND QUERY

Set qdef = .QueryDefs("mySecondSavedAppendQuery")

qdef!UIDParam = .OpenRecordset("SELECT @@IDENTITY").Fields(0)

qdef!PUIDParam = [ParentID]

qdef!SortParam = [NewSort]

qdef!LevelParam = [Level]

qdef!DateStart = Date()

qdef.Execute dbFailOnError

End With

Set qdef = Nothing

以上是 错误3346,尝试将INERT插入两个连续的表 的全部内容, 来源链接: utcz.com/qa/415502.html

回到顶部