Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Anzeige
Inhaltsverzeichnis

ADODB SQL Query-Strings kombinieren

Forumthread: ADODB SQL Query-Strings kombinieren

ADODB SQL Query-Strings kombinieren
10.11.2025 22:18:36
emkaes
Hi Leute,

https://www.herber.de/bbs/user/179612.xlsm

ich möchte per sql-Abfrage vom jüngsten Datensatz eines Kunden den Saldo auslesen

mir gelingt jedoch die Abfrage nicht wenn ich als weitere Prüfbedingung max(Datum) mit den notwendigen # ..... # Literalen verwende und ohne natürlich auch nicht.

Daher habe ich einen Workaround mit 2 Abfragen gebastelt.

query = "SELECT MAX(Datum) FROM [Rechnungen_DB$] WHERE Name= 'Person1' GROUP BY Name"   



query = "SELECT Saldo FROM [Rechnungen_DB$] WHERE Name= 'Person1' and Datum = #" & Format(dteDatum, "YYYY-MM-DD") & "#"


mit Pseudocode habe ich folgendes probiert
select ... from..... where name=... and datum =.... group by ......
gruppiere ich nach einem Feld meckert er, dass nicht alle Felder für die Aggregatfunktion enthalten sind
gruppiere ich nach mehreren Feldern erhalte ich mehrere Ergebnisse

select ... from..... where name=... and datum =.... group by ...... having datum = max(datum)
meckert datum an, kennt er nicht

select ... from..... where name=... and datum =select max(datum) from......
meckert die Bedingung Datum an

Könnt ihr mir bitte auf die Sprünge helfen


Vielen Dank

emkaes
Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Hat sich erledigt. owt
11.11.2025 01:38:06
emkaes
AW: Hat sich erledigt. owt
11.11.2025 08:59:31
Marc
Ich habe gemerkt das , wenn man ein deutsches Office hat, die Abfragen mit Datum im ADODB SQL Statement fast nie funktionieren..
egal wie ich es versuchte zu implementieren.
Stellte ich Office auf englisch(amerikanisch) um, funktionierten die Abfragen wunderbar..
bist du emkaes oder Marc?! owt
11.11.2025 10:56:54
Oberschlumpf
Anzeige
die Lösung
11.11.2025 12:10:45
emkaes
Hallo @ Marc und alle anderen Interessierten,

will Euch die Lösung nicht vorenthalten

Sql benutzt ausschließlich das amerikanische Datumsformat (YYYY-MM-DD) oder (YYYY/MM/DD).

Abfragen, die als Kriterium Datumsangaben enthalten, müssen daher über die Formatfunktion in die o.a. Formate umgewandelt werden und mit dem Datumsliteral umschlossen werden.

Wie oben gezeigt. Select ……. And Datum = #“ & format(…..,“YYYYY-MM-DD“) & „#“

Benutzt man jedoch eine Unterabfrage, die ein Datum als Ergebnis zurückgibt (select max(Datum)……., befindet sich das Ergebnis bereits in diesem Format und braucht weder eine Format-Umwandlung noch Datumsliterale

Die funktionierende Lösung lautet daher

Query = SELECT * FROM [Rechnung_DB$] WHERE Name = ´Person1´ AND Datum = (SELECT MAX(Datum) FROM [Rechnung_DB$] WHERE Name = ´Person1´)“


so long

Emkaes
Anzeige
Im Anhang sind...
11.11.2025 12:32:55
Case
Moin, :-)

mehrere Möglichkeiten (auch mit Power Query) : ;-)
https://www.herber.de/bbs/user/179613.xlsb

In deinem Modul1 habe ich etwas angepasst und auskommentiert. Schau es dir an (mit GROUP BY muss etwas angepasst werden, wegen Aggregation). ;-)

In Modul2 werden alle Personen ausgegeben. ;-)

In J1 kannst du die Person auswählen, oder ALLE (ist dann Power Query). Mit VBA wird dann die Tabelle neu geladen. Die Formel in L1 ist Hilfsspalte für die Datenüberprüfung.
Kann man auch in VBA mit "Worksheet_SelectionChange" machen. Klick auf Spaltenkopf Name oder auf den einzelnen Namen (dann alle, oder nur den Einen ausgeben). Mit Intersect eingrenzen. ;-)

Servus
Case
Anzeige
und genau hier begannen die Probleme
11.11.2025 16:07:44
Marc
Hallo,

das habe ich lange tatsächlich auch gedacht, das SQL dann nur das amerikanische Format nutze und habe wirklich Stunden damit verbracht, durch diverse Hilfe den Fehler zu finden in meinen Ausdrücken..

Doch die Ausdrücke waren richtig,
nur hat meine deutsche Access Version ( probiert in Access 2016, 2019, 365, und hier liegt wohl die Problematik) dieses Datumformat (das amerikanische) nicht akzeptiert, das deutsche Format jedoch wurde von SQL auch zurückgewiesen. Wie gesagt stellte ich dann mein Office ( bzw. die Windows Version auf english um) wurden die SQL Ausrücke die vorher abgelehnt wurden, direkt akzeptiert.

Selbst Hilfen mit diversen KI Systemen kamen immer zum gleichen SQL Ausdruck und gleichem Fehler.

Ob dies nun selten auftaucht , oder verbreitet ist, konnte ich bisher nicht feststellen.
Daher nutze ich in meinem System , wo diese Problematik auftrat eine andere Art der zeitlichen Abfrage..
In meinem System mit mySQL Datenbanken im übrigen gibt es da gar keine Probleme mit...


Die Variante mit Max(Datum) habe ich noch nicht probiert und ein interessanter Ansatz, den ich mal verfolgen werde..
Danke für den Tipp

vg Marc
Anzeige
AW: und genau hier begannen die Probleme
11.11.2025 17:11:09
Ulf
Hi,
geht auch kombiniert:


query = "SELECT MAX(Datum), Saldo FROM [Rechnungen_DB$] WHERE Name= '" & strName & "' GROUP BY Name, Saldo"
'arr = useADO(query)
MsgBox useADO(query)(1, 2)

hth
Ulf
@ Case
11.11.2025 13:22:16
emkaes
Hi Case,

vielen Dank für deine aufgezeigten Varianten.
Bin noch dabei, deine Verwendung von JOINs gedanklich aufzudröseln.

In die Richtung hatte ich auch probiert, bin dann aber dabei in „meine“ Lösung gestolpert :-))

Ich werde aber dranbleiben; danke nochmal

So long

emkaes
Anzeige
Ich habe wieder mal...
11.11.2025 13:51:35
Case
Moin, :-)

... nicht auf die Version geachtet. In 2016 geht die Formel in L1 wohl nicht. ;-)

Du kannst dir die Datenüberprüfung ja Excel-2016-konform aufbauen. ;-)

Power Query müsste aber funktionieren. ;-)

Danke für die Rückmeldung. ;-)

Servus
Case

Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige