使用循环从表中选择多个记录以填充MS Access中的未绑定文本框

用户名

我有一个包含以下字段的表:

StudentID
ClassID
TestID 
TestScore

对于学生和班级的每种独特组合,最多可以有10个测试ID和相应的测试分数。我有一个带有10个未绑定文本框的表单,该文本框对应于10个测试ID的测试分数。我正在尝试使用该表格将数据编辑和添加到我的表(StudentScores)。由于学生可能错过一堂课,因此每个学生课组合不一定在表中有10条记录。

我希望能够在事件过程中使用循环,根据选择的学生和班级ID从表中检索测试成绩,以输入到文本框中。这些文本框的名称分别为textbox1到textbox10,对应于10个TestID。

通过在这样的论坛上进行搜索,我已经能够提供以下代码来从10个未绑定文本框中提取数据,并将其作为新记录添加到表中:

Dim i As Integer
Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("StudentScores", dbOpenTable)
For i = 1 To 10
rst.AddNew
rst![StudentID] = Me.StudentCombo1
rst![ClassID] = Me.ClassCombo1
rst![TestID] = i
If Not IsNull(Controls("Textbox" & i)) Then
   rst![TestScore] = CLng(Controls("Textbox" & i))
End If
rst.Update
Next 

好的,因此下面的代码似乎至少在最初是有效的。我最初遇到的问题是由于打字错误造成的。但是,当我更改组合框的值并重新运行该例程时,我收到一条错误消息,即记录集为空。

Dim rst As DAO.Recordset
mmySQL = "SELECT * from StudentScores where ClassID =" & Me.ClassCombo1 & "AND StudentID =" & Me.StudentCombo1
Set rst = CurrentDb.OpenRecordset(mmySQL)
rst.MoveFirst
Do Until rst.EOF
    Controls("Textbox" & rst![TestID]) = rst![TestScore]
    rst.MoveNext
Loop
rst.Close
Set rst = Nothing
克里斯·罗里斯顿(Chris Rolliston)

在深入探讨问题之前,请注意以下几点:

  1. 目前,您可以Null在StudentScores表中允许考试成绩。我很想禁止它们(即,将字段的Required属性设置为True),尽管您知道自己的数据。也就是说,以下代码假定不允许使用null。

  2. 即使是小格式,我也避免使用默认控件名称,例如TextBox1-常见的Access约定是使用三个字母的前缀(例如txtTestScore1)。另外,为什么ClassCombo1以及StudentCombo1如果每个都只有一个?为了清楚起见,我将在下面继续使用您当前的命名。

  3. 您的描述涉及添加或编辑,但是您用于记录代码的文本框仅覆盖前者...尽管我看到您现在已经对此进行了评论。

  4. 对于这种事情,您可以使用纯DAO或一些内联SQL。在数据量达到一定大小之前(10个测试分数远不及此),选择哪种方法并不重要,但是我将在第二篇文章中介绍。

  5. 如果尚未安装,则可能需要在该TestID字段上放置验证规则以强制使用介于1到10之间的值。

因此,首先需要几个常量-在form模块的顶部声明它们:

Const MaxTextScoreCount = 10 
Const TestScoreTextBoxPrefix = "TextBox" 

接下来,是一种清除表单上现有值的方法:

Sub ClearTestScoreTextBoxes()
  Dim I As Integer
  For I = 1 To MaxTextScoreCount
    Me.Controls(TestScoreTextBoxPrefix & I).Value = Null
  Next I
End Sub

第三,一个帮助函数,从组合框构建一个WHERE子句:

Function BuildWhereClause() As String
  BuildWhereClause = " WHERE StudentID = " & StudentCombo1.Value & _
    " AND ClassID = " & ClassCombo1.Value 
End Function

第四,一种使用选择填充文本框的方法:

Sub UpdateTestScoreTextBoxes()
  Dim RS AS DAO.Recordset, SQL As String
  SQL = "SELECT TestID, TestScore FROM StudentScores" + BuildWhereClause
  Set RS = CurrentDb.OpenRecordset(SQL, dbForwardOnly)
  ClearTestScoreTextBoxes
  While Not RS.EOF
    Me.Controls(TestScoreTextBoxPrefix & RS!TestID).Value = RS!TestScore
    RS.MoveNext
  Wend
End Sub

第五,一种从文本框中更新数据库的方法:

Sub UpdateDatabase()
  Dim DB AS DAO.Database, I As Integer, Score As Variant, WhereClause as String, SQL As String
  Set DB = CurrentDb
  For I = 1 To MaxTextScoreCount
    Score = Me.Controls(TestScoreTextBoxPrefix & I).Value
    WhereClause = BuildWhereClause + " AND TestID = " & I
    If IsNull(Score) Then
      SQL = "DELETE FROM StudentScores" + WhereClause
    ElseIf DB.OpenRecordset("SELECT 1 FROM StudentScores" + WhereClause).EOF Then
      SQL = "INSERT INTO StudentScores(StudentID, ClassID, TestID, TestScore) " + _
            "VALUES (" & StudentCombo1.Value & "," & ClassCombo1.Value & "," & _
             I & "," & Score & ")"
    Else
      SQL = "UPDATE StudentScores SET TestScore = " & Score & WhereClause
    End If
    DB.Execute SQL
  Next I
End Sub

应该做...

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

从新记录的“访问”表单中清除多个未绑定的文本框

来自分类Dev

使用ComboBox中的值格式化未绑定的文本框

来自分类Dev

MS Access:如何用查询绑定表格的文本框?

来自分类Dev

使用C#在MS Access中选择多个表

来自分类Dev

使用绑定来格式化未绑定的文本框控件?

来自分类Dev

选择下拉列表后如何使用从mysql表中获取的数据填充多个文本框

来自分类Dev

选择下拉列表后如何使用从mysql表中获取的数据填充多个文本框

来自分类Dev

写入未选择的选项卡中的文本框

来自分类Dev

在文本框中继续循环以从数据库,MS Access中搜索多个值

来自分类Dev

仅允许MS Access在文本框中输入字母

来自分类Dev

从ASP.NET中的DropDownList中选择后填充多个文本框

来自分类Dev

WPF文本框未使用数据绑定,iNotifyPropertyChanged和PropertyChanged触发器更新

来自分类Dev

两个文本框之一未使用绑定更新

来自分类Dev

使用 VB.Net 将数据绑定文本框中的 string.empty 值更新到 MS Access 数据库中

来自分类Dev

将用户输入从文本框绑定到对象集合,并通过MVVM中的组合框填充

来自分类Dev

如何将文本框绑定到MS Access中子窗体的链接子字段?

来自分类Dev

MS Access填充文本框和组合框

来自分类Dev

在Angular 8中使用相同的ngModel属性在多个文本框中绑定不同的值

来自分类Dev

使用数据绑定在文本框中显示文本文件数据

来自分类Dev

MS Access VBA;从按日期筛选的表中选择记录

来自分类Dev

在面板中选择多个文本框

来自分类Dev

使用绑定以编程方式填充文本框

来自分类Dev

如何在MS Access中通过VBA填充文本框?

来自分类Dev

C#/WPF 如何从文本框中读取“绑定”(数据从 SQL 表中获取)?

来自分类Dev

将查询记录计数到MS Access中的文本框

来自分类Dev

将用户输入从文本框绑定到对象集合,并通过MVVM中的ComboBox进行填充

来自分类Dev

多个文本框中的文本识别

来自分类Dev

MS Access:如何在筛选的搜索中筛选多个字段(文本框)

来自分类Dev

在 Access 表单的标签或文本框中显示表(所有列)的最新记录

Related 相关文章

  1. 1

    从新记录的“访问”表单中清除多个未绑定的文本框

  2. 2

    使用ComboBox中的值格式化未绑定的文本框

  3. 3

    MS Access:如何用查询绑定表格的文本框?

  4. 4

    使用C#在MS Access中选择多个表

  5. 5

    使用绑定来格式化未绑定的文本框控件?

  6. 6

    选择下拉列表后如何使用从mysql表中获取的数据填充多个文本框

  7. 7

    选择下拉列表后如何使用从mysql表中获取的数据填充多个文本框

  8. 8

    写入未选择的选项卡中的文本框

  9. 9

    在文本框中继续循环以从数据库,MS Access中搜索多个值

  10. 10

    仅允许MS Access在文本框中输入字母

  11. 11

    从ASP.NET中的DropDownList中选择后填充多个文本框

  12. 12

    WPF文本框未使用数据绑定,iNotifyPropertyChanged和PropertyChanged触发器更新

  13. 13

    两个文本框之一未使用绑定更新

  14. 14

    使用 VB.Net 将数据绑定文本框中的 string.empty 值更新到 MS Access 数据库中

  15. 15

    将用户输入从文本框绑定到对象集合,并通过MVVM中的组合框填充

  16. 16

    如何将文本框绑定到MS Access中子窗体的链接子字段?

  17. 17

    MS Access填充文本框和组合框

  18. 18

    在Angular 8中使用相同的ngModel属性在多个文本框中绑定不同的值

  19. 19

    使用数据绑定在文本框中显示文本文件数据

  20. 20

    MS Access VBA;从按日期筛选的表中选择记录

  21. 21

    在面板中选择多个文本框

  22. 22

    使用绑定以编程方式填充文本框

  23. 23

    如何在MS Access中通过VBA填充文本框?

  24. 24

    C#/WPF 如何从文本框中读取“绑定”(数据从 SQL 表中获取)?

  25. 25

    将查询记录计数到MS Access中的文本框

  26. 26

    将用户输入从文本框绑定到对象集合,并通过MVVM中的ComboBox进行填充

  27. 27

    多个文本框中的文本识别

  28. 28

    MS Access:如何在筛选的搜索中筛选多个字段(文本框)

  29. 29

    在 Access 表单的标签或文本框中显示表(所有列)的最新记录

热门标签

归档