新手里面的SQL问题 - MS Access 2003

时间:2009-09-16 22:17:44

标签: sql ms-access vba access-vba

嘿伙计们,任何人都可以帮我解决一个简单的问题。我在下面的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

好的,那么如何填充这个?基本上我只是从这开始,所以我想知道如何使用这个简单的代码,并像查询一样运行它,以便打开结果记录集。

谢谢!

4 个答案:

答案 0 :(得分: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")

答案 1 :(得分:2)

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

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

答案 2 :(得分:2)

其他一些言论和建议:

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行来打印字段名称。我想你会找到这个

答案 3 :(得分:1)

你得到记录集记录的列,如rs(0)或rs(“columnname”)....

如果您的交易表有三个名为a,b,c的列,您可以像:

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

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