2011-01-28 20 views
3

ネストされたサブクエリを使用したかなり複雑なSQLクエリがあります。 Microsoft Queryでパラメータを使用しようとすると、グラフィカルに表現できないクエリでパラメータを使用できます。だから別のオプションが必要です。私はあなたの文字列としてセルにSQLクエリを配置し、マクロを実行することができると思う。どのように私はこれを行うことができる任意のアイデア?サブクエリでSQLクエリのパラメータを使用する

おかげ

-Jesse

答えて

1

は、ここで私はExcel 2007でMicrosoft Queryでの制限を回避するために行うものです。

  1. Aは、(例えばSELECT NULL AS Test、)ダミーのクエリを生成マイクロソフトでそれを照会してワークシートに挿入します。
  2. MS Queryが挿入したテーブルを右クリックし、[テーブル] - [外部データのプロパティの編集]をクリックします。
  3. [接続プロパティ]ボタンをクリックし、[定義]タブをクリックします。
  4. コマンドテキストセクションで、パラメータに通常の '?'規則を使用して、必要なクエリを書き出すか貼り付け、[OK]をクリックします。
  5. [OK]をクリックして、[外部データのプロパティ]ウィンドウを終了します。
  6. テーブルをもう一度右クリックし、[テーブル] - > [パラメータ]を選択して、通常の方法でパラメータをバインドします。

考えられるのは、MSクエリが提供するGUIをバイパスすることです。基本的なエンジンにはないいくつかの制限があります。

これは多くの複雑なクエリで使用できますが、すべてではありません。 MS Queryがまったく消化することを拒否するクエリに遭遇すると、クエリをリファクタリングして(実行可能な場合)、またはSQLサーバー上でVIEWを作成し、それに対してクエリを実行します。

+0

チャームのように働いた。回避策をありがとう – jomille

0

残念ながら、ほとんどのクエリでは機能しません。多くのクエリがビューに変換されるのには必ずしも適していません。私が使用

主な代替マクロはコード

Dim Con As New ADODB.Connection 
Dim RS As New ADODB.Recordset 
Dim server, Database As String 
Dim Data as Worksheet 

Set data = ThisWorkBook.Worksheets("data") 

'rename field here and elsewhere to your variable eg SD or StartDate 
Dim field as string 

server = "servername" 
Database = "database" 

'set connection string 

If Con.State <> 1 Then 
Con.ConnectionString = "Provider=SQLOLEDB;Data Source=" & server & ";Initial Catalog=" & Database & ";Integrated Security=SSPI;" 


'this is just setting the connection time out to infinite 
setcono: 
Con.ConnectionTimeout = 0 
Con.CommandTimeout = 0 


'this is making sure it set the connection time out to infinite 
If Con.ConnectionTimeout > 0 Then GoTo setcono 
If Con.CommandTimeout > 0 Then GoTo setcono 

Con.Open 

Set oRS = New ADODB.Recordset 
oRS.ActiveConnection = Con 

field = Range("A2").value 

oRS.Source = "YOUR SQL QUERY " 
oRS.Source = oRS.Source & " WHERE field = '" & field & "'" 

oRS.Open 
data.Range("A2").CopyFromRecordset oRS 
End If 
oRS.Close 
Con.Close 
If Not oRS Is Nothing Then Set oRS = Nothing 
If Not Con Is Nothing Then Set oCon = Nothing 

を返すようになっている私はちょうどのためにイライラ作成マクロを見つけるように私はそれがより複雑なクエリのためのエラーを返すバグを修正するには、Microsoftが大好きですこの問題を解決する別の方法は、適切なテーブルの上に、次にストアドプロシージャ

CREATE PROCEDURE [dbo].[yourprocedure] @DATEFROM DATETIME, @DATETO DATETIME 
AS 


SELECT Query 
where date >= @datefrom 
and date <= @dateto 

を使用することで、単純なデータセット

0

を返すためコネクションプロパティボタンをクリックし、定義タブをクリックします。コマンドテキストのセクション:

EXEC yourprocedure @DATEFROM = ?, @DATETO = ? 

?あなたが望む細胞に

関連する問題