2016-05-27 44 views
0

2498エラーが発生しましたが、実際にはその理由がわかりません。私はそれはので、私は、クエリを作成するために作成された非常に長い文字列を使用して起こった実行時エラー2498 VBAで追加テーブルとクエリテーブルクエリを作成しました

DoCmd.OpenQuery qdfNew、acNormal

... VBAで文字列を構築することだし、次のコード行でエラーを取得していますできるだけコードを簡素化して、まだエラーが発生しています。ここで

は、


Option Compare Database 

Option Explicit 
Dim dbsFootball As Database 
Dim strInsertSQL, strSelectSQL, strIntoSQL, strFromSQL, strOrderSQL, strSQL As String 
Dim qdfNew As QueryDef 

Sub CreateFormattedData() 

Set dbsFootball = CurrentDb() 
strSelectSQL = "" 
strIntoSQL = "" 
strFromSQL = "" 
strOrderSQL = "" 
strSQL = "" 

strSelectSQL = "SELECT [tbl_Raw_League_Data].[Season]" 
strIntoSQL = "INTO [tbl_Manip Data]" 
strFromSQL = "FROM [tbl_Raw_League_Data]" _ 
    + "LEFT JOIN Referees ON [tbl_Raw_League_Data].[Referee] = Referees.[Referee from Source Data]" 
strSQL = strSelectSQL + " " + strIntoSQL + " " + strFromSQL + " " + strOrderSQL 
On Error Resume Next     ' If query doesn't exist, error won't stop execution 
DoCmd.DeleteObject acQuery, "pgmqry_Create Table tbl_Manip" 
On Error GoTo 0       ' Reset error handler 
Set qdfNew = dbsFootball.CreateQueryDef("pgmqry_Create Table tbl_Manip", strSQL) 
DoCmd.OpenQuery qdfNew, acNormal 

End Sub 

ソースフィールド、[tbl_Raw_League_Data]。[シーズン] ...コードです( "ショート・テキスト" データ型でありますフィールドサイズ= 7)。

VBAコードを終了し、コードによって作成されたクエリを実行すると、明らかなエラーがなく正常に動作します。ただし、VBAコード内からクエリを実行することはありません。

追加クエリに対して「INSERT INTO」を使用すると、もともとエラー2498が発生しましたが、コード実行時にテーブルを簡単に再作成できる可能性があることがわかりました。

私は迷っていますし、いくつかのアイデアに感謝します!事前に

おかげで、 ジェイソン

答えて

0

それが保存されたクエリオブジェクトの文字列参照名を期待するときは、DoCmd.OpenQueryにクエリ定義オブジェクトを渡しています。 @HansUpが示唆するように、

dbsFootball.Execute strSQL, dbFailOnError 

またはクエリ定義オブジェクトを持つ:クエリ定義の必要性をバイパスし、あるいは、

DoCmd.OpenQuery qdfNew.Name, acNormal 

SQL文字列変数を使用して、データベース・オブジェクトから.Execute次のコマンドを使用します。クエリ定義のNameプロパティを使用することを検討してくださいアクションクエリであるため、単純に直接実行します。

qdfNew.Execute dbFailOnError 

上記の2つのオプションは、 e正規のMS Accessのディスカッション。stored vs VBA string queryを使用しています。前者はプリコンパイルされ、クエリー・オプティマイザ・キャッシング・ベスト・プランで実行されますが、後者はSQLを動的に作成できます(両方ともパラメータで渡すことができるため、SELECTFROMおよびJOIN句のような構造コンポーネント)。あなたのコードスニペットから、VBAで即座に構築する必要なしに、事前にSQLクエリを保存し、DoCmd.OpenQueryで呼び出すことを検討してください。

+0

アフェア、ありがとうございました。これは私が.Executeに出会った最初のことで、チャンピオンのように機能します! – CantonJason

関連する問題