Prüfschleife einbauen

Rico82

Grünschnabel
Hallo @all,
ich hab ein Problem aber noch keine passende Lösung. Anbei erst einmal mein eigene Lösung als Quellcode:

'Private Sub Monat_AfterUpdate()
'Dim intZahl As Integer
'Dim strText As String
'Set strText = Me.Monat
'Set intZahl = CInt(strText)

'If CInt(strText) = "April" > 20 Then
'MsgBox2000 "Das Monatskontingent April ist erreicht!", vbOKOnly + vbInformation, "Hinweis Dateneingabe"
'Me.Monat.SetFocus
'Else
'Me.GP_Nr_Kombinationsfeld.SetFocus
'End If

'End Sub

Ich möchte eine Art Plausi-Check in mein Formular einbauen, welches mir 20 Datensätze in der Spalte Monat pro Monat meiner Tabelle zulässt und alles was darüber hinaus geht, soll durch einen Hinweis einer MsgBox hingewiesen werden.
Aber ich scheitere immer daran, wie ich die Anzahl der Einträge z.b. "April" in der DB zählen kann, da es sich ja um Zeichenketten handelt.

Hat jemand eine Idee, was ich falsch mach oder anders machen könnte?

Vielen Dank
Gruß, Rico
 

tombe

Erfahrenes Mitglied
Ich schon wieder ;).

Das hier kann nicht gehen:

Visual Basic:
'If CInt(strText) = "April" > 20 Then

das wäre ein doppelter Vergleich.

In welcher Variablen wird den der Wert geführt auf den du prüfen willst?

Die Abfrage der DB könnte in etwa so aussehen:

SQL:
SELECT COUNT(datum) AS anzahl FROM tabelle WHERE datum = 'April'

ohne die DB zu kennen aber schwer zu sagen.
 

Rico82

Grünschnabel
Hey Du, :)

also in SQL sieht die Abfrage bei mir so aus:

SELECT Count(Monat) AS [Anzahl-April]
FROM tblFlopkunden_2010_TDN
WHERE Monat = 'April';

Monat heiß somit die Variable und ist vom Typ Text.

Kannst du damit was anfangen?

Gruß
Rico
 

tombe

Erfahrenes Mitglied
Also "Anzahl-April" würde ich nicht nehmen, kann sein das der Bindestrich da mal Probleme macht, nenne es einfach nur "Anzahl" oder nimm anstatt des "-" den "_".

Wenn deine Abfrage einen Wert zurückgibt, ist dieser dann im Feld "Anzahl" oder im Moment "Anzahl-April" enthalten und ist eine Zahl !! Mit diesem Rückgabewert machst du dann die IF-Anweisung.

Da steckt Access dahinter oder Dann kopiere deine SQL-Anweisung mal dort in eine Abfrage und führe sie aus. Dann siehst du was zurückgegeben wird.
 

Rico82

Grünschnabel
Ok, bei mir sieht das ganze jetzt so aus, aber funktioniert nicht, weil ich bestimmt mal wieder voll auf dem Holzweg bin.... *grrrr*
Hab jetzt einfach mein Select im Code kopiert aber so einfach wird es wohl nicht klappen?

Private Sub Monat_AfterUpdate()

If SELECT Count(Monat) AS [Anzahl-April] From tblFlopkunden_2010_TDN WHERE Monat = 'April'; > 20 Then
MsgBox2000 "Das Monatskontingent April ist erreicht!", vbOKOnly + vbInformation, "Hinweis Dateneingabe"
Me.Monat.SetFocus
Else
Me.GP_Nr_Kombinationsfeld.SetFocus
End If

End Sub
 

Rico82

Grünschnabel
Sorry so ist der Quelltext:

Private Sub Monat_AfterUpdate()

If SELECT Count(Monat) AS Anzahl From tblFlopkunden_2010_TDN WHERE Monat = 'April'; > 20 Then
MsgBox2000 "Das Monatskontingent April ist erreicht!", vbOKOnly + vbInformation, "Hinweis Dateneingabe"
Me.Monat.SetFocus
Else
Me.GP_Nr_Kombinationsfeld.SetFocus
End If

End Sub
 

Yaslaw

alter Rempler
Moderator
Bitte den Code formatiert in [code=vb]mein Code[/code] setzen.
So wie er jetzt da steht kann man das Ding kaum lesen
 

Rico82

Grünschnabel
Visual Basic:
Private Sub Monat_AfterUpdate()
    
    If SELECT Count(Monat) AS Anzahl From tblFlopkunden_2010_TDN WHERE Monat = 'April' > 20 Then
    MsgBox2000 "Das Monatskontingent April ist erreicht!", vbOKOnly + vbInformation, "Hinweis Dateneingabe"
    Me.Monat.SetFocus
    Else
    Me.GP_Nr_Kombinationsfeld.SetFocus
    End If
        
End Sub
 

tombe

Erfahrenes Mitglied
Du kannst eine SQL-Anweisung nicht so verwenden. Du musst ja irgendwo den Zugriff auf die Datenbank erstellt haben und damit musst du arbeiten.

Visual Basic:
Dim db As datebase
Dim rs As Recordset

Set db = Opendatabase("C:\Pfad\daba.mdb")
sql$ = "SELECT Count(Monat) AS Anzahl From tblFlopkunden_2010_TDN WHERE Monat = 'April'"
Set rs = db.OpenRecordset(sql$)

If rs.RecordCount > 20 then
'hier der Code 
End If

Bin zu lange raus aus VB und kann den Datenbankzugriff nicht mehr aus dem Kopf, aber irgendwie so ähnlich sieht es aus.
 

Yaslaw

alter Rempler
Moderator
RecordCount gibt dir die Anzahl Datensätze zurück. Das ist in dem Fall aber immer 1, weil ein COUNT() über alles stattfindet. Entweder also ohne COUNT() oder
Visual Basic:
sql$ = "SELECT Count(Monat) AS Anzahl From tblFlopkunden_2010_TDN WHERE Monat = 'April'"
Set rs = db.OpenRecordset(sql$)
call rs.MoveFirst
if rs!Anzahl > 20 then

Wird hier eigentlich mit VB6 in Kombination mit Access oder mit VBA in Access gearbeitet?
Je nachsdem ist die Connection schwerer oder einfacher