0

こんにちは私は、すべての質問が記入されるとすべてのテーブルを更新するアクセスで継続的なアンケートフォームを作成する方法について知りたいだけです。ただし、ページの最後に到達する前に、ユーザーはフォーム間で前後に編集できるようになります。

したがって、次のようになります。

  1. 合計30のフォーム
  2. 1つのフォームは、テーブルの1〜3フィールドのみを更新します
  3. ユーザーが1つのフォームを終了すると、フォームは別のフォームを閉じて開きます。
  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. アクセス2003のように、ユーザー専用のログインと管理者専用のデータベースへの特別なログインアクセスを使用してスイッチボードを作成できるフォームを作成するにはどうすればよいですか。(Access 2010 .accdbファイルを使用しています)

長い投稿で申し訳ありませんが、すべてが明確であることを確認したいだけです。どんな答えでも大歓迎です。前もって感謝します

4

1 に答える 1

0

最初の質問について:

これは、バインドされたフォームが便利な場合の 1 つです。

を使用できますINSERT INTOが、エラーを回避するためにフォームごとに異なるクエリを生成する必要があります。ただし、すべてのフォームを同じテーブルにバインドするように設定すると、フォーム フィールドは多くのコードを必要とせずにテーブルと直接やり取りできます。

3 つのフォームを使用して、次の例を試してください (ただし、これを 30 フォームに簡単に拡張できます)。

各フォームには次のものがあります。

  1. 非表示フィールド、ctlID (テーブルの ID フィールドにバインド)
  2. テーブル内の一致するフィールドにバインドされた任意の数の他のフィールド
  3. 「次へ」ボタンcmdNext (最後の形式の場合はcmdFinish )

WhereConditionの引数を使用して、DoCmd.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 に答える