Entry-Felder Problem

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
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

(Bitte verschieben falls dieser Thread an der falschen stelle ist)

Und zwar hab ich folgende Frage oder Problem, je nachdem wie man es sehen
möchte.

Die ganzen "Labels" hab ich schon so anlegen können das diese mir
automatisch erstellt werden (also über for-schleife usw.)

Das ganze hab ich nun auch versucht mit den Entry-Felder zu machen
Probeweise hatte ich nur ein Entry-Feld damit anlegen lassen um mögliche
Fehler schon vorher zu erkennen.

Mein Problem besteht jetzt darin wenn ich das ganze auch in for-schleifen packe
und diese dann natürlich abschicken will, was eingeben wurde, wird meine
Datenbank nicht mehr gefüllt da der SQL-Syntax ja nicht mehr ganz stimmt.
Für eine Entry-Feld is das ja nicht das Problem aber wenn ich 5 oder 10
Felder so anlegen möchte wüsste ich nicht wie das ganze
so umsetzen kann das trotzdem meine Datenbank befüllt wird.

Für mögliche Vorschläge oder alternativen hab ich ein offenes Ohr :)

Gruß Kalli
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du müßtest das mal ein bisschen präzisier erklären. Es geht scheinbar um ein HTML-Formular? Erstellt von Hand? Mit einer Template-Engine? Und das Formular wird dann wie wohin gesendet? Und wo ist der Zusammenhang zwischen dem Entry-Feld und dem SQL-Syntax?

Sonst poste doch mal deine Code! :-)

Gruß, noisefloor
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ok hier mal eine Auszug aus der Funktion wenn ich Daten ändere.

Code: Alles auswählen

def update():
            ts = time.localtime()
            zeit = (time.strftime('%d.%m.%Y', ts))
            connection = psycopg2.connect("dbname=sqltest")
            cursor = connection.cursor()
            cursor.execute("UPDATE aenderung SET "
                           "datum= %s"
                           "WHERE steueridentnummer =%s",
                          (zeit, suche.get()))


            if self.ausgabetitel.get() != self.titel:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "titel=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabetitel.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "titel_alt = %s,"
                               "titel_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.titel,
                                self.ausgabetitel.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabename.get() != self.name:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "name=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabename.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "name_alt = %s,"
                               "name_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.name,
                                self.ausgabename.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabevorname.get() != self.vorname:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "vorname=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabevorname.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "vorname_alt = %s,"
                               "vorname_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.vorname,
                                self.ausgabevorname.get(),
                               suche.get()))
                connection.commit()
                connection.close()


            if self.ausgabeanrede.get() != self.anrede:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "anrede=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabeanrede.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "anrede_alt = %s,"
                               "anrede_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.anrede,
                                self.ausgabeanrede.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabegeburtstag != self.geburtstag:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "geburtstag=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabegeburtstag.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabestaat.get() != self.staat:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "staat=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabestaat.get(),
                               suche.get()))
                connection.commit()
                connection.close()
            if self.ausgabesteuer.get() != self.steuer:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "steuerident=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabesteuer.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabefinanzamt.get() != self.finanzamt:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "finanzamt=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabefinanzamt.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabestrasse.get() != self.strasse:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "strasse=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabestrasse.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "strasse_alt = %s,"
                               "strasse_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.strasse,
                                self.ausgabestrasse.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabehausnr.get() != self.hausnr:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "hausnummer=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabehausnr.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "hausnummer_alt = %s,"
                               "hausnummer_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.hausnr,
                                self.ausgabehausnr.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabeort.get() != self.ort:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "ort=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabeort.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "ort_alt = %s,"
                               "ort_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.ort,
                                self.ausgabeort.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabeplz.get() != self.plz:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "plz=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabeplz.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "plz_alt = %s,"
                               "plz_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.plz,
                                self.ausgabeplz.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabetelefon.get() != self.telefon:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "telefon=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabetelefon.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "telefon_alt = %s,"
                               "telefon_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.telefon,
                                self.ausgabetelefon.get(),
                               suche.get()))
                connection.commit()
                connection.close()

            if self.ausgabetelefax.get() != self.telefax:
                connection = psycopg2.connect("dbname=sqltest")
                cursor = connection.cursor()
                cursor.execute("UPDATE personen SET "
                               "telefax=  %s"
                               "WHERE steuerident=%s",
                              (self.ausgabetelefax.get(),
                               suche.get()))
                connection.commit()
                cursor.execute("UPDATE aenderung SET "
                               "telefax_alt = %s,"
                               "telefax_neu = %s"
                               "WHERE steueridentnummer = %s",
                               (self.telefax,
                                self.ausgabetelefax.get(),
                               suche.get()))
                connection.commit()
                connection.close()


            self.ausgabetitel.delete (0, END)
            self.ausgabename.delete (0, END)
            self.ausgabevorname.delete (0, END)
            self.ausgabeanrede.delete (0, END)
            self.ausgabegeburtstag.delete (0, END)
            self.ausgabestaat.delete (0, END)
            self.ausgabesteuer.delete (0, END)
            self.ausgabefinanzamt.delete (0, END)
            self.ausgabestrasse.delete (0, END)
            self.ausgabehausnr.delete (0, END)
            self.ausgabeort.delete (0, END)
            self.ausgabeplz.delete (0, END)
            self.ausgabetelefon.delete (0, END)
            self.ausgabetelefax.delete (0, END)


        Button(self.tab_kunde, text='Suchen', command=suchen).grid(row=0, column=2, sticky=W, pady=20)
        Button(self.tab_kunde, text='Ändern', command=update).grid(row=8, column=2)

        label_data = \
            [
                ('Titel','Helvetica 13 bold',4,0,5,5),
                ('Name','Helvetica 13 bold',4,1,5,5),
                ('Vorname','Helvetica 13 bold',4,2,5,5),
                ('Anrede','Helvetica 13 bold',6,0,5,5),
                ('Geburtstag','Helvetica 13 bold',6,1,5,5),
                ('Staatsangehörigkeit','Helvetica 13 bold',6,2,5,5),
                ('Steueridentifikationsnr','Helvetica 13 bold',8,0,5,5),
                ('Finanzamt','Helvetica 13 bold',8,1,5,5),
                ('Strasse','Helvetica 13 bold',10,0,5,5),
                ('Hausnummer','Helvetica 13 bold',10,1,5,5),
                ('Postleitzahl','Helvetica 13 bold',12,0,5,5),
                ('Ort','Helvetica 13 bold',12,1,5,5),
                ('Telefon','Helvetica 13 bold',14,0,5,5),
                ('Telefax','Helvetica 13 bold',14,1,5,5)
            ]

        for text, font, row, column, pady, padx in label_data:
            Label(self.tab_kunde, text=text, font=font).grid(row=row, column=column, pady=pady, padx=padx)

        # entry_data =\
        #     [
        #         ("self.ausgabetitel",10,3,0,5),
        #         ("self.ausagebname",10,3,1,5)
        #     ]
        #
        # for ausgabeentry, font, row, column, padx in entry_data:
        #     ausgabeentry = Entry(self.tab_kunde, font=font)
        #     ausgabeentry.grid(row=row, column=column, padx=padx)


        #Eingabefelder
        self.ausgabetitel= Entry(self.tab_kunde, font=10)
        self.ausgabetitel.grid(row=3, column=0, padx=5)
        self.ausgabename = Entry(self.tab_kunde, font=10)
        self.ausgabename.grid(row=3, column=1, padx=5)
        self.ausgabevorname = Entry(self.tab_kunde, font=10)
        self.ausgabevorname.grid(row=3, column=2, padx=5)
        self.ausgabeanrede = Entry(self.tab_kunde, font=10)
        self.ausgabeanrede.grid(row=5, column=0, padx=5)
        self.ausgabegeburtstag = Entry(self.tab_kunde, font=10)
        self.ausgabegeburtstag.grid(row=5, column=1, padx=5)
        self.ausgabestaat = Entry(self.tab_kunde, font=10)
        self.ausgabestaat.grid(row=5, column=2, padx=5)
        self.ausgabesteuer = Entry(self.tab_kunde, font=10)
        self.ausgabesteuer.grid(row=7, column=0, padx=5)
        self.ausgabefinanzamt = Entry(self.tab_kunde, font=10)
        self.ausgabefinanzamt.grid(row=7, column=1, padx=5)
        self.ausgabestrasse = Entry(self.tab_kunde, font=10)
        self.ausgabestrasse.grid(row=9, column=0, padx=5)
        self.ausgabehausnr = Entry(self.tab_kunde, font=10)
        self.ausgabehausnr.grid(row=9, column=1, padx=5)
        self.ausgabeplz = Entry(self.tab_kunde, font=10)
        self.ausgabeplz.grid(row=11, column=0, padx=5)
        self.ausgabeort = Entry(self.tab_kunde, font=10)
        self.ausgabeort.grid(row=11, column=1, padx=5)
        self.ausgabetelefon = Entry(self.tab_kunde, font=10)
        self.ausgabetelefon.grid(row=13, column=0, padx=5)
        self.ausgabetelefax = Entry(self.tab_kunde, font=10)
        self.ausgabetelefax.grid(row=13, column=1, padx=5)
Leider nix mit HTML und alles mit Hand geschrieben.

Ps.: Mir ist auch bewusst das ich hier noch einiges vereinfachen könnte ;)
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: das Chaos will ja nun wirklich niemand lesen. Warum baust Du für jedes UPDATE eine neue Connection auf?!? Warum heißt es einmal steuerident und einmal steueridentnummer? Warum wird in aenderung nur jeweils die letzte Änderung gespeichert? Was für einen Sinn hat es die Änderung aller Felder im selben Eintrag zu speichern?
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Chaos? :oops:

Ich hab ja auch geschrieben das mir bewusst is das ich da noch einiges verbessern kann
und ich weiß das es dabei auch um die connection handelt.

Du siehst es jetzt vllt das es immer die gleichen Einträge sind so is aber nicht
Ich spreche 2 verschiedene Tabellen an, einmal die der personen direkt und eine
die alle Änderungen speichert.
Heißt wenn ich mir jetzt Mustermann XYZ aufrufe werden alle Daten angezeigt.
Ändere ich jetzt von Herrn Mustermann XYZ seinen Nachnamen in "Müller"
Wird der alte Name und der neue Name an die Tabelle eingetragen für die
Änderung mit Datum damit man nachvollziehen kann wer und was geändert an
dem jeweiligem Tag.

Aber der Name wird trotzdem ganz normal in der Tabelle wo alle Personen
drinnen stehen geändert.

Das immer nur die letzte Änderung gespeichert wird liegt an meinem Chef der
das so gerne hätte.
Wie kommst du drauf das die Änderungen im selben Eintrag sind?
Am Anfang hatte ich jedes mal nen neuen Eintrag bekam wenn ich alle Daten geändert habe
das heißt das ich wegen einer Person gefühlte 10 Einträge bekommen, das is blödsinn in meinen
Augen. Wenn es mal vorkommt das alle Daten an einem Tag geändert werden oder z.B. nur die
Anschrift dann gibts halt nur einen Eintrag aber wenn man am nächsten Tag was ändert gibts
einen neuen Eintrag.

Ps.: Ich Entschuldige mich mal komplett für diesen Satzbau!

Pps.: das mit der Steueridentnummer is zum auseinander halten konnte ich mir besser merken
BlackJack

@Kalli87: Das hat Ausmasse da würde ich nicht mehr von „einiges Verbessern” reden, denn wenn man das verbessert ist so gut wie keine einzige Quelltextzeile wie sie vorher war. Das meiste wäre weg, weil vieles davon in eine entsprechende Datenstruktur gehört die Eingabefelder und Datenbankspalten miteinander verbindet.
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

@Kalli87: Du hast eine Tabelle "aenderungen" die jeweils mit einem UPDATE geändert wird, das heißt dass alle Änderungen in einer Tabellenzeile landen. Von Datum seh ich nichts, und auch nicht, dass neue Einträge zu einem neuen Tag gemacht werden. Die *_neu-Felder sind überflüssig, weil die neuen Einträge ja in der Personen-Tabelle stehen.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst auch alle Daten inkl. Änderungen in einer Tabelle verwalten. Jeder Kunde (oder was da auch immer verwaltet wird) bekommt eine eindeutige ID (nennen wir sie mal UID), jeder Datensatz eine ID, die hochgezählt wird. Wenn sich bei einem Kunden was ändert, schreibst du einen neuen Datensatz mit allen (neuen) Daten. Die aktuellen Kundendaten für Kunden UID sind immer die mit der höchsten ID. Wenn du alle Änderungen an Daten zu Kunde UID sehen willst, fragst du die Datensätze nach UID ab, sortiert nach ID.

Funktioniert, aber ob das auch für deinen Anwendungsfall praktikabel ist, muss du selber entscheiden.

Oder du nimmst direkt eine Datenbank, die Revisionen zu Datensätzen automatisch anlegt, wie CouchDB ;-)

Gruß, noisefloor
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Oh ha, das mir hier gleich der Kopf abgerissen wird
hatte ich nicht erwartet :?

@Sirius3
in Zeile 6 haste doch den Syntax stehen für das Datum. (Um es zu akualisieren)
Sobald ich eine "Person neu anlege" wir in der Tabelle
"aenderung" ein Datensatz mit einer eindeutigen zuordenbaren
Nummer und dem Datum angelegt. Wenn bei dieser Person
jetzt was geändert wird hier in diesem Auszug
des Quellcodes das Datum aktualisiert und es werden die
Daten übergeben.
Das du hier nicht alles siehst ist klar und ich glaub wenn
ich den restlichen Code posten würde, würdet ihr
schreiend im Dreieck springen.

@Blackjack
Bring mir ein Beispiel wie du hier was verbessern würdest,
es ist ja nicht so das ich nicht lernen will aber ihr dürft nicht
vergessen das ich immer noch "alleine" dastehe mit der ganzen
Sache hier.
Alleine auch nicht wirklich in diesem Sinne, da ihr mir ja hier helft
wo ihr könnt Bzw. helfen wollt.

@noisefloor
An sich keine schlechte Idee, meine eindeutige ID hab ich ja schon
und das wäre die Steueridentifikationsnummer und die bleibt ja immer
gleich und diese sehe ich halt als "Primärschlüssel" bis jetzt an
Sirius3
User
Beiträge: 17747
Registriert: Sonntag 21. Oktober 2012, 17:20

ich beziehe mich auf folgenden Satz:
Kalli87 hat geschrieben:aber wenn man am nächsten Tag was ändert gibts einen neuen Eintrag.
Das steht aber so nicht in Deinem Code.
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Ach verdammt jetzt seh ich was du
meinst :cry:
Kalli87
User
Beiträge: 281
Registriert: Montag 10. November 2014, 11:27

Muss ich weiter testen ob es wirklich so is.
Morgen schau ich nach ob das doch klappt wie ichs
mir vorgestellt habe.

Aber wir sind trotzdem am Thema vorbeigeschossen.
Antworten