Доступ к строке VBA SQL слишком длинный - PullRequest
1 голос
/ 02 декабря 2011

У меня есть программа 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.Ошибка «SQL-оператор для сложного» возвращается из Access (2003).Я искал решения, но люди много говорят о конкатенациях, но мне кажется, что это не жизнеспособное решение, так как я создаю свою строку из цикла.
Есть ли способ решить эту проблему?Или моя стратегия неверна, для начала?

[EDIT]

здесь я добавляю пример запроса, сгенерированный из моего кода.Когда я пытаюсь вставить его в доступ, он выдает ту же ошибку.

ВЫБРАТЬ Ordre.Ordre, Sum (Ordre.Duree) AS SommeDeDuree ОТ Ordre WHERE (((Ordre.Date)> = # 07/ 11/2011 # И (Ordre.Date) <= # 14/11/2011 #) И (Ordre.Matricule = 257 ИЛИ Ordre.Matricule = 516 ИЛИ Ordre.Matricule = 591 ИЛИ Ordre.Matricule = 1797 ИЛИ Ordre.Matricule= 1802 ИЛИ Ordre.Matricule = 1828 ИЛИ Ordre.Matricule = 2061 ИЛИ Ordre.Matricule = 2070 ИЛИ Ordre.Matricule = 2085 ИЛИ Ordre.Matricule = 2103 ИЛИ Ordre.Matricule = 2142 ИЛИ Ordre.Matricule = 2244 ИЛИ Ordre.Matricule = 2211 ИЛИИЛИ Ordre.Matricule = 2436 ИЛИ Ordre.Matricule = 2471) И ((Ordre.Ordre) <> 10000477 И (Ordre.Ordre) <> 11146074 И (Ordre.Ordre) <> 11146315 И (Ordre.Ordre) <> 11146662И (Ordre.Ordre) <> 11146689 И (Ordre.Ordre) <> 11147233 И (Ordre.Ordre) <> 11147616 И (Ordre.Ordre) <> 11148129 И (Ordre.Ordre) <> 11147923 И (Ordre.Ordre) <> 11147924 И (Ordre.Ordre) <> 11147925 И (Ordre.Ordre) <> 11147192 И (Ordre.Ordre) <> 11147206 И (Ordre.Ordre) <> 11147217 И (Ordre.Ordre) <> 11147219 И (Ordre.Ordre) <> 11147220 И (Ordre.Ordre) <> 11147221 И (Ordre.Ordre) <> 11147255 И (Ordre.Ordre) <> 11147263 И (Ordre.Ordre) <> 11147265 И (Ordre.Ordre) <> 11147292 И (Ordre.Ordre) <> 11147295 И (Ordre.Ordre) <> 11147297 И (Ordre.Ordre) <> 11147298 И (Ordre.Ordre) <> 11147299 И (Ordre.Ordre) <> 11147300 И (Ordre.Ordre) <> 11146863 И (Ordre.Ordre) <> 11146864 И (Ordre.Ordre) <> 11147252 И (Ordre.Ordre) <> 11147547 И (Ordre.Ordre) <>11147550 И (Ordre.Ordre) <> 11147551 И (Ordre.Ordre) <> 11147556 И (Ordre.Ordre) <> 11147588 И (Ordre.Ordre) <> 11147594 И (Ordre.Ordre) <> 11147595 И (Ordre.Ordre) <> 11147610 И (Ordre.Ordre) <> 11147684 И (Ordre.Ordre) <> 11147685 И (Ordre.Ordre) <> 11147696 И (Ordre.Ordre) <> 11147697 И (Ordre.Ordre) <> 11147698И (Ordre.Ordre) <> 11147699 И (Ordre.Ordre) <> 11147700 И (Ordre.Ordre) <> 11147702 И (Ordre.Ordre) <> 11147720 И (Ordre.Ordre) <> 11147972 И (Ordre.Ordre) <> 11147974 И (Ordre.Ordre) <> 11147975 И (Ordre.Ordre) <> 11147976 И (Ordre.Ordre) <> 11147977 И (Ordre.Ordre) <> 11147978 И (Ordre.Ordre) <> 11147979 И(Ordre.Ordre) <> 11147980 И (Ordre.Ordre) <> 11147983 И (Ordre.Ordre) <> 11147985 И (Ordre.Ordre) <> 11147990 И (Ordre.Ordre) <> 11147991 И (Ordre.Ordre)<> 12156143 И (Ordre.Ordre) <> 12156147 И (Ordre.Ordre) <> 12156151 И (Ordre.Ordre) <> 12155605 И (Ordre.Ordre) <> 12155606 И (Ordre.Ordre) <> 12155607 И (Ordre.Ordre) <> 12155608 И (Ordre.Ordre) <> 12155609 И (Ordre.Ordre) <> 12155610 И (Ordre.Ordre) <> 12155611 И (Ordre.Ordre) <> 12155616 И (Ordre.Ordre) <> 12155436 И (Ordre.Ordre) <> 12155437 И (Ordre.Ordre) <> 12155438 И (Ordre.Ordre) <> 12155764 И (Ordre.Ordre) <> 12155765 И (Ordre.Ordre) <> 12155444 И (Ordre.Ordre) <> 12155429 И (Ordre.Ordre) <> 12155430 И (Ordre.Ordre) <> 12155431 И (Ordre.Ordre) <> 12155433 И (Ordre.Ordre) <> 12155434 И (Ordre.Ordre) <>12155435 И (Ordre.Ordre) <> 12155426 И (Ordre.Ordre) <> 12155427 И (Ordre.Ordre) <> 12155604 И (Ordre.Ordre) <> 12155420 И (Ordre.Ordre) <> 12155419 И (Ordre.Ordre) <> 12155412 А (Ordre.Ordre) <> 12155538 И (Ordre.Ordre) <> 12155539 А(Ordre.Ordre) <> 12155540 И (Ordre.Ordre) <> 12155541 И (Ordre.Ordre) <> 12155542 И (Ordre.Ordre) <> 12155543 И (Ordre.Ordre) <> 12155544 И (Ordre.Ordre) <> 12155545 И (Ordre.Ordre) <> 12155546 И (Ordre.Ordre) <> 12155547 И (Ordre.Ordre) <> 12155442 И (Ordre.Ordre) <> 12155440 И (Ordre.Ordre) <> 12155441 И (Ordre.Ordre) <> 12155443 И (Ordre.Ordre) <> 12155446 И (Ordre.Ordre) <> 12155445 И (Ordre.Ordre) <> 12155448 И (Ordre.Ordre) <> 12154726 И (Ordre.Ordre) <> 12154727 И (Ordre.Ordre) <> 12154728 И (Ordre.Ordre) <> 12154729 И (Ordre.Ordre) <> 12154730 И (Ordre.Ordre) <> 12155570 И (Ordre.Ordre) <> 12155704 И (Ordre.Ordre) <> 12155935 И (Ordre.Ordre) <> 12155936 И (Ordre.Ordre) <> 12155937 И (Ordre.Ordre) <> 12155938 И (Ordre.Ordre) <> 12155939 И (Ordre.Ordre) <> 12155940 И (Ordre.Ordre) <> 12155941 И (Ordre.Ordre) <> 12153256 И (Ordre.Ordre) <> 13101358 И (Ordre.Ordre) <> 13101309 И (Ordre.Ordre) <> 13212576)) GROUP BY Ordre.Ordre;

Ответы [ 4 ]

2 голосов
/ 02 декабря 2011

Хотя решение mwolfe02 является правильным, оно не масштабируется (как оригинальный проблемный 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; 
2 голосов
/ 02 декабря 2011

Вместо всех этих AND s и OR s вы должны использовать IN операторы.Например,

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;
0 голосов
/ 05 декабря 2011

Вместо использования динамического SQL (т. Е. Конкатенации значений на лету) рассмотрите возможность создания PROCEDURE с большим количеством строго типизированных параметров, по умолчанию равным NULL. Вот быстрое демо ....

Я выписал имена параметров в длинной руке, но, конечно, это можно сделать в цикле. Просто скопируйте и вставьте в любой модуль кода 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
0 голосов
/ 03 декабря 2011

Ни в коем случае нельзя ссылаться как на лист Excel, так и на базу данных Access в одном и том же операторе SQL.

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
...