刚开始使用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
答案 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
亲切的问候, 保罗。