I have an Excel 2003 VBA program that creates an SQL string that way:
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)
Problem is, there are about 100 ~ 150 noOrdre and ~15 MatOrString to add in the SQL statement. The error “SQL statement to complex” comes back from Access (2003). I have looked around for solutions but people are talking about concatenations alot but it doesn’t seem to be a viable solution for me since I create my string from a loop.
Is there a way to fix this problem? Or is my strategy wrong, to start with?
[EDIT]
here i add a sample query generated from my code. When I try to paste it in access it gives the same error.
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=257 OR Ordre.Matricule=516 OR Ordre.Matricule=591 OR
Ordre.Matricule=1797 OR Ordre.Matricule=1802 OR Ordre.Matricule=1828
OR Ordre.Matricule=2061 OR Ordre.Matricule=2070 OR
Ordre.Matricule=2085 OR Ordre.Matricule=2103 OR Ordre.Matricule=2142
OR Ordre.Matricule=2211 OR Ordre.Matricule=2344 OR
Ordre.Matricule=2436 OR Ordre.Matricule=2471 ) And ((Ordre.Ordre) <>
10000477 And (Ordre.Ordre) <> 11146074 And (Ordre.Ordre) <> 11146315
And (Ordre.Ordre) <> 11146662 And (Ordre.Ordre) <> 11146689 And
(Ordre.Ordre) <> 11147233 And (Ordre.Ordre) <> 11147616 And
(Ordre.Ordre) <> 11148129 And (Ordre.Ordre) <> 11147923 And
(Ordre.Ordre) <> 11147924 And (Ordre.Ordre) <> 11147925 And
(Ordre.Ordre) <> 11147192 And (Ordre.Ordre) <> 11147206 And
(Ordre.Ordre) <> 11147217 And (Ordre.Ordre) <> 11147219 And
(Ordre.Ordre) <> 11147220 And (Ordre.Ordre) <> 11147221 And
(Ordre.Ordre) <> 11147255 And (Ordre.Ordre) <> 11147263 And
(Ordre.Ordre) <> 11147265 And (Ordre.Ordre) <> 11147292 And
(Ordre.Ordre) <> 11147295 And (Ordre.Ordre) <> 11147297 And
(Ordre.Ordre) <> 11147298 And (Ordre.Ordre) <> 11147299 And
(Ordre.Ordre) <> 11147300 And (Ordre.Ordre) <> 11146863 And
(Ordre.Ordre) <> 11146864 And (Ordre.Ordre) <> 11147252 And
(Ordre.Ordre) <> 11147547 And (Ordre.Ordre) <> 11147550 And
(Ordre.Ordre) <> 11147551 And (Ordre.Ordre) <> 11147556 And
(Ordre.Ordre) <> 11147588 And (Ordre.Ordre) <> 11147594 And
(Ordre.Ordre) <> 11147595 And (Ordre.Ordre) <> 11147610 And
(Ordre.Ordre) <> 11147684 And (Ordre.Ordre) <> 11147685 And
(Ordre.Ordre) <> 11147696 And (Ordre.Ordre) <> 11147697 And
(Ordre.Ordre) <> 11147698 And (Ordre.Ordre) <> 11147699 And
(Ordre.Ordre) <> 11147700 And (Ordre.Ordre) <> 11147702 And
(Ordre.Ordre) <> 11147720 And (Ordre.Ordre) <> 11147972 And
(Ordre.Ordre) <> 11147974 And (Ordre.Ordre) <> 11147975 And
(Ordre.Ordre) <> 11147976 And (Ordre.Ordre) <> 11147977 And
(Ordre.Ordre) <> 11147978 And (Ordre.Ordre) <> 11147979 And
(Ordre.Ordre) <> 11147980 And (Ordre.Ordre) <> 11147983 And
(Ordre.Ordre) <> 11147985 And (Ordre.Ordre) <> 11147990 And
(Ordre.Ordre) <> 11147991 And (Ordre.Ordre) <> 12156143 And
(Ordre.Ordre) <> 12156147 And (Ordre.Ordre) <> 12156151 And
(Ordre.Ordre) <> 12155605 And (Ordre.Ordre) <> 12155606 And
(Ordre.Ordre) <> 12155607 And (Ordre.Ordre) <> 12155608 And
(Ordre.Ordre) <> 12155609 And (Ordre.Ordre) <> 12155610 And
(Ordre.Ordre) <> 12155611 And (Ordre.Ordre) <> 12155616 And
(Ordre.Ordre) <> 12155436 And (Ordre.Ordre) <> 12155437 And
(Ordre.Ordre) <> 12155438 And (Ordre.Ordre) <> 12155764 And
(Ordre.Ordre) <> 12155765 And (Ordre.Ordre) <> 12155444 And
(Ordre.Ordre) <> 12155429 And (Ordre.Ordre) <> 12155430 And
(Ordre.Ordre) <> 12155431 And (Ordre.Ordre) <> 12155433 And
(Ordre.Ordre) <> 12155434 And (Ordre.Ordre) <> 12155435 And
(Ordre.Ordre) <> 12155426 And (Ordre.Ordre) <> 12155427 And
(Ordre.Ordre) <> 12155604 And (Ordre.Ordre) <> 12155420 And
(Ordre.Ordre) <> 12155419 And (Ordre.Ordre) <> 12155412 And
(Ordre.Ordre) <> 12155538 And (Ordre.Ordre) <> 12155539 And
(Ordre.Ordre) <> 12155540 And (Ordre.Ordre) <> 12155541 And
(Ordre.Ordre) <> 12155542 And (Ordre.Ordre) <> 12155543 And
(Ordre.Ordre) <> 12155544 And (Ordre.Ordre) <> 12155545 And
(Ordre.Ordre) <> 12155546 And (Ordre.Ordre) <> 12155547 And
(Ordre.Ordre) <> 12155442 And (Ordre.Ordre) <> 12155440 And
(Ordre.Ordre) <> 12155441 And (Ordre.Ordre) <> 12155443 And
(Ordre.Ordre) <> 12155446 And (Ordre.Ordre) <> 12155445 And
(Ordre.Ordre) <> 12155448 And (Ordre.Ordre) <> 12154726 And
(Ordre.Ordre) <> 12154727 And (Ordre.Ordre) <> 12154728 And
(Ordre.Ordre) <> 12154729 And (Ordre.Ordre) <> 12154730 And
(Ordre.Ordre) <> 12155570 And (Ordre.Ordre) <> 12155704 And
(Ordre.Ordre) <> 12155935 And (Ordre.Ordre) <> 12155936 And
(Ordre.Ordre) <> 12155937 And (Ordre.Ordre) <> 12155938 And
(Ordre.Ordre) <> 12155939 And (Ordre.Ordre) <> 12155940 And
(Ordre.Ordre) <> 12155941 And (Ordre.Ordre) <> 12153256 And
(Ordre.Ordre) <> 13101358 And (Ordre.Ordre) <> 13101309 And
(Ordre.Ordre) <> 13212576)) GROUP BY Ordre.Ordre;
Instead of all of those
ANDs andORs you should useINstatements. For example,