2009-07-21 12 views
0

フィールドを新しいテーブルにコピーし、_Newテーブルから元のテーブルに移動するコードを実行しようとしています。クエリの "Null"値

SQLStatement = CStr("INSERT INTO " & TName & " SELECT * FROM " & TName & "_New") 
Log.WriteLine "Running query with string """ & SQLStatement & """ " 
QueryTimer = Timer 
DoCmd.RunSQL SQLStatement 
Log.WriteLine "Query time: " & (Timer - QueryTimer) 

ログは、一緒に投げたクラスモジュールのほんの一握りの手順です。エラー時にその出力は

@142921: Running query with string "INSERT INTO Records SELECT * FROM Records_New" 
@142941: Error Date/Time: 7/21/2009 2:29:40 PM 
@142941: Error # & Description: 3162, You tried to assign the Null value to a variable that is not a Variant data type. 

である私はTNameSQLStatementは、SQL操作が実行された時点で有効な文字列の両方であることを確認することができ、そしてソース(レコードとRecords_New)は両方とも有効であること。 Option Explicitは、ファイルの他の場所に設定され、誤植を避けることができます。エラーはDoCmd行にスローされます。

DoCmd.RunSQLは値を返さないのに、なぜNullという値になりますか?

+1

それが上のエラーを投げている何行? "option explicit"をコードの先頭に追加して、まだコンパイルされているかどうか確認できますか? – JohnFx

+0

質問に回答するための情報を追加しました。 –

+0

クエリをコード内で直接実行しようとしましたか。それは問題を明らかにするかもしれない。 – JohnFx

答えて

3

レコードテーブルとレコードテーブルのテーブルの説明を投稿できますか? "レコード"テーブルの列の1つにNULL値を挿入しようとしていて、列の説明がNULLでないことを賭けていると思います。

これが役に立ちます。

+0

これが問題となりました。ソース(Records_New)は、(Null IDの自動番号を持つレコードに基づいて)レコードテーブルに存在しなかったテーブルのすべてのレコードを含む格納されたアクセスクエリでした。 'INSERT'は' Null'自動番号を適用しようとしましたが、これは許されません。 ID番号の確認結果を隠して問題を解決しました。 –

-1

多分、タイマーには括弧が必要ですか?

QueryTimer = Timer() 
+0

'Timer'は、1970年1月1日以降の秒数を返すVBAビルトインです。他の場所で問題なく使用されています。 iffy行は 'DoCmd.RunSQL'行です。 –

+0

Timer Function: "真夜中から経過した秒数を表すSingleを返します。Microsoft Windowsでは、Timer関数は秒の小数部分を返します。"(http://office.microsoft.com/en-us/access/HA012289231033 .aspx)Accessデータベースエンジンクエリの式として使用できることに注意してください。 – onedaywhen

1

また、挿入/削除する列についてより具体的にするために挿入ステートメントを変更すると役立つと思います。あなたは非常に特殊であることによってバグを求めています。

これはあなたの答えに応答しないように思われるかもしれませんが、selectテーブルとdestinationテーブルの列が並んでいないか、nullを許可しない宛先テーブルにフィールドがあると思われます。 「Records_NewからレコードSELECT * INTO INSERT」で、手動でそれを実行しようとするクエリを貼り付け(SQLビューで)新しいクエリでは

はこれを試してみてください。より具体的なエラーが発生し、その前にクエリのトラブルシューティングを行うことができます。

+0

SQLクエリに貼り付けると、コードにトラップされた同じメッセージのエラーダイアログが表示されます。このエラーの助けは、最初にNullに設定されているものがわからないので、何の説明もしません。 –

+0

その場合、ソースと宛先テーブルの正確なフィールドについてより明示的になるようにクエリを書き直すことをお勧めします。また、宛先テーブル内のどのフィールドもNULLを許可しないこと、および両方のテーブルでフィールドタイプが同じであることをダブル/トリプルチェックします。 – JohnFx

0

INSERT INTO Statement (Microsoft Access SQL)

あなたのSQLのINSERT文が間違っている - それは次のようになります。

INSERT INTO Records SELECT * FROM [Records_New]; 

ここにあなたが使用する必要があるものです:

CStr("INSERT INTO " & TName & " SELECT * FROM [" & TName & "_New)"];") 
+0

「n」は何ですか?以前はSQL構文でそれを見たことがありませんか? –

+0

これはテーブルのエイリアスなので、RECORDS_NEWテーブルからRECORDS_NEWテーブルの代わりにRECORDSから取得する可能性があります。 –

+0

あなたの構文は新しいエラーを返します: '@ 151343:Error#&Description:3075、クエリ式の構文エラー 'SELECT n。* FROM Records_New n'.' –