tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
15
ZUGRIFFE
569
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    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
     

  2. #2
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Ich schon wieder .

    Das hier kann nicht gehen:

    Code vb:
    1
    
    '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:

    Code sql:
    1
    
    SELECT COUNT(datum) AS anzahl FROM tabelle WHERE datum = 'April'

    ohne die DB zu kennen aber schwer zu sagen.
    Rico82 bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  3. #3
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    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
     

  4. #4
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    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 bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  5. #5
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    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
     

  6. #6
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    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
     

  7. #7
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Bitte den Code formatiert in [VB]mein Code[/VB] setzen.
    So wie er jetzt da steht kann man das Ding kaum lesen
    Rico82 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  8. #8
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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
     

  9. #9
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    Du kannst eine SQL-Anweisung nicht so verwenden. Du musst ja irgendwo den Zugriff auf die Datenbank erstellt haben und damit musst du arbeiten.

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    
    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.
    Rico82 bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  10. #10
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    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
    Code vb:
    1
    2
    3
    4
    
    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
    Rico82 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  11. #11
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    Danke schön.
    dafür dass du schon lang raus bist, ist es aber sehr plausibel. vba mangelt eine nicht erzeugte und/oder gesetzte Variable an, nämlich die Variable
    SQL$. Wie muss ich diese Dim und Set ´en? Das ist das was mir immer schwer fällt bei VB bzw. Allgemein

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    
    Private Sub Monat_AfterUpdate()
        Dim db As Database
        Dim rs As Recordset
        
        Set db = OpenDatabase("d:\Documents and Settings\rschaedl\My Documents\Flopkunden Datenbank\Flopkunden V1.2.mdb")
        SQL$ = "SELECT Count(Monat) AS Anzahl From tblFlopkunden_2010_TDN WHERE Monat = 'April'"
        Set rs = db.OpenRecordset(SQL$)
        
        If rs.RecordCount > 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
     

  12. #12
    Avatar von tombe
    tombe tombe ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Sep 2004
    Ort
    Möglingen (BaWü)
    Beiträge
    3.109
    @yaslaw: Du hast natürlich mal wieder Recht. Vorhin habe ich selber noch gefragt wie der Wert zum Vergleich ermittelt wird und jetzt mache ich es selber falsch.

    @Rico82: Am Anfang: Dim sql$ bzw. Dim sql As String sollte helfen. Und schau nach wie es yaslaw oben den Teile mit "rs!Anzahl" geschrieben hat. Sonst geht es wieder nicht.
    Geändert von tombe (22.06.10 um 16:21 Uhr)
    Rico82 bedankt sich. 
    Sollte ein Tipp von mir geholfen haben, habe ich nichts gegen eine entsprechende Bewertung oder ein Danke und wenn ein Problem gelöst ist, dann den Beitrag bitte auch als erledigt markieren.

    Was ich gar nicht leiden kann sind User die es nicht für nötig halten auf Antworten zu reagieren, die Themen nicht als erledigt markieren und/oder die sich nicht für Hilfe bedanken.

  13. #13
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    Ich arbeite mit VBA (6.5) in Access.
     

  14. #14
    Rico82 Rico82 ist offline Mitglied
    Registriert seit
    Jun 2010
    Beiträge
    17
    ....es scheint zu funktionieren mit diesem Code:

    Code vb:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    
    Private Sub Monat_AfterUpdate()
        Dim db As Database
        Dim rs As Recordset
        Dim sql As String
        
        Set db = OpenDatabase("d:\Documents and Settings\rschaedl\My Documents\Flopkunden Datenbank\Flopkunden V1.2.mdb")
        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
        MsgBox2000 "Das Monatskontingent April ist erreicht!", vbOKOnly + vbInformation, "Hinweis Dateneingabe"
        Me.Monat.SetFocus
        Else
        Me.GP_Nr_Kombinationsfeld.SetFocus
        End If
            
    End Sub

    VB möchte nun aber auf die Datnebank zugreifen die ich mit einem Kennwort versehen habe, daher kommt auch der Laufzeitfehler. Gibt es die Möglichkeit die Abfrage ohne Kennwort auszuführen und ohne das Kennwort löschen zu müssen?
    Nun wirds aber kompliziert.....

    gruß und Danke
    Rico
     

  15. #15
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Wenn du mit VBA in Access arbeitest, kannst du den DB-Zugriff sparen und das Recordset direkt aus currentDb öffnen ausser du graiffst auf eine andere DB zu als die in der du bist.

    Code vb:
    1
    2
    3
    4
    5
    
    Dim rs as DAO.Recordset
    DIM sql as String
     
    sql = "SELECT ......"
    Set rs = currentDb.OpenRecordset(sql)
    Rico82 bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

Ähnliche Themen

  1. Passwortabfrage wo einbauen und wie
    Von Stari im Forum PHP
    Antworten: 3
    Letzter Beitrag: 21.04.07, 17:17
  2. w3d in Director einbauen!
    Von S_Golem im Forum Cinema 4D
    Antworten: 1
    Letzter Beitrag: 18.04.07, 21:53
  3. Javascript in php einbauen!
    Von Steve92 im Forum PHP
    Antworten: 2
    Letzter Beitrag: 14.09.06, 16:35
  4. Tastenfeld in PC einbauen
    Von fubargen im Forum Smalltalk
    Antworten: 3
    Letzter Beitrag: 12.02.05, 11:51
  5. 2. Festplatte einbauen
    Von pe-kar im Forum Hardware
    Antworten: 12
    Letzter Beitrag: 08.04.04, 19:44