访问字段中的所有记录

时间:2013-01-11 11:37:36

标签: vba ms-access access-vba

刚开始使用VBA,我正在尝试访问我设置的名为Employees的虚拟表中的所有数据。

这是我尝试的代码:

Sub getRecords()

Dim dbs As Database
Dim rst As Recordset
Dim sql As String

Set dbs = CurrentDb
sql = "SELECT * FROM Employees"
Set rst = dbs.OpenRecordset(sql)

End Sub

这里的最终目标是将内容打印到屏幕上 - 这是否会将记录集分解为不同的组件?如果是这样,哪些组件可以组成一个典型的记录集?

表格格式如下:

Emp_Id    - Number
Emp_Name  - Text
Emp_Email - Text

2 个答案:

答案 0 :(得分:3)

您可以遍历字段:

Sub getRecords()

Dim dbs As Database
Dim rst As Recordset
Dim sql As String

Set dbs = CurrentDb
sql = "SELECT * FROM Employees"
Set rst = dbs.OpenRecordset(sql)

Do while not rst.eof
   For each fld in rst.Fields
      Debug.Print fld, fld.name
   Next
   rst.MoveNext

   ''You can also edit or add
   rst.Edit
   rst!Emp_Name = "Something"
   rst.UpDate
Loop

End Sub

我会避免调用也是属性的变量名,例如SQL。

对于更新,通常最好使用Action查询并再次执行数据库对象:

 db.Execute "UPDATE aTable SET aField = 'Some text'", dbFailOnError

答案 1 :(得分:0)

您需要首先循环记录。尝试:

Do While Not rst.EOF And Not rst.BOF
...
Loop

要做到这一点。 BOF和EOF分别与记录集的开头和结尾相关。如果表中没有数据,那么将跳过整个循环。

从那里你可以通过使用索引来关联选择列表中字段的位置,或者通过引用字段名称来单独查看字段,如下所示:

Do While Not rst.EOF And Not rst.BOF
    Debug.Print rst.Fields("myfield")
    Debug.Print rst.Fields(0)
Loop

这是一个起点。 Intelisense应该真的帮助你。

PS:永远记得以后关闭你的recordset个对象来回收内存:     rst.Close()     设置rst = Nothing

亲切的问候, 保罗。