0

您好,我只想知道如何在访问中制作一个连续的问卷调查表,一旦所有问题都被填写,它将更新所有表格。但在它到达页面末尾之前,用户将能够在表单之间来回编辑。

所以它会是这样的:

  1. 共有 30 个表格
  2. 一个表格只更新表中的1-3个字段
  3. 用户完成一个表单后,该表单将关闭并打开另一个表单。
  4. 用户将能够返回到以前的表单并对其进行编辑。
  5. 它仅可用的按钮 2 个按钮后退箭头和下一个箭头(保存数据并移动到另一个表单并关闭当前表单)
  6. 最后一个表格将保存所有数据。
  7. 当用户完成所有问题时,表单将允许从第一个问题重新打开,并将在表中插入全新的用户数据行。

我所做的是

  1. 我创建了一个带有框和标签的表单,直接连接到表格,因此它会实时更新。所以用户可以来回编辑它
  2. “下一步”按钮,使用宏关闭和打开新表单。
  3. 使用以下 VB 代码更新表格的最终形式:

    Private Sub Close_Click()
    
      CurrentDb.Execute "INSERT INTO Demographics(vid, cid, dobd, gend, heght, heght2,         wgt, wgt2, lschool, secschl, qualify, hqlify, army, abranch )" & _
      "VALUES('" & vid1 & "','" & cid1 & "','" & dobd1 & "','" & gend1 & "','" & heght1 &  "','" & heght21 & "','" & wgt1 & "','" & wgt21 & "','" & lschool & "','" & secschl1 & "','"  & qualify1 & "','" & hqilfy1 & "','" & army1 & "','" & abranch1 & "')"
    
      cmdClear_Click
      cmdClose_Click
    End Sub
    
    Private Sub cmdClose_Click()
      DoCmd.Close 
    End Sub
    
    Private Sub cmdClear_Click()
      vid1 = ""
      cid1 = ""
      dobd1 = ""
      gend1 = ""
      heght1 = ""
      heght21 = ""
      wgt1 = ""
      wgt21 = ""
      lschool1 = ""
      secschl = ""
      qualify = ""
      hqlify = ""
      army = ""
      abranch = ""
    
    End Sub
    
    
    Private Sub Form_Current()
    End Sub
    

问题:

  1. 上面的最后一页脚本根本不会将数据插入表中。
  2. 如果我对表中的列进行索引,它可以将数据插入表中,但如果我进行了大量更新,它最终会变得混乱

我的问题:

  1. 谁能建议我正确的 VB 脚本来执行此连续表单活动,而不是按表单更新整个表格。
  2. 如何创建一个类似于 access 2003 的表单,在该表单上我可以创建仅允许用户登录的交换机,以及仅针对管理员对数据库的特殊登录访问,因此它会像一个应用程序。(我使用 Access 2010 .accdb 文件)

很抱歉这篇长文,只是想确保一切都清楚,任何答案将不胜感激。先感谢您

4

1 回答 1

0

关于你的第一个问题:

这是绑定表格可以证明很方便的情况之一。

您可以使用INSERT INTO,但您需要为每个表单生成不同的查询以避免错误。但是,如果您将所有表单设置为绑定到同一个表,则表单字段可以直接与表交互,而无需大量代码。

尝试以下示例,使用 3 个表单(尽管您可以轻松地将其扩展到 30 个表单)。

每个表格都有:

  1. 隐藏字段,ctlID(绑定到表的 ID 字段)
  2. 任意数量的其他字段,绑定到表中的匹配字段
  3. 一个“下一步”按钮,cmdNext(或者在最后一个表单的情况下,cmdFinish

您可以使用WhereCondition参数 ofDoCmd.OpenForm来跨多个表单继续引用同一记录。

这是代码:

' Form1 code:
Private Sub Form_Load()
    DoCmd.GoToRecord , , acNewRec
End Sub

Private Sub cmdNext_Click()
    Dim iID As Long
    iID = Me.ctlID.Value

    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "Form2", , , "ID = " & iID
End Sub

' Form2 code:
Private Sub cmdNext_Click()
    Dim iID As Long
    iID = Me.ctlID.Value

    DoCmd.Close acForm, Me.Name
    DoCmd.OpenForm "Form3", , , "ID = " & iID
End Sub

' Form3 code:
Private Sub cmdFinish_Click()
    DoCmd.Close acForm, Me.Name
End Sub
于 2012-07-06T06:02:41.493 回答