2011-07-19 74 views
0

我是MS Access 2007編程中的新成員。 我想從數據庫中逐一獲取信息。但是我正在使用的代碼未執行該操作。如果我在第一張唱片上,那麼它會直接進入最後一張我不想要的唱片。我希望把它帶到一個新的紀錄.. 這裏是我的代碼:如何在MS Access中訪問下一條記錄

Private Sub MoveNextBttn_Click() 
    Dim db As Database 
    Set db = CurrentDb 
    Dim str As String 
    str = "SELECT * FROM Table_Emp_Info" 
    Dim rst As Recordset 
    Set rst = db.OpenRecordset(str) 
    Dim xxx As Integer 
    xxx = 1 

    'If the recordset is empty, exit. 
    If rst.EOF Then 
     Exit Sub 
    End If 

    Do Until rst.EOF 
     Emp_ID_Text.Value = rst.Fields("EmpID") 
     Rowsource_Designation.Value = rst.Fields("Designation") 
     RowSource_Dept.Value = rst.Fields("Dept") 
     DOJ_Text.Value = rst.Fields("Date_Of_Joining") 
     rst.MoveNext 
     'xxx = xxx + 1 
    Loop 

    rst.Close 

End Sub 

回答

0
Do while not rst.EOF 
     Emp_ID_Text.Value = rst.Fields("EmpID") 
     Rowsource_Designation.Value = rst.Fields("Designation") 
     RowSource_Dept.Value = rst.Fields("Dept") 
     DOJ_Text.Value = rst.Fields("Date_Of_Joining") 
     rst.MoveNext 
     'xxx = xxx + 1 
    Loop 
1

你的代碼看起來不錯,但你是從Table_Emp_Info到相同的位置在每次迭代的值寫:

Emp_ID_Text.Value = rst.Fields("EmpID") 
    Rowsource_Designation.Value = rst.Fields("Designation") 
    RowSource_Dept.Value = rst.Fields("Dept") 
    DOJ_Text.Value = rst.Fields("Date_Of_Joining") 
    rst.MoveNext 

這使位置保持最後一行的值在循環的結尾。這是你的意圖,還是你想要不同的東西?

編輯

通過您的評論來看,要逐步完成的Table_Emp_Info元組。在這種情況下,您不需要循環 - 點擊應執行rst.MoveNext並更新顯示數據的字段。

像這樣的東西可以工作,但是有一個免責聲明:我幾乎不知道Access模型如何工作。

private rst As Recordset 

Private Sub Form_Open(Cancel As Integer) 
    set rst = CurrentDb.OpenRecordset("SELECT * FROM Table_Emp_Info") 
    call UpdateForm() 
End Sub 

private sub UpdateForm() 
    if not rst.EOF 
     Emp_ID_Text.Value = rst.Fields("EmpID") 
     Rowsource_Designation.Value = rst.Fields("Designation") 
     RowSource_Dept.Value = rst.Fields("Dept") 
     DOJ_Text.Value = rst.Fields("Date_Of_Joining") 
    end if 
end sub 

private sub MoveNextBttn_Click() 
    if not rst.EOF then 
     rst.MoveNext 
     call UpdateForm() 
    end if 
end sub 
+0

感謝顯示關注..我想點擊按鈕,每個time..Data是在形式顯示包含文本框和COMBOX每個字段後,通過每個記錄導航 – vinay

3

您需要使用勢必形式代替綁定形式。

聽起來好像您正在嘗試重新構建Access中內置的功能。要將表單從未綁定表單更改爲綁定表單,請執行以下操作:

  1. 在設計視圖中打開表單。
  2. 按F4調出表單屬性頁。
  3. 點擊數據標籤。
  4. 在RecordSource屬性中輸入SELECT * FROM Table_Emp_Info(您也可以簡單地輸入Table_Emp_Info將表單直接綁定到查詢的基礎表)。
  5. 單擊格式選項卡並確保導航按鈕設置爲是(默認)。
  6. 擺脫你寫的所有不必要的代碼。

現在,您只需使用表單左下方的5個按鈕來導航記錄。從左到右,這些按鈕將帶您到第一個,上一個,下一個,最後一個或新的記錄。

欲瞭解更多信息搜索「ms訪問限制的形式」。

+0

**需要**才能使用綁定表單?不,不是。在大多數情況下,在Access中更好*這樣做,但Anders Lindahl的答案也可以。 – RolandTumble

0

它看起來像我應該使用單個SQL UPDATE語句來執行更新,而不是遍歷表單和記錄集並逐個複製數據記錄。

但是,您不能提供足夠的信息來提供示例SQL,因爲我無法知道目標表單與源數據的關係。

它可能是您正在創建新記錄並從記錄集中複製數據,在這種情況下,您將使用SQL INSERT語句而不是UPDATE,但是沒有足夠的信息可以繼續這裏。

旁白:

順便說一句,作爲保護條款,禁止在執行時記錄沒有返回循環,在DAO通常的方法是檢查記錄的.Recordcount PROPERT是0:

'If the recordset is empty, skip the loop. 
    If rst.RecordCount <> 0 Then 
    Do Until rst.EOF 
     Emp_ID_Text.Value = rst.Fields("EmpID") 
     Rowsource_Designation.Value = rst.Fields("Designation") 
     RowSource_Dept.Value = rst.Fields("Dept") 
     DOJ_Text.Value = rst.Fields("Date_Of_Joining") 
     rst.MoveNext 
     'xxx = xxx + 1 
    Loop 
    End If 
    rst.Close 
    Set rst = Nothing ' you omitted this step 

你實際上不想退出,因爲如果你這樣做,你還沒有關閉記錄集。

-1

試試你的DO循環之前這樣做:

rst.movelast 

rst.movefirst