我有一个相当复杂的SQL查询与嵌套子查询。当我尝试在Microsoft Query中使用参数时,我说可以在不能用图形表示的查询中使用参数。所以我需要另一种选择。我认为你可以将你的SQL查询放在一个单元格中作为一个字符串,然后让一个宏运行它。任何想法我可以做到这一点?在SQL查询中使用参数与子查询
感谢
-Jesse
我有一个相当复杂的SQL查询与嵌套子查询。当我尝试在Microsoft Query中使用参数时,我说可以在不能用图形表示的查询中使用参数。所以我需要另一种选择。我认为你可以将你的SQL查询放在一个单元格中作为一个字符串,然后让一个宏运行它。任何想法我可以做到这一点?在SQL查询中使用参数与子查询
感谢
-Jesse
这里是什么,我来解决Microsoft查询的限制在Excel 2007中:
SELECT NULL AS Test
,例如)查询并将其插入到工作表中。?
'约定为参数写出或粘贴所需的查询,然后单击确定。这个想法是绕过MS Query提供的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
我很想微软修复错误,这错误的更复杂的查询返回的错误,因为我觉得它只是令人沮丧的创建宏返回一个简单的数据集
另一种方式来解决这个问题的目的是使用,然后在桌子上适当的存储过程
CREATE PROCEDURE [dbo].[yourprocedure] @DATEFROM DATETIME, @DATETO DATETIME
AS
SELECT Query
where date >= @datefrom
and date <= @dateto
连接点击连接属性按钮,然后点击定义选项卡。在命令正文部分:
EXEC yourprocedure @DATEFROM = ?, @DATETO = ?
并直接在?到你想要的细胞
工作就像一个魅力。感谢您的解决方法 – jomille 2011-02-01 02:49:04