web-dev-qa-db-ja.com

MS AccessでVBAを使用してデータベーステーブルに値を挿入する方法

最近アクセスを使用し始めました。データベースにいくつかの行を挿入しようとしています。ただし、エラーがスローされているため、スタックしています。

パラメーターが少なすぎます。

Start_dateという名前の列が1つだけのテーブルテストがあります。たとえば、2014年1月7日から2014年3月7日までを考慮する場合、2つの日付の間にすべての日付を挿入します。/7/2014、3/7/2014の表では、使用したコードの挿入に問題があります。次のとおりです。

Private Sub createRec_Click()
Dim StrSQL As String
Dim InDate As Date
Dim DatDiff As Integer
Dim db As database
InDate=Me.FromDateTxt
'here I have used a code to find out the difference between two dates that i've not written
For i = 1 To DatDiff
StrSQL = "INSERT INTO Test (Start_Date) VALUES ('" & InDate & "' );"
StrSQL = StrSQL & "SELECT 'Test'"
db.Execute StrSQL
db.close
i=i+1
next i
End Sub

コードのパラメーターが少なすぎるため、Db.Execuite StrSQLの行にエラーがスローされます。誰かがこの問題で私を助けてくれることを願っています。前もって感謝します

5
shravya

あなたがアクセスするのは非常に新しいと述べたので、最初にコード内のエラー(不完全なforループとSQLステートメント)を削除するように勧めなければなりませんでした。それ以外の場合は、特定の範囲の日付を挿入するためのforループが必ず必要です。

次に、以下のコードを使用して、テーブルに日付値を挿入してください。コードをテストしましたが、動作します。あなたも試してみてください。その後、シナリオに合わせてforループを追加します

Dim StrSQL As String
Dim InDate As Date
Dim DatDiff As Integer

InDate = Me.FromDateTxt

StrSQL = "INSERT INTO Test (Start_Date) VALUES ('" & InDate & "' );"

DoCmd.SetWarnings False
DoCmd.RunSQL StrSQL
DoCmd.SetWarnings True
10
user3267567

実行中のように2つのSQLステートメントを1つに実行することはできません。

選択クエリを「実行」することはできません。

dbはオブジェクトであり、何も設定していません:(たとえば、set db = currentdb)

VBAでは、整数型は最大32767を保持できます-Longを使用したくなるでしょう。

挿入する日付についてもう少し具体的にしたい場合があります。

INSERT INTO Test (Start_Date) VALUES ('#" & format(InDate, "mm/dd/yyyy") & "#' );"
2
Lord Peter
  1. 次のコード行を削除します:For i = 1 To DatDiff。 ForループにはNEXTという単語が必要です
  2. また、次のコード行を削除します:StrSQL = StrSQL& "SELECT 'Test'" INSERT INTO Test(Start_Date)VALUES( '"&InDate&"'); SELECT 'Test' SQLステートメントの途中にセミコロンがあることに注意してください(常に最後にある必要があります。不要な方法で、省略可能です)それ)。また、セミコロンとキーWord SELECTの間にスペースはありません。

要約すると、上記の2行のコードを削除すると、挿入ステートメントが正常に機能します。後で特定のニーズに合わせてコードを変更できます。ちなみに、時々、#のようなポンド記号で日付を囲む必要があります

0
user3267567