Projekterstellung mit GUI

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Ich habe mir mal den Teil

Code: Alles auswählen

def connect():
    return MySQLdb.connect(host=DB_HOST, port=3307,
        user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch",
        cursorclass=MySQLdb.cursors.DictCursor)
angesehen.

Dabei hat die Konsole einen Fehler festgestellt.
File "SchuetzeAnlegen.py", line 14, in connect
cursorclass=MySQLdb.cursors.DictCursor)
AttributeError: 'module' object has no attribute 'cursors'
BIn das gerade mal am Googln und verstehen.
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Hallo,

ich muss hier leider noch mal fragen.

Warum kommt hierbei die Meldung das der Cursor nicht im Modul ist?

Code: Alles auswählen

#!/usr/bin/python3
import sys
import RPi.GPIO as gpio
#import MFRC522
import MySQLdb

DB_HOST = 
DB_USER = 
DB_PASSWORD = "

def connect():
    return MySQLdb.connect(host=DB_HOST, port=3307,
        user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch",
        cursorclass=MySQLdb.cursors.DictCursor)
Traceback (most recent call last):
File "SchuetzeAnlegen-Forum.py", line 79, in <module>
main()
File "SchuetzeAnlegen-Forum.py", line 62, in main
db = connect()
File "SchuetzeAnlegen-Forum.py", line 14, in connect
cursorclass=MySQLdb.cursors.DictCursor)
AttributeError: module 'MySQLdb' has no attribute 'cursors'
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Ich hatte mal folgendes Probiert

Code: Alles auswählen

def connect():
    conn =  MySQLdb.connect(host=DB_HOST, port=3307,
        user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch")
      return conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)


Das ging auch, bei der ersten Abfrage, bei der 2. sagte er der Cursor wäre closed
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Du brauchst ein

Code: Alles auswählen

import MySQLdb.cursors
Das zweite Beispiel, das funktioniert, dürfte daher auch nicht funktionieren.
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Ok Danke. Das scheint damit zu klappen.

Bekomme aber weiterhin Meldungen...
Traceback (most recent call last):
File "SchuetzeAnlegen-Forum2.py", line 80, in <module>
main()
File "SchuetzeAnlegen-Forum2.py", line 65, in main
benutzer_anzeigen(db)
File "SchuetzeAnlegen-Forum2.py", line 19, in benutzer_anzeigen
with db as cursor:
AttributeError: __exit__
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Ich bin ja dabei das erstmal alles zu verstehen.

Daher mein Nachfragen.

Ich hatte das gepostete Code Muster mal unter Python2 laufen lassen. Da ging es ein Stück weiter. Unter Python3 kommen diese o.g. Meldungen.
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

Welcher Version von MySQLDB benutzt Du denn?
Benutzeravatar
__blackjack__
User
Beiträge: 13063
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Selbst wenn das gehen würde, das ist so nicht in der DB API V2 spezifiziert. Wenn man dann mal das Modul wechselt, zum Beispiel weil `MySQLdb` soweit ich das sehe nicht per ``pip`` installiert werden kann, muss man darauf hoffen, dass ein anderes Modul auch so verwendbar ist.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Ich hoffe das ist das was du meinst.
python3
Python 3.5.3 (default, Sep 27 2018, 17:25:39)
[GCC 6.3.0 20170516] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import MySQLdb
>>> MySQLdb.__version__
'1.4.2.post1'
>>>
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

__blackjack__ hat geschrieben: Montag 18. März 2019, 10:44 Selbst wenn das gehen würde, das ist so nicht in der DB API V2 spezifiziert. Wenn man dann mal das Modul wechselt, zum Beispiel weil `MySQLdb` soweit ich das sehe nicht per ``pip`` installiert werden kann, muss man darauf hoffen, dass ein anderes Modul auch so verwendbar ist.
Was wäre denn dann deine Empfehlung für mich?

Ich will das Projekt auch nicht unnötig aufblasen.
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Wenn es Sinn macht, nehm ich auch gern einen anderen Connector dazu. Der hat mir halt nur am Anfang gut gefallen und ging auch direkt :-)
Benutzeravatar
__blackjack__
User
Beiträge: 13063
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@matze1708: Es geht nicht darum das Du jetzt ein anderes Modul verwenden solltest, sondern das Du das welches Du verwendest, so verwendest das Du möglichst nur die DB API v2 benutzt, damit es notfalls auch mit anderen Modulen funktioniert. Und die Spezifikation sagt nicht das Verbindungen oder Cursor Kontextmanager sind. Wenn man das also portabel halten möchte, muss man `contextlib.closing()` verwenden, damit ``with`` funktioniert.

Und man muss von der Verbindung explizit einen Cursor mit dem Aufruf der `cursor()`-Methode abfragen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Verstanden habe ich es noch nicht.

Muss ich dann erstmal die Lib importieren

Code: Alles auswählen

from contextlib import closing

um dann

Code: Alles auswählen

def benutzer_anzeigen(db):
    print()
    with closing(db) as cursor:
        cursor.execute("""Select tbl_Benutzer.ID, tbl_Benutzer.UName, tbl_Benutzer.UVorname
            FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID""")
        for row in cursor:
           print( row["ID"], row["UName"], row["UVorname"])

oder wie stelle ich das an?
Benutzeravatar
__blackjack__
User
Beiträge: 13063
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@matze1708: Jetzt musst Du nur noch tatsächlich einen Cursor von `db` holen: ``with closing(db.cursor()) as cursor:``.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

So geht es.

Habe unten noch ein db.commit() angehängt. Hatte mich gewundert das nix ankam.

Muss ich jetzt eigentlich noch bei dem Insert den Spaß mit dem try machen?

Code: Alles auswählen

try: 
         with closing(db.cursor()) as cursor:
        sql_query = """INSERT INTO `tbl_Schiesstand` (`UserID`, `StandID`, `Platz`, `KaliberID`, `Beginn`, `Standaufsicht`) VALUES (%s, %s, %s, %s, NOW(), %s)"""
        data = (user_id, stand_id, platz, kaliber_id, standaufsicht) 
        cursor.execute(sql_query, data) 
        db.commit()       
        print
        print ("Du wurdest erfolgreich registriert") 
 
    except MySQLdb.Error as error : 
        db.rollback() 
        print("Failed to insert into MySQL table {}".format(error)) 
 
    finally: 
        #closing database connection. 
        if(db.ping()): 
            cursor.close() 
            db.close() 
            print("MySQL connection is closed")
oder bleibt das weg?
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Hallo,

ich habe hier jetzt noch mal meinen aktuellen Code.
Ich habe einen Teil von dem zuletzt geposteten übernommen und die o.g. Dinge angepasst.
Dazu habe ich eine Funktion eingebaut, wenn der User bereits für den heutigen Tag eine Registrierung hat bzw sich noch nicht vom alten Stand ausgelogt hat. Soll das Skript ihm das sagen und abbrechen.
Schöner wäre hier aber, das main() von vorne beginnt und dem User eine Meldung ausgibt.

Da wäre ich dann sicherlich bei

Code: Alles auswählen

while True 
oder?
Dann wäre mir noch lieb, wenn ich diese Auswahl angezeigt bekomme, wo der User die ID des Standes eingibt, das er nur die aktuell gezeigten eingeben kann, sonst Fehlermeldung und Aufforderung zur neueingabe

Master Frage! Wie baue ich das alles so um das es eine Grafische Oberfläche wird?

Code: Alles auswählen

#!/usr/bin/python3
import sys
import os
import RPi.GPIO as gpio
import MFRC522
import MySQLdb
import MySQLdb.cursors
from contextlib import closing
import time

DB_HOST = "XXX"
DB_USER = "XXX"
DB_PASSWORD = "XXXX"


def connect():
    return MySQLdb.connect(host=DB_HOST, port=3307,
        user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch",
        cursorclass=MySQLdb.cursors.DictCursor)

def benutzer_anzeigen(db):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""Select tbl_Benutzer.ID, tbl_Benutzer.UName, tbl_Benutzer.UVorname
            FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID""")
        for row in cursor:
           print( row["ID"], row["UName"], row["UVorname"])


def benutzer_registriert(db, user_id):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""SELECT tbl_Schiesstand.UserID
                        FROM (tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID) 
                        INNER JOIN (tbl_Stand INNER JOIN (tbl_Kaliber INNER JOIN tbl_Schiesstand ON tbl_Kaliber.ID = tbl_Schiesstand.KaliberID) 
                        ON tbl_Stand.ID = tbl_Schiesstand.StandID) ON tbl_Benutzer.ID = tbl_Schiesstand.UserID
                        Where  tbl_Schiesstand.UserID = %d AND  (DATE(tbl_Schiesstand.Beginn) = CURDATE() AND NOT DATE(tbl_Schiesstand.Ende) = CURDATE())""" % (user_id))
        
        if cursor.fetchone():
            print("Du bist bereits registriert")
            time.sleep(5)
            main()
        else:
            pass



def stand_anzeigen(db):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("Select ID, StandLang From tbl_Stand") 
        for row in cursor:
            print( row["ID"], row["StandLang"])

def kaliber_anzeigen(db, stand_id):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""Select tbl_Kaliber.ID, tbl_Kaliber.KaliberLang, tbl_Stand.Standlang
            From tbl_Stand INNER JOIN tbl_Kaliber ON tbl_Stand.ID = tbl_Kaliber.StandID
            Where tbl_Stand.ID = %s""", (stand_id,))
        for row in cursor:
            print( row["ID"], row["KaliberLang"])

def schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht):
    print()
    with closing(db.cursor()) as cursor:
        sql_query = """INSERT INTO `tbl_Schiesstand` (`UserID`, `StandID`, `Platz`, `KaliberID`, `Beginn`, `Standaufsicht`) VALUES (%s, %s, %s, %s, NOW(), %s)"""
        data = (user_id, stand_id, platz, kaliber_id, standaufsicht) 
        cursor.execute(sql_query, data) 
        db.commit()
        
    print("Du wurdest erfolgreich registriert") 

def input_int(prompt):
    while True:
        try:
            print()
            return int(input(prompt))
        except ValueError:
            print("Fehler: Keine Zahl eingegeben.")
            
def main():
    os.system('clear')
    print("Schiessbuch")
    print()
    print("Bitte erfasse deine Daten!")
    print()
    db = connect()

    benutzer_anzeigen(db)
    user_id = input_int("Bitte deine User ID eingeben: ")
    
    benutzer_registriert(db, user_id)
    
    
    stand_anzeigen(db)
    stand_id = input_int("Bitte Stand eingeben: ")
    
    kaliber_anzeigen(db, stand_id)
    kaliber_id = input_int("Bitte Kaliber eingeben: ")
    
    platz = input_int("Auf welchem Stand schiesst du?: ")
    
    standaufsicht = 0
    schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht)

if __name__ == '__main__':
    main()


matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Hallo,

ich habe noch mal bissl was probiert, dazu versucht den Teil mit dem RFID einlesen einzubauen.

Habt ihr die Möglichkeit da mal drüber zusehen?

im main()

habe ich ein try / except KeyboardInterrupt eingebunden. in der Hoffnung das ich dann das Skript beenden kann.

Habe aber das Gefühl das es dass nicht so ist.

Die db schliesse ich nach dem letzten Insert. Gehört doch aber auch woanders hin?

Code: Alles auswählen

#!/usr/bin/python3
import sys
import os
import RPi.GPIO as gpio
import MFRC522
import MySQLdb
import MySQLdb.cursors
from contextlib import closing
import time

DB_HOST = "XXX"
DB_USER = "XXX"
DB_PASSWORD = "XXX"


def connect():
    return MySQLdb.connect(host=DB_HOST, port=3307,
        user=DB_USER , passwd=DB_PASSWORD, db="Schiessbuch",
        cursorclass=MySQLdb.cursors.DictCursor)

def benutzer_anzeigen(db):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""Select tbl_Benutzer.ID, tbl_Benutzer.UName, tbl_Benutzer.UVorname
            FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID""")
        for row in cursor:
           print( row["ID"], row["UName"], row["UVorname"])


def benutzer_registriert(db, user_id):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""SELECT tbl_Schiesstand.UserID
                        FROM (tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID) 
                        INNER JOIN (tbl_Stand INNER JOIN (tbl_Kaliber INNER JOIN tbl_Schiesstand ON tbl_Kaliber.ID = tbl_Schiesstand.KaliberID) 
                        ON tbl_Stand.ID = tbl_Schiesstand.StandID) ON tbl_Benutzer.ID = tbl_Schiesstand.UserID
                        Where  tbl_Schiesstand.UserID = %d AND  (DATE(tbl_Schiesstand.Beginn) = CURDATE() AND NOT DATE(tbl_Schiesstand.Ende) = CURDATE())""" % (user_id))
        
        if cursor.fetchone():
            print("Du bist bereits registriert")
            time.sleep(5)
            main()
        else:
            pass



def stand_anzeigen(db):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("Select ID, StandLang From tbl_Stand") 
        for row in cursor:
            print( row["ID"], row["StandLang"])

def kaliber_anzeigen(db, stand_id):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""Select tbl_Kaliber.ID, tbl_Kaliber.KaliberLang, tbl_Stand.Standlang
            From tbl_Stand INNER JOIN tbl_Kaliber ON tbl_Stand.ID = tbl_Kaliber.StandID
            Where tbl_Stand.ID = %s""", (stand_id,))
        for row in cursor:
            print( row["ID"], row["KaliberLang"])

def schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht):
    print()
    with closing(db.cursor()) as cursor:
        sql_query = """INSERT INTO `tbl_Schiesstand` (`UserID`, `StandID`, `Platz`, `KaliberID`, `Beginn`, `Standaufsicht`) VALUES (%s, %s, %s, %s, NOW(), %s)"""
        data = (user_id, stand_id, platz, kaliber_id, standaufsicht) 
        cursor.execute(sql_query, data) 
        db.commit()
        cursor.close()
        db.close()
        
    print("Du wurdest erfolgreich registriert") 

def input_int(prompt):
    while True:
        try:
            print()
            return int(input(prompt))
        except ValueError:
            print("Fehler: Keine Zahl eingegeben.")
            
#Funktion für die RFID Karten zulesen

def karte_erkennen():
    continue_reading = True
    MIFAREReader = MFRC522.Reader(0, 0, 22)

    # This loop keeps checking for chips. If one is near it will get the UID and authenticate
    while continue_reading:
        # Scan for cards
        (status, TagType) = MIFAREReader.MFRC522_Request(MIFAREReader.PICC_REQIDL)

        # If a card is found
        if status == MIFAREReader.MI_OK:
            print("Card detected")

        # Get the UID of the card
        (status, uid) = MIFAREReader.MFRC522_Anticoll()

        # If we have the UID, continue
        if status == MIFAREReader.MI_OK:
            # Print UID
            print("Card read UID: " + str(uid[0]) + "," + str(uid[1]) + "," + str(uid[2]) + "," + str(uid[3])+ "," + str(uid[4]))
            MIFAREReader.AntennaOff()
            readcontinue_reading=False
            return str(uid[0])+str(uid[1])+str(uid[2])+str(uid[3])+str(uid[4])


def Gpio():
    # Show no warnings
    GPIO.setwarnings(False)
    # Use GPIO pin numbers
    GPIO.setmode(GPIO.BOARD)        

def cardread():
    cardId=karte_erkennen()
    return cardId


def kartenIUd_UserID(db):
    print()
    with closing(db.cursor()) as cursor:
        cursor.execute("""SELECT tbl_Benutzer.ID
                            FROM tbl_Benutzer INNER JOIN tbl_Karten ON tbl_Benutzer.ID = tbl_Karten.UserID
                            WHERE tbl_Karten.KartenNummer=%s """) %(cardID)
        for row in cursor:
            print( row["ID"])
            return row["ID"]



def main():
    try:
        os.system('clear')
        print("Schiessbuch")
        print()
        print("Bitte erfasse deine Daten!")
        #print()
        #print("Bitte Scanne deine Karte!")
        db = connect()


        #cardread()

        benutzer_anzeigen(db)
        user_id = input_int("Bitte deine User ID eingeben: ")
        
        benutzer_registriert(db, user_id)
       # benutzer_registriert(db, kartenIUd_UserID)
        
        stand_anzeigen(db)
        stand_id = input_int("Bitte Stand eingeben: ")
        
        kaliber_anzeigen(db, stand_id)
        kaliber_id = input_int("Bitte Kaliber eingeben: ")
        
        platz = input_int("Auf welchem Stand schiesst du?: ")
        
        standaufsicht = 0
        schuetze_anlegen(db, user_id, stand_id, platz, kaliber_id, standaufsicht)
    
    except KeyboardInterrupt:
        print("Abbruch")
        GPIO.cleanup()
        

if __name__ == '__main__':
    main()


Vielen Dank und Liebe Grüße
Benutzeravatar
__blackjack__
User
Beiträge: 13063
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@matze1708: Wie kommt das Gefühl denn zustande? Vielleicht durch einen `NameError` weil `GPIO` nicht definiert ist? Und das `GPIO.cleanup()` möchte man nicht nur aufrufen wenn der Benutzer das Programm abgebrochen hat, sondern *immer* wenn das Programm beendet wird. Also beispielsweise auch wenn eine andere Ausnahme zum Programmende führt. Das gehört also in einen ``finally``-Block.

Das schliessen der Datenbankverbindung ist in der Funktion mit dem INSERT in der Tat schlecht aufgehoben. Warum sollte das ausgerechnet von der Funktion zum Anlegen eines Schützen eine Nebeneffekt sein? Die weiss doch gar nicht ob das Programm mit der Datenbank durch ist, oder die noch gebraucht wird. Das weiss die Hauptfunktion, wann sie am Ende ist. Und da kann man dann auch ``with`` und `closing()` verwenden.

`sys` wird importiert, aber nicht verwendet.

Den Terminalinhalt löschen, und das dann auch noch mit nicht portablen Systemprogrammen ist keine gute Idee.

`benutzer_registriert()` ruft rekursiv `main()` auf – das ist falsch. Und trägt vielleicht auch zu Deinem Eindruck bei das der Benutzer das Programm mit Strg+C nicht abbrechen kann, denn falls so ein rekursiver Aufruf existiert, führt ein Abbruch in `main()` ja dazu das der Rest des vorherigen Aufrufs von `main()` abgearbeitet wird. Die Funktion sollte einen Wahrheitswert zurückgeben der aussagt ob der Benutzer bereits registriert ist oder nicht, und der Aufrufer reagiert dann entsprechend darauf.

In der Funktion wird ein Wert per Zeichenkettenoperation in eine SQL-Anweisung hinein formatiert – das sollte man nie selbst machen. Machst Du an anderen Stellen ja auch nicht selbst, sondern überlässt das dem Datenbankmodul.

``else: pass`` ist überflüssig und kann weg.

In `kaliber_anzeigen()` steht `StandLang` im SELECT, wird im Code aber nicht verwendet.

Die vier Funktionen zwischen `schuetze_anlegen()` und `main()` werden nirgends verwendet.

`continue_reading` in `karte_erkennen()` wird nicht wirklich verwendet.

Das erste ``if`` auf `status` gibt zwar etwas aus, aber der Rest des Codes wird auch ausgeführt wenn der Status nicht in Ordnung war. Das ist sicher nicht so gewollt.

Der Rückgabewert der Funktion ist falsch weil es passieren kann das unterschiedliche RFID-Tags zum gleichen Wert führen. Man muss die Komponenten entweder eindeutig trennen, oder dafür sorgen das alle die gleiche Breite/Zahl von Zeichen haben.

`cardread()` ist überflüssig, das ist effektiv ja nur ein anderer Name für `karte_erkennen()`.

`kartenIUd_UserID()` ist sehr komisch. Angefangen beim Namen, weiter beim Versuch Zeichenkettenformatierung auf den *Rückgabewert* der `execute()`-Methode anzuwenden, und dann kommt ein ``return`` in einer Schleife das bedingungslos ausgeführt wird.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Sirius3
User
Beiträge: 17737
Registriert: Sonntag 21. Oktober 2012, 17:20

In `benutzer_registriert` ist mir die SQL-Anweisung viel zu kompliziert. Die vielen verschachtelten JOINs versteht ja niemand.
Warum wird da tbl_Benutzer, tbl_Karten, tbl_Stand und tbl_Kaliber eingebunden, da die Tabellen doch gar nicht benutzt werden?
`tbl_Schiesstand.Ende` solltest Du auf NULL prüfen.
matze1708
User
Beiträge: 112
Registriert: Dienstag 12. März 2019, 11:49

Sirius3 hat geschrieben: Dienstag 19. März 2019, 13:49 In `benutzer_registriert` ist mir die SQL-Anweisung viel zu kompliziert. Die vielen verschachtelten JOINs versteht ja niemand.
Warum wird da tbl_Benutzer, tbl_Karten, tbl_Stand und tbl_Kaliber eingebunden, da die Tabellen doch gar nicht benutzt werden?
`tbl_Schiesstand.Ende` solltest Du auf NULL prüfen.
Hast du recht, habe ich mal gekürzt. Ich will ja nur schauen ob die User ID die ich eingebe auch zur aktuellen Zeit da ist.

Code: Alles auswählen

cursor.execute("""SELECT tbl_Schiesstand.UserID
                        FROM tbl_Schiesstand
                        Where  tbl_Schiesstand.UserID = %d AND  (DATE(tbl_Schiesstand.Beginn) = CURDATE() AND NOT DATE(tbl_Schiesstand.Ende) = CURDATE())""" % (user_id))

@blackJack

ich muss das grade alles noch mal durcharbeiten.
Antworten