0

フィールドを新しいテーブルにコピーして、テーブルから元のテーブルに移動するコードを実行しようとして_Newいます。これを行うVBAコードは次のように機能します。

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.

TNameSQL操作の実行時にとSQLStatementが両方とも有効な文字列であり、ソース(RecordsとRecords_New)が両方とも有効である ことを確認できます。Option Explicitタイプミスによる混乱を避けるために、ファイルの他の場所に設定されています。エラーが回線にスローされますDoCmd

値を返さないNullのに、なぜこれに値があるのでしょうか。DoCmd.RunSQL

4

4 に答える 4

3

Records および Records_New テーブルのテーブルの説明を投稿できますか? 「レコード」テーブルの列の 1 つに NULL 値を挿入しようとしていることに賭けます (列の説明は NULL ではありません)。

お役に立てれば。

于 2009-07-21T18:44:25.663 に答える
1

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

これはあなたの答えに反応していないように見えるかもしれませんが、選択テーブルと宛先テーブルの列が並んでいないか、宛先テーブルにnullを許可しないフィールドがあると思われます。

これを試して:

新しいクエリ (SQL ビュー) にクエリ「INSERT INTO Records SELECT * FROM Records_New」を貼り付け、手動で実行してみます。より具体的なエラーが発生し、そこでクエリをトラブルシューティングしてから、その周りのコードの複雑さが増してクエリを実行できるはずです。

于 2009-07-21T18:51:20.907 に答える
0

INSERT INTO ステートメント (Microsoft Access SQL)

SQL INSERT ステートメントが正しくありません。次のようにする必要があります。

INSERT INTO Records SELECT * FROM [Records_New];

使用する必要があるものは次のとおりです。

CStr("INSERT INTO " & TName & " SELECT * FROM [" & TName & "_New)"];")
于 2009-07-21T19:02:47.030 に答える
-1

多分タイマーはparensが必要ですか?

QueryTimer = Timer()
于 2009-07-21T18:39:03.943 に答える