【问题标题】:vba store recordset as integer variablevba 将记录集存储为整数变量
【发布时间】:2016-06-22 18:28:15
【问题描述】:

第一次发帖,终于有个问题在这里找不到答案。

我有一个 MS Access 查询,它返回 1 个结果(这是一个数字),我想将其存储为一个整数变量 (x),以便以后可以将其用于循环。问题是因为我将它用作记录集并且变量是整数,所以我收到“类型不匹配”错误。

现在我只是将结果存储到一个单元格并将变量设置为等于该单元格:

Ws.Range("A1") = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1)

x = Ws.Range("A1")

Ws.Range("A1").Delete

然后我只有一个运行 x 次的循环:

For i = 0 To x

基本上,我只是想要一些看起来像这样的代码:

x = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1)

这里的任何帮助都会很大。谢谢!

【问题讨论】:

  • 我没有任何东西可以测试这个,但是.GetRows 方法有一个.Value 属性吗?或者x = CInt(LBound(Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1)))
  • 当我将.value 添加到语句的末尾以使其:x = Db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").GetRows(1).Value 我收到“需要对象”错误。
  • 等等,误读了你的陈述。您的代码不会出错,但它会将 x 返回为零。但这仍然是一个进步。
  • .GetRows(0, 0) 这是一个二维数组。还需要查看您对x的声明
  • @Tim-Williams .GetRows(0, 0) 返回“参数数量错误”错误。 .GetRows(1) 在我只是要求将其存储在电子表格中时没有任何问题,所以我 假设 这很好。我确实将 x 声明为一个整数,只是没有在我的问题中显示它。

标签: vba excel dao


【解决方案1】:

以下应该会给你正确的结果:

Dim x As Integer
Dim db As DAO.Recordset

db.MoveFirst
If IsNumeric(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value) Then
    x = CInt(db.OpenRecordset("SELECT COUNT(Asset_Name) FROM Assets WHERE Active = True").Fields(0).Value)
Else
    MsgBox "The query did not return a number." & Chr(10) & "Aborting..."
End If

请注意,您使用DAO 而不是ADO 作为帖子中指示的原始标签。尽管如此,它们的行为都非常相似,并且光标通常位于第一行(返回数据时)。因此,MoveFirst 应该是不必要的。尽管如此,微软自己一直在自己的示例代码中使用它。如果DAOADO.Fields(0) 相同,则第一列。

【讨论】:

  • 完美!像魅力一样奔跑。谢谢,非常感谢,包括标签更改
猜你喜欢
  • 1970-01-01
  • 2020-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-17
相关资源
最近更新 更多