ネストされたサブクエリを使用したかなり複雑なSQLクエリがあります。 Microsoft Queryでパラメータを使用しようとすると、グラフィカルに表現できないクエリでパラメータを使用できます。だから別のオプションが必要です。私はあなたの文字列としてセルにSQLクエリを配置し、マクロを実行することができると思う。どのように私はこれを行うことができる任意のアイデア?サブクエリでSQLクエリのパラメータを使用する
おかげ
-Jesse
ネストされたサブクエリを使用したかなり複雑なSQLクエリがあります。 Microsoft Queryでパラメータを使用しようとすると、グラフィカルに表現できないクエリでパラメータを使用できます。だから別のオプションが必要です。私はあなたの文字列としてセルにSQLクエリを配置し、マクロを実行することができると思う。どのように私はこれを行うことができる任意のアイデア?サブクエリでSQLクエリのパラメータを使用する
おかげ
-Jesse
は、ここで私はExcel 2007でMicrosoft Queryでの制限を回避するために行うものです。
SELECT NULL AS Test
、)ダミーのクエリを生成マイクロソフトでそれを照会してワークシートに挿入します。?
'規則を使用して、必要なクエリを書き出すか貼り付け、[OK]をクリックします。考えられるのは、MSクエリが提供するGUIをバイパスすることです。基本的なエンジンにはないいくつかの制限があります。
これは多くの複雑なクエリで使用できますが、すべてではありません。 MS Queryがまったく消化することを拒否するクエリに遭遇すると、クエリをリファクタリングして(実行可能な場合)、またはSQLサーバー上でVIEW
を作成し、それに対してクエリを実行します。
残念ながら、ほとんどのクエリでは機能しません。多くのクエリがビューに変換されるのには必ずしも適していません。私が使用
主な代替マクロはコード
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
を使用することで、単純なデータセット
を返すためコネクションプロパティボタンをクリックし、定義タブをクリックします。コマンドテキストのセクション:
EXEC yourprocedure @DATEFROM = ?, @DATETO = ?
?あなたが望む細胞に
チャームのように働いた。回避策をありがとう – jomille