PDA

Vollständige Version anzeigen : Frage zu Dcount und SQL Syntag


marha
28.09.2005, 06:49
Hallo!

Sehr oft verwende ich


If DCount("*", "abfrage..xy") > 0 Then


um festzustellen, ob die abfrage ein ergebnis bringt oder nicht.

Kann ich statt einer fix gespeicherten Abfrage DCOUNT auch direkt mit einem SQL SYNTAX betreiben?

danke!

marha



PS: JUHU! Ich bin zum PROFI aufgestiegen!

Smaug
28.09.2005, 06:56
SELECT Count(*) FROM DeinerAbfrage geht auch

marha
28.09.2005, 07:18
Hallo Smaug,

vielleicht steh ich jetzt auf der Leitung?

aber wie soll ich das im VBA code einbauen?

Nehmen wir an, ich will im VBA Code wissen, ob folgende Abfrage ein ergebnis bringt

select * from journal where id = 47

Danke!

marha

energ
28.09.2005, 08:11
Hy marha,

Ich weiß net ob ich dein Prob richtig verstanden hab.... :D

In meinen DB´s frage ich SQL-Tables folgendermaßen ab:


Dim CGS as String
Dim SQLGES as String
Dim db as Database
Dim XX as Recordset
Dim Ergebnis as String

Set db = CurrentDb()
CGS = DCount("*", "GS1")
If CGS < 1 Then GoTo weiter1
SQLGES = "Select count(*) as XX from [table] where [Feldname] = [criteria] group by [Feldname]; "
Set [string] = db.OpenRecordset(SQLGES, dbOpenSnapshot)
Set Ergebnis = SQLGES!XX

evtl hilft Dir das weiter?!?

greetz
energ

marha
28.09.2005, 08:21
Hallo,

ich glaube, da werde ich missverstanden.

ich suche die möglichkeit im vba code schnell mal die anzahl der datensätze einer bestimmten sql abfrage zu eruieren.

monentan muss ich die abfrage in access speichern und rufe die dann mit folgendem befehl z.B. auf:

msgbox DCount("*", "abfrage..xy")

mir wäre es aber lieber, gleich direkt einen sql string einzugeben und davon die anzahl der datensätze zu erhalten.

danke!

marha

Smaug
28.09.2005, 09:48
für solche Fälle kann man sich eine kleine Funktion in einem öffentlichen Modul schreiben:
Function DBCount (Expression As String, Domain As String, Optional Criteria) As Long
Dim strSQL As String
strSQL = "SELECT COUNT (" & Expression & ") FROM " & Domain
If Not IsMissing (Criteria) Then strSQL = strSQL & " WHERE " & Criteria
DBCount = DBEngine(0)(0).OpenRecordset (strSQL, dbOpenForwardOnly)(0)
End Function

Der Aufruf in VBA könnte dann wie folgt aussehen:
.....
Dim lngAnzahlDSAusAbfrage As Long
lngAnzahlDSAusAbfrage = DBCount(DBCount ("Feldname", "Abfrage")
...
Die Anwendung kann sowohl auf eine Abfrage als auch auf irgendeine beliebige Tabelle mit/ohne zusätzliche Kriterien erfolgen - genau wie bei einer Domänenfunktion. Das Ganze ist schneller als die entsprechende Domänenfunktion da mit dieser Funktion Indizes in Tabellen benutzt werden können (siehe auch Forumsuche zu Abfrageperformance, Domänenfunktionen....)

marha
28.09.2005, 10:57
Hallo SMAUG,

danke, genau das hab ich gesucht!

lg. marha