2016-10-25 8 views
0
にSQLを書き込む

背景MSアクセス - VBA

のonClick()イベントがトリガされたときにSQLコードを実行MS Accessモジュールを開発します。

CODE

Dim sqlString As String 

sqlString = "SELECT [Table - Summary - All Item Forecasts, Sales, and POs].[COMPANY ID], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[COMPANY NAME], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].ITEM, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].STYLE, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].DESCRIPTION, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[SALE PRICE], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[ON-HAND QTY], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[FORECAST QTY], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[MaxOfLATEST PO DATE] " _ 
    & "FROM [Table - Active Product Catalog] " _ 
    & "LEFT JOIN [Table - Summary - All Item Forecasts, Sales, and POs] " _ 
     & "ON [Table - Active Product Catalog].STYLE = [Table - Summary - All Item Forecasts, Sales, and POs].STYLE " _ 
    & "GROUP BY [Table - Summary - All Item Forecasts, Sales, and POs].[COMPANY ID], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[COMPANY NAME] , " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].Item, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].Style, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].Description, " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[SALE PRICE], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[ON-HAND QTY], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[FORECAST QTY], " _ 
     & "[Table - Summary - All Item Forecasts, Sales, and POs].[MaxOfLATEST PO DATE]" _ 
    & "HAVING ((([Table - Summary - All Item Forecasts, Sales, and POs].[COMPANY NAME]) Like ' * ' & [Enter Company Name:] & ' * '));" 


DoCmd.RunSQL sqlString 

ERROR

実行時エラー '2342':RUNSQLアクションSQL文からなる引数が必要です。

QUESTION(S)

  1. 私は、次のtutorialに従ってもエラーを受け取りました。 RunSQLコマンドはsqlStringをSQLコマンドとして認識していないようです。しかし、私はSQLステートメントがMS Accessで正しく動作することを肯定的です。何か案は?
  2. SQLステートメントの最後の行には、MsgBoxプロンプト( "[Enter Company Name:]")があります。私はこれがSQL文を投げ捨てているかどうかはまだ分かりませんが、前述のとおり、構文はMS Accessで実行されます。プロンプトをハードコードされた値に置き換えても、同じエラーメッセージが表示されます。

注:私は最も可能性の高いcompany nameを要求inputBoxを作成し、SQL文の最後の行の中に変数を配置します。

+1

はこちらをご覧ください:http://stackoverflow.com/questions/27421873/select-query-does-not-work-when-converted-to-vba-invalid-sql-statement – OpiesDad

+0

考えてみましょうあなたのSQLでテーブルのエイリアスを使用する( 'SELECT Summary。[COMPANY ID] FROM [テーブル - 要約 - 全アイテム予測、販売、PO] ASサマリー');あなたのステートメントは短くて簡単に解析できます。 –

答えて

1

DoCmd.RunSQL documentationに記載されているように、「アクションクエリ」を実行するために使用されます。それはSQLStatementの

アクションクエリまたはデータ定義クエリのための有効なSQL文の文字列式で、です。 INSERT INTO、DELETE、SELECT ... INTO、UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE INDEX、またはDROP INDEXステートメントを使用します。上記のリストはSELECT...INTOなく普通SELECTを含むこと

注意。あなたが間... [MaxOfLATEST POのDATE]およびHAVINGスペースが不足しているあなたの最後の2行で、プレーンなSELECTを実行します。また

Dim cdb As DAO.Database 
Set cdb = CurrentDb 
Dim rst As DAO.Recordset 
Set rst = cdb.OpenRecordset(sqlString, dbOpenSnapshot) 
' loop through the Recordset contents 
-1

ような何かをする必要があるレコードセットを返すには。それはSQLとして実行しようとすると失敗します。
私はVBAの初心者ですから、数回これを打ってきました。私は実行コマンドの後にdebug.print SQLstringを置いています。

HTH、ジェニー