【问题标题】:dbOpenDynaset - 'Object variable or With block variable not set'dbOpenDynaset - '对象变量或未设置块变量'
【发布时间】:2020-07-08 19:23:06
【问题描述】:

我有一个名为“qryAddressBook”的查询。我希望能够垂直循环遍历名为“Client_Address”的特定字段中的记录,并将这些记录显示在表“tblClient”的单行中。

我过去曾使用“Set rs = dbs.OpenRecordset("tblAddressBook", dbOpenTable)" 对表格进行此操作,没有任何问题....

...我遵循 Access Database.OpenRecordset 方法 (DAO) 中显示的语法:https://docs.microsoft.com/en-us/office/client-developer/access/desktop-database-reference/database-openrecordset-method-dao

我继续收到一条错误消息,提示“对象变量或未设置块变量”,它突出显示了我的代码中的以下文本:

Set rs = dbs.OpenRecordset("qrySpecificNCR", dbOpenDynaset)

这是我的总代码:

DoCmd.OpenQuery "qryAddressBook"

Dim dbs As DAO.Database
Dim rs As Recordset
Dim SeqNum As Integer

Set dbs = CurrentDb

SeqNum = 1

Set rs = dbs.OpenRecordset("qryAddressBook", dbOpenDynaset)

Do Until rs.EOF

    Dim srtAddress As String
    srtAddress = rs.Fields("Client_Address").Value

    Dim strSQLAddress As String
    strSQLAddress = "UPDATE tblClient SET " & SeqNum & " = '" & srtAddress & "' WHERE Record = 1;"

        DoCmd.RunSQL strSQLAddress 

        SeqNum = SeqNum + 1

rs.MoveNext

Loop

【问题讨论】:

  • 如果这段代码被复制,而不是输入,那么有一个错字——你声明dbs,但是在使用dbs之前使用dsb将它设置为等于数据库对象打开记录集。
  • 最好包含一个“选项显式”,然后编译您的代码。这将防止一些可能难以发现的错误。
  • 我是否正确使用了“Set rs = dbs.OpenRecordset("qryAddressBook", dbOpenDynaset)"?
  • Wayne,你能解释一下我是如何打开“选项显式”的吗?
  • 将选项显式设置为包含在 VBE 中的新模块的标题中 > 工具 > 选项 > 选中需要变量声明。必须手动添加到现有模块。

标签: vba ms-access dao


【解决方案1】:

我仍然不明白明确的部分......但我发现了错误。

我的 qryAddressBook 有以下代码行:

FROM qryGlobalAddress
WHERE (((qryAddress.Client) = [FORMS]![frmClientAddress]![CmbClientName]));

我正在从组合框中推送表单参数。当我将其更改为特定的客户名称时,例如:

FROM qryGlobalAddress
WHERE (qryAddress.Client) = 'Smith, John';

然后 Set rs = dbs.OpenRecordset("qryAddressBook", dbOpenDynaset) 完美运行。

现在的问题是我需要想办法将表单参数推送到查询中。 :(

【讨论】:

  • 您的更新查询不清楚。更新了哪一栏?您是否有名为 [1], [2], ... 的列并希望将此 SeqNum 设置为客户地址?此外,更新将更改条件为Record = 1 的所有循环迭代的相同记录。查询中是否没有ClientID?请在上面的问题帖子中显示完整的 SQL。
  • 查看这里的方法:stackoverflow.com/a/32118340/3820271
【解决方案2】:

连接表单组合值

"FROM qryGlobalAddress WHERE (((qryAddress.Client) = '" & [FORMS]![frmClientAddress]![CmbClientName] & "'));"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-11
    • 2013-07-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多