Access 2003 の VBA 内で、
TableA
主キー (AID
) と現在の日付として新しいオートナンバーでレコードを作成します- によって選択されたように、から複数の外部キー ( ) を使用して の新しいレコード
TableC
を関連付けるいくつかのレコードを作成します。AID
TableA
BID
TableB
QueryB
したがって、 with s 2,5,7,8QueryB
からレコードを返す場合、 withおよびwith でレコードを作成したいと思います。TableB
BID
TableA
AID = 1
Date = 8/23/13
そして、次のようにTableC
表示します。
AID BID
---------
1 2
1 5
1 7
1 8
どうすればいいですか?2 番目のフィールドが必要であることを思い出すまで、最初のことを達成することは問題ありませんでした。今私のコードは次のようになります。
Dim SQLstr As String
Dim db As DAO.Database
Set db = CurrentDb
SQLstr = "INSERT INTO TableA (FieldA, Date) "_
& "VALUES (list13.value, Date());"
db.Execute SQLstr
はList13
、開いているフォームのコントロールです (名前を便利なものに変更できないか、フォームの残りの部分に表示されるレコードを制御できなくなります)。しかし、 と を追加するFieldA
とlist13.value
、次のようなエラー メッセージが表示されます。
パラメータが少なすぎます。予想: 1
AID = 1
また、新しいレコード (この場合は) を、すべてのQueryB
レコードが関連付けられている定数として使用したいことをどのように説明すればよいかわかりません。いろいろ検索した結果、 を使いたいと思います@@IDENTITY
が、方法がわかりません。
編集: 最終的に、AID を適切に返す次のコードを取得しました。
Dim rs As DAO.Recordset
Dim AIDvar As Integer
Set rs = db.OpenRecordset("select @@identity")
AIDvar = rs(0)
そして、私はここを閲覧していましたが、次のコードは、フィールド データと定数を組み合わせて INSERT INTO を使用するために提案されました。
strText = "foo"
strInsertSQL = _
"INSERT INTO tblA(fld1, fld2, fld3) " _
& "Select fldA, fldB, '" & strText & "' AS Expr1 " _
& "From tblB ;"
だから私が残っているのは次の質問です:
最初のコードで "list13.value" を使用することの何が問題になっていますか?編集:だから、私はそれを修正しました:strText = CStr(List13.Value) SQLstr = "INSERT INTO InvoiceT (AcctID, InvDate) "_ & "VALUES (" & strText & ", Date());"
しかし、@@IDENTITY コードですべてをまとめると、オーバーフロー エラーが発生します。どうすればそれを回避できますか?
- 最後にコピーしたコード ブロックの「foo」の意味は何ですか?
- 同じコード ブロック内の「AS Expr1」の意味は何ですか?
- @@IDENTITY コード ブロックの strText を AIDvar に置き換えると機能しますか?
- TableA が実際に開いていない場合に "OpenRecordset" が機能するのはなぜですか? これが私を混乱させるという私の考えはどこで間違っていますか?