"CODES TE-6ren">
gpt4 book ai didi

sql - Access VBA SQL 字符串太长

转载 作者:行者123 更新时间:2023-12-04 21:41:24 27 4
gpt4 key购买 nike

我有一个 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)。我环顾四周寻找解决方案,但人们经常谈论连接,但这对我来说似乎不是一个可行的解决方案,因为我从循环中创建了我的字符串。
有没有办法解决这个问题?还是我的策略错了,一开始?

[编辑]

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

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;

最佳答案

而不是所有这些AND s 和 OR你应该使用 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;

关于sql - Access VBA SQL 字符串太长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8359460/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com