2013-01-11 36 views
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 

回答

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。

更新時,您通常是最好的動作上查詢和執行againt數據庫對象:

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

不錯的答案 - 雖然有些事情:來自java背景,您可以使用\ n分隔文本行\ n在VBA中是否有類似的選項? – Katana24

+1

您可以單獨或一起使用vbCrLf,vbCr和vbLf,也可以使用chr(13)和chr(10)以及vbNewLine。 Debug.Print將單行打印到即時窗口(窗口的Ctrl + G)。總是記得MS Access比你想象的要容易得多:) – Fionnuala

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 =無

親切的問候, 保羅。

+0

+1關閉記錄集 – Katana24

+0

忘記添加MoveNext!哎呀! – Paul

+0

會說,但該行不起作用 - 我得到運行時錯誤91. MoveNext對象在哪裏? – Katana24

相關問題