Entwickler-Ecke
Datenbanken - if funktion benötigt habe aber keine ahnung wie
EddieMcCool - So 17.02.08 20:00
Titel: if funktion benötigt habe aber keine ahnung wie
habe diesen quelltext:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14:
| procedure TForm2.BitBtn2Click(Sender: TObject); begin form3.Table1.Insert; form3.Table1.FieldValues['Datum'] := dbedit2.text; form3.Table1.FieldValues['Stunde'] := DBLookupComboBox3.text; form3.Table1.FieldValues['Haus'] := DBLookupComboBox1.text; form3.Table1.FieldValues['Raum'] := DBLookupComboBox2.text; form3.Table1.FieldValues['Klassenstufe'] := DBLookupComboBox4.text; form3.Table1.FieldValues['Klasse'] := DBLookupComboBox5.text; form3.Table1.FieldValues['Fach'] := DBLookupComboBox6.text; form3.Table1.FieldValues['Materialien'] := DBLookupComboBox7.text; form3.Table1.FieldValues['Lehrer'] := dbedit1.text; form3.Table1.Post; end; |
jetzt soll wenn die ersten vier fieldvalues bereits schon hintereinander in einem datensatz vorhanden sind eine fehlermeldung erscheinen und nicht der gleiche datensatz noch einmal in der tabelle auftachen.
hoffe jemand hat eine ahnung ich weis einfach nich wie ich dass machen soll.
aber trotzdem schon mal danke an alle.
Moderiert von
Gausi: Delphi-Tags hinzugefügt
icho2099 - So 17.02.08 20:32
da musst du wohl erst mal in Table1 nachschauen, ob es schon einen Satz mit den Werten gibt und dann entscheiden was passieren soll.
Die Methode locate von Table1 sollte dir helfen:
Delphi-Quelltext
1: 2: 3:
| function Locate(const KeyFields: string; const KeyValues: Variant; Options: TLocateOptions): Boolean; |
Moderiert von
Gausi: Delphi-Tags hinzugefügt
EddieMcCool - So 17.02.08 20:40
ja aber das nützt mir ja nichts es sind enorm viele datensätze und er soll ja bei der eingabe erkennen ob dieser datensatz bis zum 4. wert schon vorhanden ist.aber trotzdem danke.
Delete - So 17.02.08 22:31
wie wär's damit, die ersten vier felder als primary keys zu spezifizieren? dann macht das die db von alleine...
GericasS - Mo 18.02.08 08:01
Titel: Re: if funktion benötigt habe aber keine ahnung wie
EddieMcCool hat folgendes geschrieben: |
| habe diesen quelltext |
nutze demnächst bitte die Delphi-Tags damit alles ein wenig übersichtlicher wird !
LG
GericasS
Moderiert von
Narses: Quote gekürzt
Xong - Mo 18.02.08 09:19
Grenzgaenger hat folgendes geschrieben: |
| wie wär's damit, die ersten vier felder als primary keys zu spezifizieren? dann macht das die db von alleine... |
Außerdem dürfte eine Selectanweisung mit einer entsprechenden WHERE-Bedingung nicht sehr schwer aufzusetzen sein.
EddieMcCool - Fr 22.02.08 20:59
ja sorry ich kann leider nicht viel mit den hilfestellungen anfangen ich bin blutiger anfänger. wäre echt nett falls jemand mir das mal einfacher erklären könnte.
habe mich aber trotzdem daran versucht. das mit dem primärkey klappt zwar aber dann kann ich gar kein wert mehr eingeben der schon vorhanden ist. er soll aber nur nicht speichern wenn alle vier in einem einzigen datensatz hintereinander schon mal vorhanden sind hoffe jemand kann mir helfen.
EddieMcCool - Sa 23.02.08 21:02
hat den niemand mitleid?
EddieMcCool - So 24.02.08 17:52
hat noch jemand ne idee?
MSCH - So 24.02.08 18:48
Versuchs mal so:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| var Query: TAdoQuery; Exists: Boolean; begin Query:= TAdoQuery.Create(Nil); try Query.SQL.Text:= 'Select Count(*) as CNT from TableName where spalte1= :wert1 and spalte2 = :wert2'; Query.ParamByName('Wert1').Value:= '1'; Query.ParamByName('Wert2').Value:= '2'; Query.Connection:= <deine Verbindungskomponente>; try Query.Open; Exists:= Query.FieldByName('CNT').asInteger>0; except Exists:= False; end; Finally Query.Free; end; if not Exists then else end; |
alles klar?
grez
Msch
EddieMcCool - So 24.02.08 19:13
sorry funzt irgendwie nicht bereits bei der deklaration von query spinnt er
icho2099 - So 24.02.08 20:12
Wie genau stellst du dir denn "bei der Eingabe schon merken" vor ?
Man kann jedesmal, wenn ein Zeichen für einen der vier Werte eingegeben wird,
prüfen, ob es bereits einen solchen Satz gibt.
Man kann auch erst alle vier Werte eingeben und dann prüfen.
Man kann die Prüfung parallel in einem Thread ausführen, dann wird die Eingabe
nicht unterbrochen, die Programmierung ist dann etwas aufwendiger, du musst u.a.
darauf achten, dass der Thread seine eigene Session verwendet.
oder du machst es eben doch mit locate() in deiner Methode BitBtn2Click()
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22:
| procedure TForm2.BitBtn2Click(Sender: TObject); begin If Table1.Locate('Datum;Stunde;Haus;Raum', VarArrayOf([dbedit2.text,DBLookupComboBox3.Text, DBLookUpComboBox1.Text,DBLookUpComboBox2.Text]), [loCaseInsensitive]) then begin MessageDlg('Satz bereits vorhanden',mtWarning,mbOK,0); end else begin form3.Table1.Insert; form3.Table1.FieldValues['Datum'] := dbedit2.text; form3.Table1.FieldValues['Stunde'] := DBLookupComboBox3.text; form3.Table1.FieldValues['Haus'] := DBLookupComboBox1.text; form3.Table1.FieldValues['Raum'] := DBLookupComboBox2.text; form3.Table1.FieldValues['Klassenstufe'] := DBLookupComboBox4.text; form3.Table1.FieldValues['Klasse'] := DBLookupComboBox5.text; form3.Table1.FieldValues['Fach'] := DBLookupComboBox6.text; form3.Table1.FieldValues['Materialien'] := DBLookupComboBox7.text; form3.Table1.FieldValues['Lehrer'] := dbedit1.text; form3.Table1.Post; end; end; |
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!