1 つのフォームを複数のテーブルにリンクし、クリック時にデータを保存する
-
11-09-2019 - |
質問
そこで、ユーザーが複数のテーブルを更新するために使用するフォームを用意しました。フォームをテーブルにバインドしたくありません。VBA を使用してこれを行うほうがよいと思います (私にはわかりませんが)。
ここに小さなテーブルの例を示します
ユーザーテーブル
UserID
First
Middle
Last
Division
Title
テーブルを装備する
EquipID
AssignedLaptop
Model
Barcode
ソフトテーブル
SoftID
SoftwareName
License#
Custom (running sum to calculate how many licenses are left....another question)
交換テーブル
UserID
SoftID
EquipID
それで私はテーブルをセットアップする方法をとりました。これらすべてのテキスト/cmb ボックスは 1 つのテーブルに存在し、ボタンをクリックするだけでこの 1 つのフォームからすべての相対テーブルにこのデータを保存できるようにしたいと考えています。
それで、誰かが次のことを手伝ってくれませんか?
「新規作成」ボタンをクリックした後にこの非バインドフォームにデータを入力する場合、非表示のテキストボックス (理想的には ID 番号を含むもの) に、各 " " VB でデータを保存するために、UPDATE SQL ステートメントを SAVE ボタンのクリックに割り当てることができるように、テーブルを追加しますか?
その逆ではなく、「交換テーブル」(なぜそう名付けたのかわかりません) だけが他のテーブルの ID 番号を入力するように設定できますか?
私のやり方は間違っているでしょうか
編集:
私がやろうとしていることが 1 つのフォーム上の複数のテーブル (最終的には複数のキー) で可能かどうか、また可能であれば、1 つのフォーム/テーブルで行うこととどのように異なるのかを確認するための例を提示しようとしました。フォームを構築する必要があり、VBA 内でフォーム間でパラメーターを常に渡す必要があるため、私は非バインド アプローチをよく使用します。自分でコーディングしたほうが早いと思いますか?したがって、この概念では、フォーム上に常に相対テーブルの ID 番号を含む非表示のテキスト ボックスを用意しています。したがって、「保存」をクリックするには、単純な操作が必要です SQL = * WHERE Tbl_ID = frmID
ちょっとしたアイデア。
私が疑問に思っていたのはこれらの質問だけでしたか?
INSERT を実行するとき、ID 番号は STATEMENT に存在する必要がありますか、それとも実行時にアクセスによって次の相対的な番号が割り当てられるだけですか?
上記の方法を考慮していない場合、コードを使用して、自分でこの数値(使用する必要があるID)をどのように判断できますか?
別の質問ですか?バインドされたフォームでレコード機能のマウス ホイール スクロールを無効にするにはどうすればよいですか?
解決
あなたの言っていることはわかります。この件については表現が奇妙でしたが、これについてあなたがどこに行きたいのかはわかります。
これがあなたが持っているものです:
- どのテーブルにもリンクされていない非バインド フォームがあります。
- どのテーブルにもリンクされていないこの非バインド フォームは、いくつかのテキスト ボックス、コンボ ボックス、ボタンを追加することによってデザインされます。
- これらのテキストボックス内には、行の ID (キー値) を保存するテキストボックスがいくつかあります。保存すると、ID 番号がテキスト ボックスに戻されるようにします。
- この隠しフィールドに ID 番号を設定すると、この ID 番号を必要とするすべてのテーブルに更新を発行できます。
それは正しいと思いますか?そうであれば、それは非常に簡単です。「作成ボタン」をクリックして挿入を実行するだけで、次のような効果が得られます。
' Command to Insert Records.
Dim cmdInsert As New OleDbCommand()
cmdInsert.CommandText = "INSERT INTO AutoIncrementTest (Description) VALUES (?)"
cmdInsert.Connection = cnJetDB
cmdInsert.Parameters.Add(New OleDbParameter("Description", OleDbType.VarChar, 40, "Description"))
oleDa.InsertCommand = cmdInsert
次に、別のコマンドを発行して IDENTITY、つまり自分の ID を取得します。
' Create another command to get IDENTITY value.
cmdGetIdentity = New OleDbCommand()
cmdGetIdentity.CommandText = "SELECT @@IDENTITY"
cmdGetIdentity.Connection = cnJetDB
ID はいつでも SELECT @@IDENTITY で取得できます。
したがって、背後のコードでテキストボックスを SELECT @@IDENTITY の値に設定します。5年以上アクセスしてなかったのですが、こんなことをした記憶があります。この ID を取得したら、それを非表示のテキスト ボックスに配置します。これは、この ID を使用する更新を実行するのに役立ちます。
ここから始めるのが良いでしょう: http://support.microsoft.com/kb/815629役立つかもしれないもう 1 つの素晴らしい記事を次に示します。 http://support.microsoft.com/kb/815629