PDA

Vollständige Version anzeigen : Datensätz zählen


4223
06.05.2011, 17:01
Der Versuch mit SQL Befehlen aus einer Tabelle nach einem bestimmten Kriterium zu suchen und die Anzahl der Treffer in einer msgbox auszugebe leider immer ohne Erfolg.

Wer kann mir dazu ein Beispiel geben?

Meine Tabelle „normteile_erstell“ hat eine Spalte „Artikel“ , ich möchte jetzt in die dieser Spalte nach ArtikelNr. suchen und die Anzahl Treffer in einer msgbox ausgeben.
Bei keinem Treffer, soll eine entsprechende Meldung ausgegeben werden.
Das ganze möchte ich mit SQL bewerkstelligen.

Ich hoffe das mir jemand helfen kann.
Gruss
Andreas

hcscherzer
06.05.2011, 17:49
Die Ausgabe der Meldung wird in SQL schwierig ... ;)

Aber warum nicht in VBA?dim anz as integer
anz = dcount("*", "normteile_erstell", "artikel = " & artikel_nr)
if anz = 0 then
msgbox "keine treffer"
else
msgbox str(anz) & " Treffer"
end if

4223
07.05.2011, 07:17
Hallo Hans-Christian,
leider wird nichts gefunden.

Treffer immer 0

Dim Artikel_Nummer
Dim anz As Integer
Artikel_Nummer = "8416-027"

anz = DCount("Artikel", "normteile_erstell", "Artikel = " & "8416-027")

If anz = 0 Then
MsgBox "keine treffer"
Else
MsgBox Str(anz) & " Treffer"
End If

das gleiche bei
anz = DCount("*", "normteile_erstell", "Artikel = " & Artikel_Nummer)


Hast Du vielleicht eine Idee voran das liegen kann?
Ist SQL nicht schneller, habe 67'000 Datensätze in der Tabelle?
Gruss

4223
07.05.2011, 07:53
Ich habe es jetzt geschafft

Dim Artikel_Nummer
Artikel_Nummer = "8416-027"

Dim anz As Integer
anz = DCount("[Artikel]", "normteile_erstell", "[Artikel] ='" & Artikel_Nummer & "'")
If anz = 0 Then
MsgBox "keine treffer"
Else
MsgBox Str(anz) & " Treffer"
End If

Würde mich jetzt aber doch Interessieren, wie man es Lösen kann mit SQL
Gruss

hcscherzer
07.05.2011, 08:50
Ja, hast Du selbst gemerkt, dass Artikel ein Textfeld ist, das war von hier aus nicht zu sehen ...

Du kannst mit SQL einen Befehl absetzen, der so ähnlich ist, wie die VBA Funktion:select count(*) from normteile_erstell where artikel = '8416-027'Dies liefert die Anzahl. Man könnte es verfeinern, dass gleich der Text geliefert wird:select str(count(*)) + ' Treffer' from normteile_erstell where artikel = '8416-027'
Aber das Ergebnis bekommst Du nicht in die MsgBox. Die ist ein Access Objekt und da musst Du selbst dafür sorgen, dass das Ergebnis angezeigt wird.

Thomas Möller
07.05.2011, 09:39
Hallo!

Würde mich jetzt aber doch Interessieren, wie man es Lösen kann mit SQL

mit reinem SQL wird das, wie Hans -Christian schon geschrieben hat, nicht funktionieren. Da wirst Du ohne VBA nicht auskommen.

Die Verwendung des DCOUNT-Befehls stellt schon die kürzeste Form der Implementierung dar. Du kannst Dir allerding auch selbst eine Funktion schreiben, die diese Aufgabe für Dich erledigt:

Public Funktion getAnzahlArtikel(ByVal strArtikelNr as String) As Long

Dim db As DAO.Database
Dim rst As DAO.Recordset
Dim strSQL As String

Set db = CodeDb

'SQL-String adaptiert von Hans-Christian
strSQL = "SELECT str(count(*)) + ' Treffer' As Anz " & _
"FROM normteile_erstell " & _
"WHERE artikel = '" & strArtikelNr &"'"
Set rst = db.OpenRecordset(strSQL, dbOpenSnapshot)
If Not rst.EOF
getAnzahlArtikel = rst!Anz
End If

rst.Close
Set rst = Nothing
Set db = Nothing

End Function

Diese Funktion kannst Du dann an der gewünschten Stelle aufrufen:

MsgBox "Es gibt " & getAnzahlArtikel("0815") & " für den Artikel 0815."

HTH

Lanz Rudolf
07.05.2011, 18:51
Hallo
nur so
du könntest egal welcher Vorschlag Du Verwendest anstelle der geschichte mit
den "' (DCount("[Artikel]", "normteile_erstell", "[Artikel] ='" & Artikel_Nummer & "'"))
auch BuildCriteria ensetzen

DCount("[Artikel]", "normteile_erstell", BuildCriteria("[Artikel]", dbText, "=" & Artikel_Nummer ))

klick in meiner Fusszeile auf den Link hinter Meine Doc
und öffne die PDF-Datei
lies auf Seite 73 und evtl. 279

im weiteren findest Du da auf Seite 93/94 auch (5.4.16 Datensätze einer Tabelle / Abfragen zählen)

Lanz Rudolf
07.05.2011, 18:55
Sory da ist was Falsch gelaufen :( 2x Gesendet)

4223
09.05.2011, 09:53
Hallo zusammen, ich habe mich jetzt für die Variante mit DCount entschieden.
Dank euch allen für eure schnellen Antworten.

Gruss
Andreas
:)