VBscript 在 MS Access 2010 中制作问卷表格

Posted

技术标签:

【中文标题】VBscript 在 MS Access 2010 中制作问卷表格【英文标题】:VB sxript to make a questionaire form in MS Access 2010 【发布时间】:2012-05-24 18:43:18 【问题描述】:

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

所以它会是这样的:

    总共 30 个表格 一个表单只更新表中的 1-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
    

问题:

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

我的问题:

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

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

【问题讨论】:

【参考方案1】:

关于你的第一个问题:

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

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

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

每个表格都有:

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

您可以使用DoCmd.OpenFormWhereCondition 参数在多个表单中继续引用同一记录。

代码如下:

' 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

【讨论】:

以上是关于VBscript 在 MS Access 2010 中制作问卷表格的主要内容,如果未能解决你的问题,请参考以下文章

vbscript MS Access中的超时功能

VBScript MS Access数据库连接

使用 VBScript 进行 MS Access MDB 查询

如何通过VBscript检查MS Access中是不是存在表

vbscript MS Access VBA查询功能将CDec()应用于数字字段(有助于避免舍入错误)

MS access mdb 文件第一次从 Access 2007 打开时处于“修复”状态