1

刚开始使用 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
4

2 回答 2

4

您可以遍历字段:

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。

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

 db.Execute "UPDATE aTable SET aField = 'Some text'", dbFailOnError
于 2013-01-11T11:44:06.203 回答
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() Set rst = Nothing

亲切的问候,保罗。

于 2013-01-11T11:45:53.907 回答