Prüfung auf Doppelte Einträge



  • Hi,

    Ich benütze ne TTable und ne DBGrid um auf ne Datenbank zugriff zu haben.(Ja ich weiss is nicht gerade empfehlenswert aber für mich reicht das vollkommen aus)

    Mein Problem ist das der User sich die Strings die er in der Tabelle haben möchte über ne ComboBox aussucht und dann über nen Button die Wahl bestätigt. Dies geschieht leider auch bei doppelten Einträgen. Nun möchte ich doppelte Einträge verhindern. Mit meinem Code klappts irgendwie nicht. hat jemand nen Vorschlag?
    Hier nochmal die Infos:

    Combobox -- User macht Auswahl //Funktionert
    Button -- User Bestätigt eintrag in DBGrid (Tabelle)// Funktioniert

    Jetzt soll er überprüfen ob es diesen String schon gibt. Falls ja return (true) falls nein return (false)

    Danke

    Falls ihr nen guten link habt dann her damit.



  • Hallo

    wie fühlst du den die ComboBox? Ist ja sicher eine Abfrage über die Datenbank. Dann lohnt es sich, die Daten bereits so vorliegen zu haben, das es gar keine doppelten Einträge nach der Abfrage gibt. Deshalb : entweder bereits bei der Eingabe der Auswahldaten eine Überprüfung machen, und das Feld auf Unique setzen.

    Oder du verwendest beio der Abfrage das Schlüsselwort DISTINCT, um automatisch alle Werte nur einmal zu haben.

    bis bald
    akari



  • Ich glaub das Problem is noch nicht klar. Es stimmt zwar das ich die ComboBox über ne Tabelle einer Datenbak fülle aber mehr nicht. Die Daten die der user sich aussucht werden in eine extra Tabelle geschieben. Das heißt wenn wir in der Tabelle

    Drogen:

    Haschisch
    Kokain
    Opium
    LSD
    XTC

    haben dann kann der User sich quasi die gewünschten Drogen 😃 aussuchen.

    Tabelle Wunschliste:

    Haschisch
    Kokain
    Opium

    so und wenn der vollgedröhnt am Rechner sitzt und 2 mal Haschisch wählt dann soll der Rechner des irgendwie verhindern. Hoff es is jetzt deutlicher

    Gruß



  • Hallo

    achso.
    na dann must du eben im Hintergrund eine weitere Abfrage machen, die den ausgewählten Ausdruck in der Zieltabelle sucht, und bei Erfolg die Auswahl verhindert.

    bis bald
    akari



  • Ja soviel weiß ich auch schon. 🙂

    Aber wie stell ich das am besten an. Ich hab mir überlegt jedesmal alles in ein Array zu schmeissen und dann immer vor dem Löschen oder schreiben zu gucken ob sich der string im Array befindet.... gibts da ne elegantere Lösung?

    N00b grüße



  • Hallo

    nein, eine Abfrage. Du schreibst die Werte der ComboBox ja in ein Feld einer Tabelle. Also machst in der Button-Methode noch vor dem Einfügen eine Überprüfung mit einer weiteren TQuery, die einfach mittels "SELECT <field> FROM <table> WHERE <field> = '<Value>'". Aus dem Ergebnis dieser Abfrage brauchst du nur den RecordCount. Ist der nicht 0, gibt es bereits einen Eintrag mit dem Wert, und du kannst die Button-Methode mit einer Fehlermeldung abbrechen.

    bis bald
    akari



  • wieso ein extra Array? die ComboBox hat doch schon eines

    ComboBox->Items->Strings[Index]
    

    und die Klasse TStrings besitzt eine Eigenschaft IndexOf, d.h sobald der User einen Eintrag in die Combobox macht schaust du mit IndexOf nur noch ob der schon existiert



  • Hallo

    @Linnea : du hast es auch erstmal falsch verstanden. Nicht um die ComboBox geht es, sondern um die Daten die in dem DBGrid angezeigt werden. Das heißt jeder Wert aus der ComboBox soll nur einmal in den Daten des DBGrids auftauen. Deshalb muß die Datenbank überprüft werden, nicht die ComboBox.

    bis bald
    akari



  • Hohoho langsam. Ich benütz die TQuery nicht. Nur die DataSource TTable und DBGrid. Das mit der TQuery sieht verdammt kompliziert aus und ich hab schon genug probleme... 😞

    Dein Post versteh ich nicht Linnea. Es soll überprüft werden ob IN DER TABELLE schon das gewählte Item ist. Nicht anders herum. Oder hab ich da was falsch verstanden?

    Danke



  • Hallo

    TQuery zu benutzen ist kein Problem, du solltest aber SQL-Grundkenntnisse besitzen. Geh mal in die bCB-Hilfe unter TQuery::SQL, dort ist ein Minimal.Beispiel.

    bis bald
    akari



  • Puh das wirft mich ja wieder ganz schön weit zurück..... ich meld mich bestimmt wieder.

    Danke für die Hilfe

    😞


  • Mod

    Hallo

    anderer Ansatz

    mach das Feld in dem keine doppelten Eintraege stehen duerfen "unique"
    und fang den Fehler beim schreiben ab und bring eine Meldung

    MfG
    Klaus



  • Ja danke ich versuchs. Zur Not nehm ich einfach ein Array welches gleichzeitig abgefragt wird. Sollte es zur übereinstimmung kommen bring ich die Fehlermeldung. Ansonsten is ja ok.

    Danke und Bahala NA!



  • also nur damit ich das recht verstehe:

    du hast eine Combobox 1 die mit Daten aus einer Datenbank gefüttert wurde, dann wählt der User Einträge aus dieser Combobox 1 aus welche dann in eine Combobox 2 übertragen werden und du willst jetzt, dass der User nicht 2- oder mehrfach einen Eintrag aus ComboBox 1 in Combobox 2 schreibt, richtig?

    wenn das so stimmt müßtest du die Einträge aus ComboBox 1 ja irgendwie in ComboBox 2 schreiben und in diesem Moment mußt du einfach nur prüfen ob der Eintrag in ComboBox 2 bzw. in deiner Datenbank, z.B. mit FindKey von TTables



  • Hallo

    @Linnea : nein, es gibt nur ein ComboBox 😕

    lies dir am besten nochmal den zwieten Post von Croatiancow durch, da hab ichs verstanden.

    bis bald
    akari


Anmelden zum Antworten