2009-07-13 10 views
0

、私は以下のようにVBAのアクセスクエリで複数の挿入をしています:複数のインサート問題

Private Sub btnSubmit_Enter() 
DoCmd.RunSQL ("insert into tblAutonumber (Dummy)values ('DummyValue')") 
Dim lastAutonumber As Long 
lastAutonumber = DMax("Autonumber", "tblAutonumber") 
txtAutoNumber.Value = lastAutonumber 
DoCmd.RunSQL ("insert into tbltesting " & _ 
    "(Empid, TestScenario, testid, owner, event, version, " & _ 
    "expresult, variation, status, homestore) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtTestScenario.Value & "','" & _ 
     Me.txtAutoNumber.Value & " ' ,'" & _ 
     Me.txtOwner.Value & "','" & _ 
     Me.txtEvent.Value & "', '" & _ 
     Me.txtVersion.Value & "','" & _ 
     Me.txtExpectedResult.Value & "', '" & _ 
     Me.txtVariation.Value & "', '" & _ 
     Me.txtStatus.Value & "','" & _ 
     Me.txtHomeStore.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Sunday ','" & _ 
     Me.txtContSunStart1.Value & "', '" & _ 
     Me.txtContSunFinish1.Value & "','" & _ 
     Me.txtContSunStore1.Value & "','" & _ 
     Me.txtContSunStart2.Value & "', '" & _ 
     Me.txtContSunFinish2.Value & "','" & _ 
     Me.txtContSunStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1, " & _ 
    "Start2, Finish2, Store2) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Monday ','" & _ 
     Me.txtContMonStart1.Value & "', '" & _ 
     Me.txtContMonFinish1.Value & "','" & _ 
     Me.txtContMonStore1.Value & "','" & _ 
     Me.txtContMonStart2.Value & "', '" & _ 
     Me.txtContMonFinish2.Value & "','" & _ 
     Me.txtContMonStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Tuesday','" & _ 
     Me.txtContTueStart1.Value & "', '" & _ 
     Me.txtContTueFinish1.Value & "','" & _ 
     Me.txtContTueStore1.Value & "','" & _ 
     Me.txtContTueStart2.Value & "', '" & _ 
     Me.txtContTueFinish2.Value & "','" & _ 
     Me.txtContTueStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1, " & _ 
    "Start2, Finish2, Store2) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Wednesday','" & _ 
     Me.txtContWedStart1.Value & "', '" & _ 
     Me.txtContWedFinish1.Value & "','" & _ 
     Me.txtContWedStore1.Value & "','" & _ 
     Me.txtContWedStart2.Value & "', '" & _ 
     Me.txtContWedFinish2.Value & "','" & _ 
     Me.txtContWedStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2) values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Thursday','" & _ 
     Me.txtContThuStart1.Value & "', '" & _ 
     Me.txtContThuFinish1.Value & "','" & _ 
     Me.txtContThuStore1.Value & "','" & _ 
     Me.txtContThuStart2.Value & "', '" & _ 
     Me.txtContThuFinish2.Value & "','" & _ 
     Me.txtContThuStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2)values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Friday','" & _ 
     Me.txtContFriStart1.Value & "', '" & _ 
     Me.txtContFriFinish1.Value & "','" & _ 
     Me.txtContFriStore1.Value & "','" & _ 
     Me.txtContFriStart2.Value & "', '" & _ 
     Me.txtContFriFinsh2.Value & "','" & _ 
     Me.txtContFriStore2.Value & "')") 

DoCmd.RunSQL ("insert into tblContract " & _ 
    "(Empid, testid, Day, Start1, Finish1, Store1," & _ 
    "Start2, Finish2, Store2)values ('" & _ 
     Me.txtEmpNo.Value & "','" & _ 
     Me.txtAutoNumber.Value & "','Saturday','" & _ 
     Me.txtContSatStart1.Value & "', '" & _ 
     Me.txtContSatFinish1.Value & "','" & _ 
     Me.txtContSatiStore1.Value & "','" & _ 
     Me.txtContSatStart2.Value & "', '" & _ 
     Me.txtContSatFinish2.Value & "','" & _ 
     Me.txtContSatStore2.Value & "')") 

End Sub 

まず2つのクエリは、(すなわち日曜日まで)正常に動作します

しかし、月曜日から実行が

を破ります私はクエリ内のすべての変数をチェックしました。そこにはヌルはありません。

+0

どのように「ブレーク」しますか? –

+2

エラーメッセージplz。 –

+0

私は実行します。それは2つのテーブルに2つの行を挿入すると、それは "マイクロソフトのアクセスは、アクセスクエリのすべてのレコードを追加することはできません"と言うでしょう –

答えて

0

私の推測では、プログラムが "月曜日contの値の1つ" SQL Serverが構文要素として解釈している文字はありません。つまり、エスケープされていない文字列をクエリ文字列に挿入しています。 (ちなみに、これがSQLインジェクション攻撃の原因です)。可能であれば、このようなクエリーを構築する上でのパラメータを優先するべきです。コリン・マッケイにより上記の表現として、あなたの連結が出て、私はあなたが、あなたのエラーを見ることができます賭ける

1

印刷...

+0

私は各変数にcursonを入れていますが、私はクエリの各変数の値を見ることができます。 NULLがない場合でも、 –

+1

奇妙なエラーは、通常、あなたの仮定が間違っていることを証明します。インサートの順序を変更して、 "Sunday"の前に "Friday"を入れてみてください。 –

0

は、あなたの特定の問題がたくさんで、無効なクエリである可能性が高いです。

によって...それを可視化して、診断によってMSACCESSするオフロードrepeatable..and ....あなたは簡単にそれらをダンプできるように、変数にクエリを構築

アップ、それをクリア.. 。

あなたは、問題が発生します:

  1. クエリテキストをダンプ...(CNTRL-G、その後、入力sqltxtを?)
  2. 使用アクセス自体診断します。クエリーテキストを新しいクエリー(SQLビュー)にコピーして、デザインモードに切り替えるか、クエリーを実行しようとする...アクセスは不平を言って、通常はクエリーを修正するヒントを与えます。

今後、クエリごとに適切なエラー処理を追加することを検討してください。

後者のために、あなたはにDLookup(msaccess2kの私の霧のメモリごとに)確認ボックスを抑制する追加のステップを取ることも

を有していてもよく、ので。また、代わりのDoCmdのcurrentdb.executeを使用することを検討し、 dmax(+1)は、自動番号に頼らなくても一意のキーを取得するための便利な機能です。私はあなたがキーを生成するためにテーブルを使用しているように見えるので、これだけを言う...

幸運!

1

黄色い線と矢印でコードウィンドウに移動してクエリを「中断する」が表示されてもエラーメッセージが表示されない場合は、コンパイルされたコードが多少壊れていることを示す良い症状です。

これが症状である場合は、逆コンパイル&がコンパイルされている可能性があります。

データベースを使用してAccessを呼び出すと、スイッチ/デコンパイルを追加して逆コンパイルできます。

"c:\Program Files\Microsoft office\office\msaccess.exe" 
            /decompile "c:\My Documents\MyDatabase.mdb" 

とアクセス内のコードウィンドウに行くとメニューデバッグ - を使用して再コンパイル>コンパイル...

0

あなたはブレークモードにある間、押しのCtl + Gデバッグウィンドウを開くために、そしてタイプ:

? txtContTueStart1, txtContTueFinish1 

などです。これらの値が正常であることを確認してください。

関連する問題