【问题标题】:type mismatch in recordset definition in ms accessms 访问中记录集定义中的类型不匹配
【发布时间】:2018-02-28 08:15:27
【问题描述】:

这是我的代码:

Dim thisCase As Integer
Dim thisIssueID As Integer
Dim provCase As Integer
Dim rst As Recordset

thisCase = Forms!frmCases.CaseID
thisIssueID = Forms!frmCases![frmissues subform].Form!IssueID

Set rst = CurrentDb.OpenRecordset("select tblissues.caseid from tblcases inner join tblissues on tblcases.caseid = tblIssues.caseid where tblIssues.IssueID = " & thisIssueID) 'CStr(Forms!frmCases![frmissues subform].Form!IssueID))
rst.MoveLast
rst.MoveFirst

不断为“Set rst =”行返回“类型不匹配”。我已经将记录集定义作为查询运行(在删除双引号和 & 之后)并且它运行了。

相等的两个字段是相同的数据类型(ok autonumber 和 number)。但查询有效。我尝试使用 + 而不是 & 并没有帮助。

有什么想法吗?

另外,在代码中,我生成了以下字符串来代替:

select tblissues.caseid from tblcases inner join tblissues on tblcases.caseid = tblIssues.caseid where tblIssues.IssueID = 24255

在查询中有效,但是当我将包含字符串的变量放入记录集定义时,我仍然得到“类型不匹配”。如果我尝试在最后的值周围加上单引号,我会得到“数据类型不匹配”,所以显然它不是数据类型不匹配。

【问题讨论】:

  • 尝试将变量声明为 Long 而不是 Integer。
  • 几个建议。如果你期待一个 DAO.Recordset,你应该这样声明它。否则,如果 ADO 是默认设置,则需要在 ADO Recordset 声明中添加“NEW”。您还可以在运行 set recordset 命令之前添加一个“Debug.Print thisIssueID”,以确保您得到您期望的结果,
  • 我比较懒惰,我对 DAO 记录集有更多经验,我忘记了差异。

标签: ms-access vba recordset


【解决方案1】:

正如dbmitch 所建议的那样 应该有明确的声明:

Dim rst as DAO.Recordset

代替:

Dim rst as Recordset

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多