Ms access 如何使用表中的字段预填充表单,获取附加用户数据,并将新记录写入不同的tbl

Ms access 如何使用表中的字段预填充表单,获取附加用户数据,并将新记录写入不同的tbl,ms-access,vba,Ms Access,Vba,我正在尝试预先填充一个模板,供教师输入学生成绩 老师将确定班级和/或分区,我将检索这些班级和/或分区中的每个学生。每个学生将出现在模板中的一行上,然后老师将填写成绩 我计划从现有的student表中检索student信息,并将该数据写入EnterGrades表。老师填写成绩后,我会将这些记录从EnterGrades表写入master grades表 我在计算最佳方法时遇到了一个问题—查询、表单、什么类型。我试图向表单中添加一些sql代码,但无法在VBA中使用。这似乎比较直截了当,我只是不太明白解

我正在尝试预先填充一个模板,供教师输入学生成绩

老师将确定班级和/或分区,我将检索这些班级和/或分区中的每个学生。每个学生将出现在模板中的一行上,然后老师将填写成绩

我计划从现有的student表中检索student信息,并将该数据写入EnterGrades表。老师填写成绩后,我会将这些记录从EnterGrades表写入master grades表


我在计算最佳方法时遇到了一个问题—查询、表单、什么类型。我试图向表单中添加一些sql代码,但无法在VBA中使用。这似乎比较直截了当,我只是不太明白解决办法。我是第一次访问用户。

我倾向于使用基于您所说的临时表的表单来输入数据。在“数据”选项卡下的表单属性中,查找记录源。然后,可以通过数据选项卡再次设置字段控制源

表单向导实际上应该可以很好地为您工作

你说的预填充是什么意思?如中所示,是否有默认文本?我使用了很多带有选项的组合框,确保其中没有一个是空的,然后有一个按钮提交。运行查询以更新主表,然后清空该表

如果您使用的是.mdb 创建一个模块并添加以下代码。(可能必须添加工具>引用.Microsoft DAO库。)

它将为您运行任何查询。[Param1],[Param2]。。。在要动态填写条件的查询中。简单地说

fncQueryRun "QueryName", 0
 or
fncQueryRun "QueryName", 1, "John Smith"
我将此代码复制到我创建的每个新数据库(如果它有表单)

我最喜欢的模块代码是:

Public dbTemp As Database, rstTemp As Recordset, tblTemp As TableDef
Public qryTemp As QueryDef, prmTemp As Parameter 
Public bQueryError  As Boolean, bError3271 As Boolean

Public Function fncQueryRun(ByVal stQueryName As String, ByVal intParamCnt As Integer, _
  ParamArray Param() As Variant)

  On Error GoTo Err_fncQueryRun

  bQueryError = False
  Set dbTemp = CurrentDb
  DoCmd.SetWarnings False

    If intParamCnt = 0 Then DoCmd.OpenQuery stQueryName  'Runs Query
      'Parameter Count 0 = Just Runs the Query
    If intParamCnt >= 1 Then Set qryTemp = dbTemp.QueryDefs(stQueryName)
    If intParamCnt >= 1 Then qryTemp.Parameters![Param1] = Param(0)
    If intParamCnt >= 2 Then qryTemp.Parameters![Param2] = Param(1)
    If intParamCnt >= 3 Then qryTemp.Parameters![Param3] = Param(2)
    If intParamCnt >= 4 Then qryTemp.Parameters![Param4] = Param(3)
    If intParamCnt >= 5 Then qryTemp.Parameters![Param5] = Param(4)
    If intParamCnt >= 6 Then qryTemp.Parameters![Param6] = Param(5)
    If intParamCnt >= 7 Then qryTemp.Parameters![Param7] = Param(6)
    If intParamCnt >= 8 Then qryTemp.Parameters![Param8] = Param(7)
    If intParamCnt >= 9 Then qryTemp.Parameters![Param9] = Param(8)
    If intParamCnt >= 10 Then qryTemp.Parameters![Param10] = Param(9)
    If intParamCnt >= 1 Then qryTemp.Execute dbSeeChanges


  DoCmd.SetWarnings True

Exit_fncQueryRun:
  Set qryTemp = Nothing
  dbTemp.Close
  Exit Function

Err_fncQueryRun:
  bQueryError = True
  If Err.Number = 3271 Then
      bError3271 = True
      Resume Exit_fncQueryRun
  ElseIf Err.Number = 3070 Then
      Resume Exit_fncQueryRun
  Else
      MsgBox "Query named " & stQueryName & " -  Had error number: " & Err.Number & Chr(10) & Chr(10) _
        & Err.Description, , "Query - " & stQueryName & " -  Error: " & Err.Number
      Resume Exit_fncQueryRun
  End If

End Function
“ByVal intParamCnt As Integer”的要点是什么?要查看
Param()
中包含多少元素,请使用
UBound(Param)
并添加一个元素。要查看查询的SQL需要多少参数,请使用
qryTemp.parameters.Count