Länge Kriterien-String in DCount

26/07/2008 - 01:03 von Thomas Winkler | Report spam
Hi,

ich will mittels DCount() die Anzahl von Datensàtzen zu einem bestimmten
Kriterium ermitteln. Das Kriterium wird in einer vorherigen Schleife
erzeugt (in strSQL$ abgelegt) und ist in einem Fall 1336 Zeichen lang.
Es ist definitiv syntaktisch korrekt. Ein Testweises einsetzen in ein
SQL-Kommando funktionierte.

Leider funktioniert es im Code wie folgt

MsgBox DCount("*", "[meineTabelle]", strSQL$)

*nicht*. Es wird mit Fehlernummer 2001 und der Meldung "Sie haben die
vorherige Operation abgebrochen." quittiert.

Verwende ich den Kriteriums-String direkt als Parameter

MsgBox DCount("*", "[meineTabelle]", "hier steht das " & _
"Kriterium, und weil's so lang ist, mit Umbruch")

funktioniert der Code.

Meine Vermutung geht in Richtung 1024er Grenze für Parameter-Strings in
Domànenfunktionen - auch wenn ich dazu in der OH nix finden konnte.

Könnt Ihr das bestàtigen? Wie könnte ich das Problem umgehen?

MfG

Thomas
 

Lesen sie die antworten

#1 Gottfried Lesigang
26/07/2008 - 09:42 | Warnen spam
Hallo Thomas!

Es ist definitiv syntaktisch korrekt. Ein Testweises einsetzen in ein
SQL-Kommando funktionierte.



Wenn das so geht, dann sollte der Rest lösbar sein...

Meine Vermutung geht in Richtung 1024er Grenze für Parameter-Strings in
Domànenfunktionen - auch wenn ich dazu in der OH nix finden konnte.



Ich mag diese Domànenfunktionen nicht so wirklich. In meinen Projekten
verwende ich was Selbstgemachtes.

Wie könnte ich das Problem umgehen?



z.B. so:

Verweis auf DAO setzen!
Dim rs As DAO.Recordset
Set rs=CurrentDb.OpenRecordset(DeinSQL,dbOpenSnapshot)
'[Hier das Ergebnis ermitteln - siehe unten]
If Not rs Is Nothing Then rs.Close
Set rs=Nothing

Du kannst eine Aggregatfunktion verwenden
SELECT Count(*) AS Anzahl FROM Tabelle WHERE Filter

Das Ergebnis findest du dann mit rs!Anzahl

Oder du machst ein simples SELECT auf deine Tabelle. Du musst zuerst rs.EOF
prüfen (wenn "True", dann gibt es gar keine Datensàtze), danach mit

rs.MoveLast
rs.MoveFirst

einmal ans Ende gesprungen sein. In rs.Recordcount steht dann die Anzahl.
Der Vorteil dieser Methode liegt darin - wenn du das brauchst -, dass du
auch gleich Zugriff auf die entsprechenden Datensàtze hast.

HTH
Gottfried

Home: www.develes.net
Mail:

Ähnliche fragen