我是MS access 2007编程的新手.. 我想逐个从数据库中获取信息。但我正在使用的代码并没有执行。如果我在第一个记录,那么它直接进入我不想要的最后一个记录。我想把它带到下一个记录.. 这是我的代码:
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 :(得分:3)
您需要使用绑定表单,而不是未绑定表单。
听起来您正在尝试重新构建Access内置的功能。要将表单从未绑定表单更改为绑定表单,请执行以下操作:
SELECT * FROM Table_Emp_Info
(您也可以输入Table_Emp_Info
将表单直接绑定到查询的基础表格。)现在,您只需使用表单左下方的5个按钮即可浏览记录。从左到右按钮将带您进入First,Previous,Next,Last或New记录。
有关详细信息,请搜索“ms access bound form”。
答案 1 :(得分: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
答案 2 :(得分: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
答案 3 :(得分:0)
在我看来,您应该使用单个SQL UPDATE语句来执行更新,而不是遍历表单和记录集并逐个记录复制数据。
但是,您没有提供足够的信息来提供示例SQL,因为我无法知道目标表单与源数据的关系。
可能是您正在创建新记录并从记录集中复制数据,在这种情况下,您将使用SQL INSERT语句而不是UPDATE,但这里没有足够的信息可用
ASIDE:
顺便说一句,作为一个禁止在记录集没有返回任何内容时执行循环的保护子句,DAO中的常用方法是检查记录集的.Recordcount属性是否为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
你实际上不想退出,因为你没有关闭你的记录集。
答案 4 :(得分:-1)
在do循环之前尝试这样做:
{{1}}