2009-09-16 46 views
1

嘿家伙,任何人都可以帮助我一个简单的问题。我在下面的VB语句的下面的SQL语句中通过点击按钮访问,我对此很陌生。VB问题里面的菜鸟SQL - MSAccess 2003

这里是我输入:

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 

好了,我怎么填充这个?基本上,我刚刚开始与此,所以我想知道如何采取这个简单的代码,并像查询运行它,以便产生的记录集打开。

谢谢!

+0

公开赛变成了什么?你有为它建立的表单吗? – 2009-09-16 22:26:04

+0

更具体地说明“填充此”的含义。 – JohnFx 2009-09-16 22:27:04

+0

我想他正在寻找他需要他的DO内的语句... LOOP以actualy读取记录,这是他目前不能做的数据。 – SqlRyan 2009-09-16 22:31:20

回答

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

2

根据你想要做的,你可能会过度复杂化。更好的方法是将表单的记录源(在属性表中)设置为交易表,然后使用可视化设计器删除表单中的字段。然而,如果你真的必须这样做,这里的代码将取代你拥有的,并打开一个电子表格,比如交易表中的数据视图。

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

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

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

要非常字面,你原来的代码没有填充一个记录(在对象rs)。您可以在while循环使用的代码按名称访问的领域,如

debug.print rs("Field1") 
+0

这对于我需要完成的一些自动化流程来说更是如此。我有查询对象的hundereds在获得常规运行Access数据库,然后将得到的数据集用于不同的XLS报告,并在排行榜中功率点的自动化。我可以用VB来做什么,只是总是使用查询生成器,并从来没有打扰学习SQL在VB中。所以我试图做的第一件事就是运行一个查询并获得与在查询生成器中构建它完全相同的简单结果。感谢 – Justin 2009-09-16 22:45:04

+0

感谢您的帮助! – Justin 2009-09-17 19:28:28

1

你在记录的列如RS(0)或RS记录(“列名”)......

如果您的交易表中有三列命名为A,b,C,你可以得到它喜欢:

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

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

你把你的代码放在Do..Loop里面。该代码将针对每个遇到的记录进行评估。

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

啊,是的......忘记了Access中的rs!fieldname语法。 :) – klabranche 2009-09-16 22:44:43

+0

我习惯于使用rst!MyField或rst![MyField With Spaces]而不是rst(“MyField”),这样我就可以区分字段名称和函数调用。 – 2009-09-16 23:20:26

+0

非常感谢! – Justin 2009-09-17 19:29:48