【问题标题】:Rookie SQL inside of VB question - MSAccess 2003VB 问题中的菜鸟 SQL - MSAccess 2003
【发布时间】:2009-09-16 22:17:43
【问题描述】:

大家好,谁能帮我解答一个简单的问题。我在 VB 的子程序中通过单击按钮访问下面的 SQL 语句,我对此并不陌生。

这是我输入的内容:

Private Sub Command0_Click()
  Dim rs As Recordset
  Dim sql As String
  Dim db As Database

  Set db = CurrentDb

  sql = "SELECT * FROM Transactions"

  Set rs = db.OpenRecordset(sql)

  Do Until rs.EOF
    rs.MoveNext

  Loop
  If Not rs.EOF Then

    MsgBox "test"
  End If

End Sub

好的,那我该如何填充呢?基本上我刚刚开始使用这个,所以我想知道如何获取这个简单的代码,并像查询一样运行它,以便打开生成的记录集。

谢谢!

【问题讨论】:

  • 打开什么?你有为它构建的表单吗?
  • 更具体地了解“填充此”的含义。
  • 我认为他正在他的 DO...LOOP 中寻找他需要的语句来实际读取记录集中的数据,而他目前没有这样做。
  • 对不起,我对此真的很陌生....我只是想学习如何在 vb 中使用 sql。我想如果我运行这样的查询,一定有某种方式可以“填充”一个记录集......这意味着如果你打开查询生成器并创建一个查询并单击运行,你会得到一个结果记录集.在vb中是一样的吗?谢谢你们的帮助!
  • 如果“记录集”是指类似视图的电子表格,您可以使用 docmd.openquery "queryname" 在代码中为保存的查询执行相同的操作,否则请参阅下面的答案。

标签: sql ms-access vba


【解决方案1】:

其他一些意见和建议:

1) 始终指明您使用的记录集类型。这里似乎是一个 DAO 记录集,因此请进行完整的声明,例如:

Dim rs as DAO.recordset

在另一台计算机上运行,​​根据 ADODB 和 DAO 库的声明顺序,相同的代码可能会产生错误。

2) 为避免在没有可用记录时出现任何令人不安的错误消息,您可以添加额外的测试,例如

if rs.recordcount = 0 then
Else
    rs.moveFirst
    ....

3) 要使用 debug.print 浏览完整的记录集,您可以这样做。只需在您的声明中添加一个“m_debugLine”作为字符串,一个“fld”作为 DAO.Field。

rs.MoveFirst
do while not rs.eof
    m_debugLine = ""
    for each fld in rs.fields
        m_debugLine = m_debugLine + vbTab + fld.value
    next fld
    debug.print m_debugLine
    rs.movenext
loop

4) 您甚至可以在打印数据之前添加一个 debug.print 行来打印出字段名称。我想你会找到这个的

【讨论】:

    【解决方案2】:

    根据您要执行的操作,您可能过于复杂了。更好的方法是将表单的记录源(在属性表中)设置为事务表,然后使用可视化设计器将所需的字段拖放到表单上。

    但是,如果您真的必须这样做,这里的代码将替换您所拥有的并打开一个电子表格,就像事务表中的数据视图一样。

    Private Sub Command0_Click()
       docmd.Opentable "transactions"
    End Sub
    

    如果要将结果限制为查询,请先构建查询并保存,然后使用以下代码。

    Private Sub Command0_Click()
       docmd.OpenQuery "MyQueryName"
    End Sub
    

    从字面上看,您的原始代码 DID 填充了一个记录集(在 rs 对象中)。您可以使用 while 循环中的代码按名称访问字段,例如

    debug.print rs("Field1")
    

    【讨论】:

    • 这更适用于我需要完成的一些自动化过程。我在 access 数据库中有数百个查询对象,这些查询对象定期运行,然后生成的数据集用于不同的 xls 报告,以及 power point 中的图表自动化。我可以用 vb 做,只是总是使用查询生成器,从不费心在 vb 中学习 sql。所以我尝试做的第一件事就是运行一个查询并获得与在查询构建器中构建它完全相同的简单结果。谢谢
    【解决方案3】:

    您将代码放在 Do..Loop 中。将为遇到的每条记录评估此代码。

    Do Until rs.EOF
       Msgbox "The value for MyField is " & rst!MyField
       rs.MoveNext
    Loop
    

    【讨论】:

    • 啊,是的...忘记了 Access 中的 rs!fieldname 语法。 :)
    • 我养成了使用 rst!MyField 或 rst![MyField With Spaces] 而不是 rst("MyField") 的习惯,这样我就可以将字段名称与函数调用区分开来。
    【解决方案4】:

    您会看到记录集的记录列,例如 rs(0) 或 rs("columnname")....

    如果您的事务表包含名为 a、b、c 的三列,您可以像这样访问它:

    rs(0)
    rs(1)
    rs(2)
    

    rs("a")
    rs("b")
    rs("c")
    

    【讨论】:

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