2017-12-04 30 views
0

doループ内のジョブ番号のフィールドに番号を順番に追加しようとしています。私のコードは壊れていませんが、レコードをテーブルに追加していません。このコードは、アクセスフォームボタンを押してレコードを更新するときに呼び出される関数で記述されます。私は私が達成しようとしているものですカードコードフィールド以外のフィールドの行を重複しています実現VB6アクセス更新クエリでテーブルが更新されない

Dim NumofBatches As Integer 
    NumofBatches = [Batches] 
    Dim startnum As Integer 
    startnum = 1 
    Dim jobnum As String 
    jobnum = [JobNumber] 

    Do While startnum <= NumofBatches 
     Dim mynumString As String 
     mynumString = startnum 
     DoCmd.RunSQL "INSERT INTO Production (CardCode,JobItemNo,JobIndex,DrawingRef,DRDescription,[CreationDate],Quantity,FinishDate,LastLocation,DateLastMoved) VALUES ('" & jobnum & mynumString & "', ItemNumber, JobNumber, DrawingRef, DRDescription, [CreationDate], Quantity, FinishDate, LastLocation, DateLastMoved)" 
     startnum = startnum + 1 
    Loop 

:以下は私のコードです。カードコードフィールドは、ジョブ番号の各行で順次でなければなりません。 100011、100012の例です。ここで、10001はジョブ番号であり、1,2などを順番に追加しています。

答えて

2

あなたにはいくつか問題があります。最初は、SQLステートメントのINSERT部分のフィールドリストにあります。プロダクションテーブルに "CardCode + mynumString"という名前の列がないかぎり、スペースとシンボルが入っているため、大カッコで囲む必要があります。 INSERT INTO <TableName>の後のかっこの中に、挿入するテーブルの列名を列挙する必要があります。最初にターゲット列名を修正してください。

次に、挿入する値のソースとしてSELECT文があります。あなたが必要とする値は、テーブルで発見されていない限り、あなたはおそらくVALUESリストを使用する必要があります。

INSERT INTO <TableName> (Col1, Col2, ...) VALUES (Val1, Val2, ...) 

最後の問題は、SQL文字列にあなたの変数を連結しなければならないということです。私は[Text90]があなたのCardCode値を持つコントロールであり、それをmynumStringと連結しようとしていると仮定します。あなたが引用されたSQL文字列の外にあなたの価値を解決し、文字列にその値を連結し、SQL文字列内のシングルダニ引用符でそのすべてをオフに設定する必要が

DoCmd.RunSQL "INSERT INTO Production (Col1, Col2, ...) VALUES ('" & [Text90] & mynumString & "', Val2, ...)" 

注:それはこのようになります。変数内のSQL文字列があれば連結にエラーを発見することが少し楽になります持っ

DoCmd.RunSQL mySQLVariable 

:私はそれは便利な変数を使用して、このような動的SQL文字列を構築し、としてそれを実行するために見つける

デバッグ中に変数を検査するか、Debug.Printを使用して直接ウィンドウに値をダンプするだけです。

+0

ニースの回答。 1つの小さな点は、テーブル内のすべての列を順番に使用する場合、列名を指定する必要がないことです。 (おそらくそれはアクセスで真実ではない?私は忘れる。) – BobRodes

+0

ありがとう。私は毎日のAccessで動作しないので、わかりませんが、各列の値がVALUESリストのいずれかにある場合は、IIRCはターゲット表の列指定をスキップする必要がありますまたはSELECTステートメントで実行できます。 –

+1

カラム名を省略することは可能ですが、テーブルにオートナンバーフィールドや計算フィールドが含まれたり、余分なカラムを取得したりするとすぐにクエリが失敗するので、それらを提供するのがよい方法です。 –

関連する問題