Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ms-access/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
访问VBA SQL字符串太长_Sql_Ms Access_Excel_Query String_Vba - Fatal编程技术网

访问VBA SQL字符串太长

访问VBA SQL字符串太长,sql,ms-access,excel,query-string,vba,Sql,Ms Access,Excel,Query String,Vba,我有一个Excel 2003 VBA程序,可以通过以下方式创建SQL字符串: OrdresPlanif = "" Do While Cells(i, 1).Value <> "CODES TEMPS" noOrdre = Cells(i, 4).Value If noOrdre <> "" Then OrdresPlanif = OrdresPlanif + "(Ordre.Ordre) <> " & noOrdre &

我有一个Excel 2003 VBA程序,可以通过以下方式创建SQL字符串:

OrdresPlanif = ""
Do While Cells(i, 1).Value <> "CODES TEMPS"
    noOrdre = Cells(i, 4).Value
    If noOrdre <> "" Then
        OrdresPlanif = OrdresPlanif + "(Ordre.Ordre) <> " & noOrdre & " And " ' String for the orders shecduled
    End If
    i = i + 1
Loop
OrdresPlanif = Left(OrdresPlanif, Len(OrdresPlanif) - 5) ' Remove last "and" from string OrdresNonPlanif
SQLnonPlanif = "SELECT Ordre.Ordre, Sum(Ordre.Duree) AS SommeDeDuree" _
                & " FROM Ordre" _
                & " WHERE (((Ordre.Date) >= #" & Date1 & "# And (Ordre.Date) <= #" & Date2 & "#) AND (" & MatOrString & ") And (" & OrdresPlanif & "))" _
                & " GROUP BY Ordre.Ordre;"
Set rsNonPlanif = cn.Execute(SQLnonPlanif)
问题是,要在SQL语句中添加大约100~150个noOrdre和~15个MatOrString。从Access 2003返回到complex的错误SQL语句。我到处寻找解决方案,但人们都在谈论连接,但对我来说,这似乎不是一个可行的解决方案,因为我是从循环创建字符串的。 有办法解决这个问题吗?还是我的策略错了

[编辑]

这里我添加了一个由代码生成的示例查询。当我尝试将其粘贴到access中时,会出现相同的错误

从Ordre WHERE中选择Ordre.Ordre、SumOrdre.Duree作为Sommeduree Ordre.Date>=2011年11月7日,Ordre.Date而不是您应该在报表中使用的所有And和OR。比如说,

SELECT Ordre.Ordre, Sum(Ordre.Duree) AS SommeDeDuree 
FROM Ordre 
WHERE Ordre.Date >= #07/11/2011# 
  AND Ordre.Date <= #14/11/2011# 
  AND Ordre.Matricule In (257,516,591,...,2436,2471) 
  AND Ordre.Ordre Not In (10000477, 11146074, ... ,13101309,13212576)
GROUP BY Ordre.Ordre;
不要在语句中使用所有这些and和OR。比如说,

SELECT Ordre.Ordre, Sum(Ordre.Duree) AS SommeDeDuree 
FROM Ordre 
WHERE Ordre.Date >= #07/11/2011# 
  AND Ordre.Date <= #14/11/2011# 
  AND Ordre.Matricule In (257,516,591,...,2436,2471) 
  AND Ordre.Ordre Not In (10000477, 11146074, ... ,13101309,13212576)
GROUP BY Ordre.Ordre;

尽管Mwolfe2的解决方案是正确的,但它并不像最初有问题的SQL那样具有良好的扩展性。NOT IN表达式只允许在达到长度限制之前将更多值放入SQL字符串中

将这些值放入临时表会更具可伸缩性,尽管会更麻烦。这还允许您使用带有空值筛选器的外部联接,这可能会运行得更快,因为NOT IN方法效率低下。例如:

SELECT Ordre.Ordre, Sum(Ordre.Duree) AS SommeDeDuree

FROM Ordre LEFT JOIN TemporaryTableName
    ON Ordre.Ordre = TemporaryTableName.Ordre

WHERE Ordre.Date >= #07/11/2011#  
  AND Ordre.Date <= #14/11/2011#  
  AND Ordre.Matricule In (257,516,591,...,2436,2471)  
  AND TemporaryTableName.Ordre IS NULL

GROUP BY Ordre.Ordre; 

尽管Mwolfe2的解决方案是正确的,但它并不像最初有问题的SQL那样具有良好的扩展性。NOT IN表达式只允许在达到长度限制之前将更多值放入SQL字符串中

将这些值放入临时表会更具可伸缩性,尽管会更麻烦。这还允许您使用带有空值筛选器的外部联接,这可能会运行得更快,因为NOT IN方法效率低下。例如:

SELECT Ordre.Ordre, Sum(Ordre.Duree) AS SommeDeDuree

FROM Ordre LEFT JOIN TemporaryTableName
    ON Ordre.Ordre = TemporaryTableName.Ordre

WHERE Ordre.Date >= #07/11/2011#  
  AND Ordre.Date <= #14/11/2011#  
  AND Ordre.Matricule In (257,516,591,...,2436,2471)  
  AND TemporaryTableName.Ordre IS NULL

GROUP BY Ordre.Ordre; 

在同一SQL语句中引用Excel工作表和Access数据库绝非不可能

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim strExcel As String
Dim s As String
Dim i As Integer, j As Integer

strFile = "Z:\docs\LTD.mdb"

''Access and Excel 2007 / 2010 
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strExcel = "[Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=Z:\Docs\Book1.xlsm]"

strSQL = "SELECT * " _
       & "FROM New a " _
       & "INNER JOIN " & strExcel & ".[Sheet1$] b " _
       & "ON a.ID = b.ID"

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

在同一SQL语句中引用Excel工作表和Access数据库绝非不可能

Dim cn As Object
Dim rs As Object
Dim strFile As String
Dim strCon As String
Dim strSQL As String
Dim strExcel As String
Dim s As String
Dim i As Integer, j As Integer

strFile = "Z:\docs\LTD.mdb"

''Access and Excel 2007 / 2010 
strCon = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strFile

''Late binding, so no reference is needed

Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")

cn.Open strCon

strExcel = "[Excel 12.0 Xml;HDR=YES;IMEX=2;ACCDB=YES;DATABASE=Z:\Docs\Book1.xlsm]"

strSQL = "SELECT * " _
       & "FROM New a " _
       & "INNER JOIN " & strExcel & ".[Sheet1$] b " _
       & "ON a.ID = b.ID"

rs.Open strSQL, cn, 3, 3


''Pick a suitable empty worksheet for the results

Worksheets("Sheet3").Cells(2, 1).CopyFromRecordset rs

''Tidy up
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing

<>而不是使用动态SQL,即在飞行中连接值,考虑创建一个具有大量强类型参数的过程,该参数默认为空。这里有一个快速演示

我已经用很长的篇幅写出了参数名,但当然可以在循环中完成。只需复制并粘贴到任何VBA代码模块中,无需参考,例如使用Excel:

Sub AccessManyParams()

  On Error Resume Next
  Kill Environ$("temp") & "\DropMe.mdb"
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")

  With cat
    .Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"

    With .ActiveConnection

      Dim Sql As String

      Sql = _
      "CREATE TABLE Ordre (Ordre INTEGER NOT NULL UNIQUE);"
      .Execute Sql

      Sql = _
      "INSERT INTO Ordre VALUES (55);"
      .Execute Sql

      Sql = _
      "INSERT INTO Ordre VALUES (22);"
      .Execute Sql

      Sql = vbNullString
      Sql = Sql & "CREATE PROCEDURE ChercherOrdres ( "
      Sql = Sql & "ordre_001 INTEGER = NULL, "
      Sql = Sql & "ordre_002 INTEGER = NULL, "
      Sql = Sql & "ordre_003 INTEGER = NULL, "
      Sql = Sql & "ordre_004 INTEGER = NULL, "
      Sql = Sql & "ordre_005 INTEGER = NULL, "
      Sql = Sql & "ordre_006 INTEGER = NULL, "
      Sql = Sql & "ordre_007 INTEGER = NULL, "
      Sql = Sql & "ordre_008 INTEGER = NULL, "
      Sql = Sql & "ordre_009 INTEGER = NULL, "
      Sql = Sql & "ordre_010 INTEGER = NULL, "
      Sql = Sql & "ordre_011 INTEGER = NULL, "
      Sql = Sql & "ordre_012 INTEGER = NULL, "
      Sql = Sql & "ordre_013 INTEGER = NULL, "
      Sql = Sql & "ordre_014 INTEGER = NULL, "
      Sql = Sql & "ordre_015 INTEGER = NULL, "
      Sql = Sql & "ordre_016 INTEGER = NULL, "
      Sql = Sql & "ordre_017 INTEGER = NULL, "
      Sql = Sql & "ordre_018 INTEGER = NULL, "
      Sql = Sql & "ordre_019 INTEGER = NULL, "
      Sql = Sql & "ordre_020 INTEGER = NULL, "
      Sql = Sql & "ordre_021 INTEGER = NULL, "
      Sql = Sql & "ordre_022 INTEGER = NULL, "
      Sql = Sql & "ordre_023 INTEGER = NULL, "
      Sql = Sql & "ordre_024 INTEGER = NULL, "
      Sql = Sql & "ordre_025 INTEGER = NULL, "
      Sql = Sql & "ordre_026 INTEGER = NULL, "
      Sql = Sql & "ordre_027 INTEGER = NULL, "
      Sql = Sql & "ordre_028 INTEGER = NULL, "
      Sql = Sql & "ordre_029 INTEGER = NULL, "
      Sql = Sql & "ordre_030 INTEGER = NULL, "
      Sql = Sql & "ordre_031 INTEGER = NULL, "
      Sql = Sql & "ordre_032 INTEGER = NULL, "
      Sql = Sql & "ordre_033 INTEGER = NULL, "
      Sql = Sql & "ordre_034 INTEGER = NULL, "
      Sql = Sql & "ordre_035 INTEGER = NULL, "
      Sql = Sql & "ordre_036 INTEGER = NULL, "
      Sql = Sql & "ordre_037 INTEGER = NULL, "
      Sql = Sql & "ordre_038 INTEGER = NULL, "
      Sql = Sql & "ordre_039 INTEGER = NULL, "
      Sql = Sql & "ordre_040 INTEGER = NULL, "
      Sql = Sql & "ordre_041 INTEGER = NULL, "
      Sql = Sql & "ordre_042 INTEGER = NULL, "
      Sql = Sql & "ordre_043 INTEGER = NULL, "
      Sql = Sql & "ordre_044 INTEGER = NULL, "
      Sql = Sql & "ordre_045 INTEGER = NULL, "
      Sql = Sql & "ordre_046 INTEGER = NULL, "
      Sql = Sql & "ordre_047 INTEGER = NULL, "
      Sql = Sql & "ordre_048 INTEGER = NULL, "
      Sql = Sql & "ordre_049 INTEGER = NULL, "
      Sql = Sql & "ordre_050 INTEGER = NULL, "
      Sql = Sql & "ordre_051 INTEGER = NULL, "
      Sql = Sql & "ordre_052 INTEGER = NULL, "
      Sql = Sql & "ordre_053 INTEGER = NULL, "
      Sql = Sql & "ordre_054 INTEGER = NULL, "
      Sql = Sql & "ordre_055 INTEGER = NULL, "
      Sql = Sql & "ordre_056 INTEGER = NULL, "
      Sql = Sql & "ordre_057 INTEGER = NULL, "
      Sql = Sql & "ordre_058 INTEGER = NULL, "
      Sql = Sql & "ordre_059 INTEGER = NULL, "
      Sql = Sql & "ordre_060 INTEGER = NULL, "
      Sql = Sql & "ordre_061 INTEGER = NULL, "
      Sql = Sql & "ordre_062 INTEGER = NULL, "
      Sql = Sql & "ordre_063 INTEGER = NULL, "
      Sql = Sql & "ordre_064 INTEGER = NULL, "
      Sql = Sql & "ordre_065 INTEGER = NULL, "
      Sql = Sql & "ordre_066 INTEGER = NULL, "
      Sql = Sql & "ordre_067 INTEGER = NULL, "
      Sql = Sql & "ordre_068 INTEGER = NULL, "
      Sql = Sql & "ordre_069 INTEGER = NULL, "
      Sql = Sql & "ordre_070 INTEGER = NULL, "
      Sql = Sql & "ordre_071 INTEGER = NULL, "
      Sql = Sql & "ordre_072 INTEGER = NULL, "
      Sql = Sql & "ordre_073 INTEGER = NULL, "
      Sql = Sql & "ordre_074 INTEGER = NULL, "
      Sql = Sql & "ordre_075 INTEGER = NULL, "
      Sql = Sql & "ordre_076 INTEGER = NULL, "
      Sql = Sql & "ordre_077 INTEGER = NULL, "
      Sql = Sql & "ordre_078 INTEGER = NULL, "
      Sql = Sql & "ordre_079 INTEGER = NULL, "
      Sql = Sql & "ordre_080 INTEGER = NULL, "
      Sql = Sql & "ordre_081 INTEGER = NULL, "
      Sql = Sql & "ordre_082 INTEGER = NULL, "
      Sql = Sql & "ordre_083 INTEGER = NULL, "
      Sql = Sql & "ordre_084 INTEGER = NULL, "
      Sql = Sql & "ordre_085 INTEGER = NULL, "
      Sql = Sql & "ordre_086 INTEGER = NULL, "
      Sql = Sql & "ordre_087 INTEGER = NULL, "
      Sql = Sql & "ordre_088 INTEGER = NULL, "
      Sql = Sql & "ordre_089 INTEGER = NULL, "
      Sql = Sql & "ordre_090 INTEGER = NULL, "
      Sql = Sql & "ordre_091 INTEGER = NULL, "
      Sql = Sql & "ordre_092 INTEGER = NULL, "
      Sql = Sql & "ordre_093 INTEGER = NULL, "
      Sql = Sql & "ordre_094 INTEGER = NULL, "
      Sql = Sql & "ordre_095 INTEGER = NULL, "
      Sql = Sql & "ordre_096 INTEGER = NULL, "
      Sql = Sql & "ordre_097 INTEGER = NULL, "
      Sql = Sql & "ordre_098 INTEGER = NULL, "
      Sql = Sql & "ordre_099 INTEGER = NULL, "
      Sql = Sql & "ordre_100 INTEGER = NULL, "
      Sql = Sql & "ordre_101 INTEGER = NULL, "
      Sql = Sql & "ordre_102 INTEGER = NULL, "
      Sql = Sql & "ordre_103 INTEGER = NULL, "
      Sql = Sql & "ordre_104 INTEGER = NULL, "
      Sql = Sql & "ordre_105 INTEGER = NULL, "
      Sql = Sql & "ordre_106 INTEGER = NULL, "
      Sql = Sql & "ordre_107 INTEGER = NULL, "
      Sql = Sql & "ordre_108 INTEGER = NULL, "
      Sql = Sql & "ordre_109 INTEGER = NULL, "
      Sql = Sql & "ordre_110 INTEGER = NULL, "
      Sql = Sql & "ordre_111 INTEGER = NULL, "
      Sql = Sql & "ordre_112 INTEGER = NULL, "
      Sql = Sql & "ordre_113 INTEGER = NULL, "
      Sql = Sql & "ordre_114 INTEGER = NULL, "
      Sql = Sql & "ordre_115 INTEGER = NULL, "
      Sql = Sql & "ordre_116 INTEGER = NULL, "
      Sql = Sql & "ordre_117 INTEGER = NULL, "
      Sql = Sql & "ordre_118 INTEGER = NULL, "
      Sql = Sql & "ordre_119 INTEGER = NULL, "
      Sql = Sql & "ordre_120 INTEGER = NULL, "
      Sql = Sql & "ordre_121 INTEGER = NULL, "
      Sql = Sql & "ordre_122 INTEGER = NULL, "
      Sql = Sql & "ordre_123 INTEGER = NULL, "
      Sql = Sql & "ordre_124 INTEGER = NULL, "
      Sql = Sql & "ordre_125 INTEGER = NULL, "
      Sql = Sql & "ordre_126 INTEGER = NULL, "
      Sql = Sql & "ordre_127 INTEGER = NULL, "
      Sql = Sql & "ordre_128 INTEGER = NULL, "
      Sql = Sql & "ordre_129 INTEGER = NULL, "
      Sql = Sql & "ordre_130 INTEGER = NULL, "
      Sql = Sql & "ordre_131 INTEGER = NULL, "
      Sql = Sql & "ordre_132 INTEGER = NULL, "
      Sql = Sql & "ordre_133 INTEGER = NULL, "
      Sql = Sql & "ordre_134 INTEGER = NULL, "
      Sql = Sql & "ordre_135 INTEGER = NULL, "
      Sql = Sql & "ordre_136 INTEGER = NULL, "
      Sql = Sql & "ordre_137 INTEGER = NULL, "
      Sql = Sql & "ordre_138 INTEGER = NULL, "
      Sql = Sql & "ordre_139 INTEGER = NULL, "
      Sql = Sql & "ordre_140 INTEGER = NULL, "
      Sql = Sql & "ordre_141 INTEGER = NULL, "
      Sql = Sql & "ordre_142 INTEGER = NULL, "
      Sql = Sql & "ordre_143 INTEGER = NULL, "
      Sql = Sql & "ordre_144 INTEGER = NULL, "
      Sql = Sql & "ordre_145 INTEGER = NULL, "
      Sql = Sql & "ordre_146 INTEGER = NULL, "
      Sql = Sql & "ordre_147 INTEGER = NULL, "
      Sql = Sql & "ordre_148 INTEGER = NULL, "
      Sql = Sql & "ordre_149 INTEGER = NULL, "
      Sql = Sql & "ordre_150 INTEGER = NULL) AS "
      Sql = Sql & "SELECT * FROM Ordre WHERE Ordre NOT IN ("
      Sql = Sql & "ordre_001, "
      Sql = Sql & "ordre_002, "
      Sql = Sql & "ordre_003, "
      Sql = Sql & "ordre_004, "
      Sql = Sql & "ordre_005, "
      Sql = Sql & "ordre_006, "
      Sql = Sql & "ordre_007, "
      Sql = Sql & "ordre_008, "
      Sql = Sql & "ordre_009, "
      Sql = Sql & "ordre_010, "
      Sql = Sql & "ordre_011, "
      Sql = Sql & "ordre_012, "
      Sql = Sql & "ordre_013, "
      Sql = Sql & "ordre_014, "
      Sql = Sql & "ordre_015, "
      Sql = Sql & "ordre_016, "
      Sql = Sql & "ordre_017, "
      Sql = Sql & "ordre_018, "
      Sql = Sql & "ordre_019, "
      Sql = Sql & "ordre_020, "
      Sql = Sql & "ordre_021, "
      Sql = Sql & "ordre_022, "
      Sql = Sql & "ordre_023, "
      Sql = Sql & "ordre_024, "
      Sql = Sql & "ordre_025, "
      Sql = Sql & "ordre_026, "
      Sql = Sql & "ordre_027, "
      Sql = Sql & "ordre_028, "
      Sql = Sql & "ordre_029, "
      Sql = Sql & "ordre_030, "
      Sql = Sql & "ordre_031, "
      Sql = Sql & "ordre_032, "
      Sql = Sql & "ordre_033, "
      Sql = Sql & "ordre_034, "
      Sql = Sql & "ordre_035, "
      Sql = Sql & "ordre_036, "
      Sql = Sql & "ordre_037, "
      Sql = Sql & "ordre_038, "
      Sql = Sql & "ordre_039, "
      Sql = Sql & "ordre_040, "
      Sql = Sql & "ordre_041, "
      Sql = Sql & "ordre_042, "
      Sql = Sql & "ordre_043, "
      Sql = Sql & "ordre_044, "
      Sql = Sql & "ordre_045, "
      Sql = Sql & "ordre_046, "
      Sql = Sql & "ordre_047, "
      Sql = Sql & "ordre_048, "
      Sql = Sql & "ordre_049, "
      Sql = Sql & "ordre_050, "
      Sql = Sql & "ordre_051, "
      Sql = Sql & "ordre_052, "
      Sql = Sql & "ordre_053, "
      Sql = Sql & "ordre_054, "
      Sql = Sql & "ordre_055, "
      Sql = Sql & "ordre_056, "
      Sql = Sql & "ordre_057, "
      Sql = Sql & "ordre_058, "
      Sql = Sql & "ordre_059, "
      Sql = Sql & "ordre_060, "
      Sql = Sql & "ordre_061, "
      Sql = Sql & "ordre_062, "
      Sql = Sql & "ordre_063, "
      Sql = Sql & "ordre_064, "
      Sql = Sql & "ordre_065, "
      Sql = Sql & "ordre_066, "
      Sql = Sql & "ordre_067, "
      Sql = Sql & "ordre_068, "
      Sql = Sql & "ordre_069, "
      Sql = Sql & "ordre_070, "
      Sql = Sql & "ordre_071, "
      Sql = Sql & "ordre_072, "
      Sql = Sql & "ordre_073, "
      Sql = Sql & "ordre_074, "
      Sql = Sql & "ordre_075, "
      Sql = Sql & "ordre_076, "
      Sql = Sql & "ordre_077, "
      Sql = Sql & "ordre_078, "
      Sql = Sql & "ordre_079, "
      Sql = Sql & "ordre_080, "
      Sql = Sql & "ordre_081, "
      Sql = Sql & "ordre_082, "
      Sql = Sql & "ordre_083, "
      Sql = Sql & "ordre_084, "
      Sql = Sql & "ordre_085, "
      Sql = Sql & "ordre_086, "
      Sql = Sql & "ordre_087, "
      Sql = Sql & "ordre_088, "
      Sql = Sql & "ordre_089, "
      Sql = Sql & "ordre_090, "
      Sql = Sql & "ordre_091, "
      Sql = Sql & "ordre_092, "
      Sql = Sql & "ordre_093, "
      Sql = Sql & "ordre_094, "
      Sql = Sql & "ordre_095, "
      Sql = Sql & "ordre_096, "
      Sql = Sql & "ordre_097, "
      Sql = Sql & "ordre_098, "
      Sql = Sql & "ordre_099, "
      Sql = Sql & "ordre_100, "
      Sql = Sql & "ordre_101, "
      Sql = Sql & "ordre_102, "
      Sql = Sql & "ordre_103, "
      Sql = Sql & "ordre_104, "
      Sql = Sql & "ordre_105, "
      Sql = Sql & "ordre_106, "
      Sql = Sql & "ordre_107, "
      Sql = Sql & "ordre_108, "
      Sql = Sql & "ordre_109, "
      Sql = Sql & "ordre_110, "
      Sql = Sql & "ordre_111, "
      Sql = Sql & "ordre_112, "
      Sql = Sql & "ordre_113, "
      Sql = Sql & "ordre_114, "
      Sql = Sql & "ordre_115, "
      Sql = Sql & "ordre_116, "
      Sql = Sql & "ordre_117, "
      Sql = Sql & "ordre_118, "
      Sql = Sql & "ordre_119, "
      Sql = Sql & "ordre_120, "
      Sql = Sql & "ordre_121, "
      Sql = Sql & "ordre_122, "
      Sql = Sql & "ordre_123, "
      Sql = Sql & "ordre_124, "
      Sql = Sql & "ordre_125, "
      Sql = Sql & "ordre_126, "
      Sql = Sql & "ordre_127, "
      Sql = Sql & "ordre_128, "
      Sql = Sql & "ordre_129, "
      Sql = Sql & "ordre_130, "
      Sql = Sql & "ordre_131, "
      Sql = Sql & "ordre_132, "
      Sql = Sql & "ordre_133, "
      Sql = Sql & "ordre_134, "
      Sql = Sql & "ordre_135, "
      Sql = Sql & "ordre_136, "
      Sql = Sql & "ordre_137, "
      Sql = Sql & "ordre_138, "
      Sql = Sql & "ordre_139, "
      Sql = Sql & "ordre_140, "
      Sql = Sql & "ordre_141, "
      Sql = Sql & "ordre_142, "
      Sql = Sql & "ordre_143, "
      Sql = Sql & "ordre_144, "
      Sql = Sql & "ordre_145, "
      Sql = Sql & "ordre_146, "
      Sql = Sql & "ordre_147, "
      Sql = Sql & "ordre_148, "
      Sql = Sql & "ordre_149, "
      Sql = Sql & "ordre_150);"

      .Execute Sql
    End With

    Dim cmd
    Set cmd = CreateObject("ADODB.Command")
    Set cmd.ActiveConnection = .ActiveConnection

    With cmd
      .CommandType = adCmdStoredProc
      .CommandText = "ChercherOrdres"
      .Parameters.Append .CreateParameter("ordre_091", adInteger, , , "22")
      .Parameters.Append .CreateParameter("ordre_147", adInteger, , , "-99")

      Dim rs
      Set rs = .Execute
      MsgBox rs.GetString

    End With
    Set .ActiveConnection = Nothing
  End With
End Sub

<>而不是使用动态SQL,即在飞行中连接值,考虑创建一个具有大量强类型参数的过程,该参数默认为空。这里有一个快速演示

我已经用很长的篇幅写出了参数名,但当然可以在循环中完成。只需复制并粘贴到任何VBA代码模块中,无需参考,例如使用Excel:

Sub AccessManyParams()

  On Error Resume Next
  Kill Environ$("temp") & "\DropMe.mdb"
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")

  With cat
    .Create _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & _
        Environ$("temp") & "\DropMe.mdb"

    With .ActiveConnection

      Dim Sql As String

      Sql = _
      "CREATE TABLE Ordre (Ordre INTEGER NOT NULL UNIQUE);"
      .Execute Sql

      Sql = _
      "INSERT INTO Ordre VALUES (55);"
      .Execute Sql

      Sql = _
      "INSERT INTO Ordre VALUES (22);"
      .Execute Sql

      Sql = vbNullString
      Sql = Sql & "CREATE PROCEDURE ChercherOrdres ( "
      Sql = Sql & "ordre_001 INTEGER = NULL, "
      Sql = Sql & "ordre_002 INTEGER = NULL, "
      Sql = Sql & "ordre_003 INTEGER = NULL, "
      Sql = Sql & "ordre_004 INTEGER = NULL, "
      Sql = Sql & "ordre_005 INTEGER = NULL, "
      Sql = Sql & "ordre_006 INTEGER = NULL, "
      Sql = Sql & "ordre_007 INTEGER = NULL, "
      Sql = Sql & "ordre_008 INTEGER = NULL, "
      Sql = Sql & "ordre_009 INTEGER = NULL, "
      Sql = Sql & "ordre_010 INTEGER = NULL, "
      Sql = Sql & "ordre_011 INTEGER = NULL, "
      Sql = Sql & "ordre_012 INTEGER = NULL, "
      Sql = Sql & "ordre_013 INTEGER = NULL, "
      Sql = Sql & "ordre_014 INTEGER = NULL, "
      Sql = Sql & "ordre_015 INTEGER = NULL, "
      Sql = Sql & "ordre_016 INTEGER = NULL, "
      Sql = Sql & "ordre_017 INTEGER = NULL, "
      Sql = Sql & "ordre_018 INTEGER = NULL, "
      Sql = Sql & "ordre_019 INTEGER = NULL, "
      Sql = Sql & "ordre_020 INTEGER = NULL, "
      Sql = Sql & "ordre_021 INTEGER = NULL, "
      Sql = Sql & "ordre_022 INTEGER = NULL, "
      Sql = Sql & "ordre_023 INTEGER = NULL, "
      Sql = Sql & "ordre_024 INTEGER = NULL, "
      Sql = Sql & "ordre_025 INTEGER = NULL, "
      Sql = Sql & "ordre_026 INTEGER = NULL, "
      Sql = Sql & "ordre_027 INTEGER = NULL, "
      Sql = Sql & "ordre_028 INTEGER = NULL, "
      Sql = Sql & "ordre_029 INTEGER = NULL, "
      Sql = Sql & "ordre_030 INTEGER = NULL, "
      Sql = Sql & "ordre_031 INTEGER = NULL, "
      Sql = Sql & "ordre_032 INTEGER = NULL, "
      Sql = Sql & "ordre_033 INTEGER = NULL, "
      Sql = Sql & "ordre_034 INTEGER = NULL, "
      Sql = Sql & "ordre_035 INTEGER = NULL, "
      Sql = Sql & "ordre_036 INTEGER = NULL, "
      Sql = Sql & "ordre_037 INTEGER = NULL, "
      Sql = Sql & "ordre_038 INTEGER = NULL, "
      Sql = Sql & "ordre_039 INTEGER = NULL, "
      Sql = Sql & "ordre_040 INTEGER = NULL, "
      Sql = Sql & "ordre_041 INTEGER = NULL, "
      Sql = Sql & "ordre_042 INTEGER = NULL, "
      Sql = Sql & "ordre_043 INTEGER = NULL, "
      Sql = Sql & "ordre_044 INTEGER = NULL, "
      Sql = Sql & "ordre_045 INTEGER = NULL, "
      Sql = Sql & "ordre_046 INTEGER = NULL, "
      Sql = Sql & "ordre_047 INTEGER = NULL, "
      Sql = Sql & "ordre_048 INTEGER = NULL, "
      Sql = Sql & "ordre_049 INTEGER = NULL, "
      Sql = Sql & "ordre_050 INTEGER = NULL, "
      Sql = Sql & "ordre_051 INTEGER = NULL, "
      Sql = Sql & "ordre_052 INTEGER = NULL, "
      Sql = Sql & "ordre_053 INTEGER = NULL, "
      Sql = Sql & "ordre_054 INTEGER = NULL, "
      Sql = Sql & "ordre_055 INTEGER = NULL, "
      Sql = Sql & "ordre_056 INTEGER = NULL, "
      Sql = Sql & "ordre_057 INTEGER = NULL, "
      Sql = Sql & "ordre_058 INTEGER = NULL, "
      Sql = Sql & "ordre_059 INTEGER = NULL, "
      Sql = Sql & "ordre_060 INTEGER = NULL, "
      Sql = Sql & "ordre_061 INTEGER = NULL, "
      Sql = Sql & "ordre_062 INTEGER = NULL, "
      Sql = Sql & "ordre_063 INTEGER = NULL, "
      Sql = Sql & "ordre_064 INTEGER = NULL, "
      Sql = Sql & "ordre_065 INTEGER = NULL, "
      Sql = Sql & "ordre_066 INTEGER = NULL, "
      Sql = Sql & "ordre_067 INTEGER = NULL, "
      Sql = Sql & "ordre_068 INTEGER = NULL, "
      Sql = Sql & "ordre_069 INTEGER = NULL, "
      Sql = Sql & "ordre_070 INTEGER = NULL, "
      Sql = Sql & "ordre_071 INTEGER = NULL, "
      Sql = Sql & "ordre_072 INTEGER = NULL, "
      Sql = Sql & "ordre_073 INTEGER = NULL, "
      Sql = Sql & "ordre_074 INTEGER = NULL, "
      Sql = Sql & "ordre_075 INTEGER = NULL, "
      Sql = Sql & "ordre_076 INTEGER = NULL, "
      Sql = Sql & "ordre_077 INTEGER = NULL, "
      Sql = Sql & "ordre_078 INTEGER = NULL, "
      Sql = Sql & "ordre_079 INTEGER = NULL, "
      Sql = Sql & "ordre_080 INTEGER = NULL, "
      Sql = Sql & "ordre_081 INTEGER = NULL, "
      Sql = Sql & "ordre_082 INTEGER = NULL, "
      Sql = Sql & "ordre_083 INTEGER = NULL, "
      Sql = Sql & "ordre_084 INTEGER = NULL, "
      Sql = Sql & "ordre_085 INTEGER = NULL, "
      Sql = Sql & "ordre_086 INTEGER = NULL, "
      Sql = Sql & "ordre_087 INTEGER = NULL, "
      Sql = Sql & "ordre_088 INTEGER = NULL, "
      Sql = Sql & "ordre_089 INTEGER = NULL, "
      Sql = Sql & "ordre_090 INTEGER = NULL, "
      Sql = Sql & "ordre_091 INTEGER = NULL, "
      Sql = Sql & "ordre_092 INTEGER = NULL, "
      Sql = Sql & "ordre_093 INTEGER = NULL, "
      Sql = Sql & "ordre_094 INTEGER = NULL, "
      Sql = Sql & "ordre_095 INTEGER = NULL, "
      Sql = Sql & "ordre_096 INTEGER = NULL, "
      Sql = Sql & "ordre_097 INTEGER = NULL, "
      Sql = Sql & "ordre_098 INTEGER = NULL, "
      Sql = Sql & "ordre_099 INTEGER = NULL, "
      Sql = Sql & "ordre_100 INTEGER = NULL, "
      Sql = Sql & "ordre_101 INTEGER = NULL, "
      Sql = Sql & "ordre_102 INTEGER = NULL, "
      Sql = Sql & "ordre_103 INTEGER = NULL, "
      Sql = Sql & "ordre_104 INTEGER = NULL, "
      Sql = Sql & "ordre_105 INTEGER = NULL, "
      Sql = Sql & "ordre_106 INTEGER = NULL, "
      Sql = Sql & "ordre_107 INTEGER = NULL, "
      Sql = Sql & "ordre_108 INTEGER = NULL, "
      Sql = Sql & "ordre_109 INTEGER = NULL, "
      Sql = Sql & "ordre_110 INTEGER = NULL, "
      Sql = Sql & "ordre_111 INTEGER = NULL, "
      Sql = Sql & "ordre_112 INTEGER = NULL, "
      Sql = Sql & "ordre_113 INTEGER = NULL, "
      Sql = Sql & "ordre_114 INTEGER = NULL, "
      Sql = Sql & "ordre_115 INTEGER = NULL, "
      Sql = Sql & "ordre_116 INTEGER = NULL, "
      Sql = Sql & "ordre_117 INTEGER = NULL, "
      Sql = Sql & "ordre_118 INTEGER = NULL, "
      Sql = Sql & "ordre_119 INTEGER = NULL, "
      Sql = Sql & "ordre_120 INTEGER = NULL, "
      Sql = Sql & "ordre_121 INTEGER = NULL, "
      Sql = Sql & "ordre_122 INTEGER = NULL, "
      Sql = Sql & "ordre_123 INTEGER = NULL, "
      Sql = Sql & "ordre_124 INTEGER = NULL, "
      Sql = Sql & "ordre_125 INTEGER = NULL, "
      Sql = Sql & "ordre_126 INTEGER = NULL, "
      Sql = Sql & "ordre_127 INTEGER = NULL, "
      Sql = Sql & "ordre_128 INTEGER = NULL, "
      Sql = Sql & "ordre_129 INTEGER = NULL, "
      Sql = Sql & "ordre_130 INTEGER = NULL, "
      Sql = Sql & "ordre_131 INTEGER = NULL, "
      Sql = Sql & "ordre_132 INTEGER = NULL, "
      Sql = Sql & "ordre_133 INTEGER = NULL, "
      Sql = Sql & "ordre_134 INTEGER = NULL, "
      Sql = Sql & "ordre_135 INTEGER = NULL, "
      Sql = Sql & "ordre_136 INTEGER = NULL, "
      Sql = Sql & "ordre_137 INTEGER = NULL, "
      Sql = Sql & "ordre_138 INTEGER = NULL, "
      Sql = Sql & "ordre_139 INTEGER = NULL, "
      Sql = Sql & "ordre_140 INTEGER = NULL, "
      Sql = Sql & "ordre_141 INTEGER = NULL, "
      Sql = Sql & "ordre_142 INTEGER = NULL, "
      Sql = Sql & "ordre_143 INTEGER = NULL, "
      Sql = Sql & "ordre_144 INTEGER = NULL, "
      Sql = Sql & "ordre_145 INTEGER = NULL, "
      Sql = Sql & "ordre_146 INTEGER = NULL, "
      Sql = Sql & "ordre_147 INTEGER = NULL, "
      Sql = Sql & "ordre_148 INTEGER = NULL, "
      Sql = Sql & "ordre_149 INTEGER = NULL, "
      Sql = Sql & "ordre_150 INTEGER = NULL) AS "
      Sql = Sql & "SELECT * FROM Ordre WHERE Ordre NOT IN ("
      Sql = Sql & "ordre_001, "
      Sql = Sql & "ordre_002, "
      Sql = Sql & "ordre_003, "
      Sql = Sql & "ordre_004, "
      Sql = Sql & "ordre_005, "
      Sql = Sql & "ordre_006, "
      Sql = Sql & "ordre_007, "
      Sql = Sql & "ordre_008, "
      Sql = Sql & "ordre_009, "
      Sql = Sql & "ordre_010, "
      Sql = Sql & "ordre_011, "
      Sql = Sql & "ordre_012, "
      Sql = Sql & "ordre_013, "
      Sql = Sql & "ordre_014, "
      Sql = Sql & "ordre_015, "
      Sql = Sql & "ordre_016, "
      Sql = Sql & "ordre_017, "
      Sql = Sql & "ordre_018, "
      Sql = Sql & "ordre_019, "
      Sql = Sql & "ordre_020, "
      Sql = Sql & "ordre_021, "
      Sql = Sql & "ordre_022, "
      Sql = Sql & "ordre_023, "
      Sql = Sql & "ordre_024, "
      Sql = Sql & "ordre_025, "
      Sql = Sql & "ordre_026, "
      Sql = Sql & "ordre_027, "
      Sql = Sql & "ordre_028, "
      Sql = Sql & "ordre_029, "
      Sql = Sql & "ordre_030, "
      Sql = Sql & "ordre_031, "
      Sql = Sql & "ordre_032, "
      Sql = Sql & "ordre_033, "
      Sql = Sql & "ordre_034, "
      Sql = Sql & "ordre_035, "
      Sql = Sql & "ordre_036, "
      Sql = Sql & "ordre_037, "
      Sql = Sql & "ordre_038, "
      Sql = Sql & "ordre_039, "
      Sql = Sql & "ordre_040, "
      Sql = Sql & "ordre_041, "
      Sql = Sql & "ordre_042, "
      Sql = Sql & "ordre_043, "
      Sql = Sql & "ordre_044, "
      Sql = Sql & "ordre_045, "
      Sql = Sql & "ordre_046, "
      Sql = Sql & "ordre_047, "
      Sql = Sql & "ordre_048, "
      Sql = Sql & "ordre_049, "
      Sql = Sql & "ordre_050, "
      Sql = Sql & "ordre_051, "
      Sql = Sql & "ordre_052, "
      Sql = Sql & "ordre_053, "
      Sql = Sql & "ordre_054, "
      Sql = Sql & "ordre_055, "
      Sql = Sql & "ordre_056, "
      Sql = Sql & "ordre_057, "
      Sql = Sql & "ordre_058, "
      Sql = Sql & "ordre_059, "
      Sql = Sql & "ordre_060, "
      Sql = Sql & "ordre_061, "
      Sql = Sql & "ordre_062, "
      Sql = Sql & "ordre_063, "
      Sql = Sql & "ordre_064, "
      Sql = Sql & "ordre_065, "
      Sql = Sql & "ordre_066, "
      Sql = Sql & "ordre_067, "
      Sql = Sql & "ordre_068, "
      Sql = Sql & "ordre_069, "
      Sql = Sql & "ordre_070, "
      Sql = Sql & "ordre_071, "
      Sql = Sql & "ordre_072, "
      Sql = Sql & "ordre_073, "
      Sql = Sql & "ordre_074, "
      Sql = Sql & "ordre_075, "
      Sql = Sql & "ordre_076, "
      Sql = Sql & "ordre_077, "
      Sql = Sql & "ordre_078, "
      Sql = Sql & "ordre_079, "
      Sql = Sql & "ordre_080, "
      Sql = Sql & "ordre_081, "
      Sql = Sql & "ordre_082, "
      Sql = Sql & "ordre_083, "
      Sql = Sql & "ordre_084, "
      Sql = Sql & "ordre_085, "
      Sql = Sql & "ordre_086, "
      Sql = Sql & "ordre_087, "
      Sql = Sql & "ordre_088, "
      Sql = Sql & "ordre_089, "
      Sql = Sql & "ordre_090, "
      Sql = Sql & "ordre_091, "
      Sql = Sql & "ordre_092, "
      Sql = Sql & "ordre_093, "
      Sql = Sql & "ordre_094, "
      Sql = Sql & "ordre_095, "
      Sql = Sql & "ordre_096, "
      Sql = Sql & "ordre_097, "
      Sql = Sql & "ordre_098, "
      Sql = Sql & "ordre_099, "
      Sql = Sql & "ordre_100, "
      Sql = Sql & "ordre_101, "
      Sql = Sql & "ordre_102, "
      Sql = Sql & "ordre_103, "
      Sql = Sql & "ordre_104, "
      Sql = Sql & "ordre_105, "
      Sql = Sql & "ordre_106, "
      Sql = Sql & "ordre_107, "
      Sql = Sql & "ordre_108, "
      Sql = Sql & "ordre_109, "
      Sql = Sql & "ordre_110, "
      Sql = Sql & "ordre_111, "
      Sql = Sql & "ordre_112, "
      Sql = Sql & "ordre_113, "
      Sql = Sql & "ordre_114, "
      Sql = Sql & "ordre_115, "
      Sql = Sql & "ordre_116, "
      Sql = Sql & "ordre_117, "
      Sql = Sql & "ordre_118, "
      Sql = Sql & "ordre_119, "
      Sql = Sql & "ordre_120, "
      Sql = Sql & "ordre_121, "
      Sql = Sql & "ordre_122, "
      Sql = Sql & "ordre_123, "
      Sql = Sql & "ordre_124, "
      Sql = Sql & "ordre_125, "
      Sql = Sql & "ordre_126, "
      Sql = Sql & "ordre_127, "
      Sql = Sql & "ordre_128, "
      Sql = Sql & "ordre_129, "
      Sql = Sql & "ordre_130, "
      Sql = Sql & "ordre_131, "
      Sql = Sql & "ordre_132, "
      Sql = Sql & "ordre_133, "
      Sql = Sql & "ordre_134, "
      Sql = Sql & "ordre_135, "
      Sql = Sql & "ordre_136, "
      Sql = Sql & "ordre_137, "
      Sql = Sql & "ordre_138, "
      Sql = Sql & "ordre_139, "
      Sql = Sql & "ordre_140, "
      Sql = Sql & "ordre_141, "
      Sql = Sql & "ordre_142, "
      Sql = Sql & "ordre_143, "
      Sql = Sql & "ordre_144, "
      Sql = Sql & "ordre_145, "
      Sql = Sql & "ordre_146, "
      Sql = Sql & "ordre_147, "
      Sql = Sql & "ordre_148, "
      Sql = Sql & "ordre_149, "
      Sql = Sql & "ordre_150);"

      .Execute Sql
    End With

    Dim cmd
    Set cmd = CreateObject("ADODB.Command")
    Set cmd.ActiveConnection = .ActiveConnection

    With cmd
      .CommandType = adCmdStoredProc
      .CommandText = "ChercherOrdres"
      .Parameters.Append .CreateParameter("ordre_091", adInteger, , , "22")
      .Parameters.Append .CreateParameter("ordre_147", adInteger, , , "-99")

      Dim rs
      Set rs = .Execute
      MsgBox rs.GetString

    End With
    Set .ActiveConnection = Nothing
  End With
End Sub

这是一个很好的观点。我没有讨论这个问题,因为OP正在使用Excel中的Access。这并不意味着它不能完成,只是在这种情况下,更麻烦的实际上是更麻烦。使用IN而不是IN仅仅提高了他从一个查询中可以做什么的上限。您的方法消除了上限,而且性能更高,尽管从开发人员的角度来看,它更复杂。如果简单方法In/notin失败或运行太慢,这是合乎逻辑的下一步。这是一个很好的观点。我没有讨论这个问题,因为OP正在使用Excel中的Access。这并不意味着它不能完成,只是在这种情况下,更麻烦的实际上是更麻烦。使用IN而不是IN仅仅提高了他从一个查询中可以做什么的上限。您的方法消除了上限,而且性能更高,尽管从开发人员的角度来看,它更复杂。如果简单方法In/Not In失败或运行太慢,这是合乎逻辑的下一步。