Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - Wert vergleichen
Arne Danikowski - Fr 31.07.09 09:54
Titel: Wert vergleichen
Hallo ich habe folgendes Problem:
über einen Button generiere ich eine Zufallszahl. Diese soll einen 4 Stelligen Pin ergeben
Delphi-Quelltext
1: 2: 3: 4: 5: 6:
| pass := IntToStr(Random(10000)); while Length(pass) < 4 do pass := '0' + pass; DM.KinderQuery.Edit; DM.KinderQuery.FieldByName('PIN').AsString:= pass; DM.KinderQuery.Post; |
Nun möchte ich die eben generierte Pin mit allen anderen Datensätzen vergleichen. Denn Die Pin darf ja nicht doppelt vorkommen.
Ich habe da schon ein wenig mit einer while Schleife versucht zu basteln aber nicht hinbekommen:
Delete - Fr 31.07.09 10:01
SQL-Anweisung
1: 2: 3:
| SELECT COUNT(*) FROM TABELLE WHERE pass = :pass |
Wenn das Ergebnis > 0 ist, gibt es die Pin bereits. Übrigens:
Delphi-Quelltext
1:
| pass := Format('%.4d',[Random(10000)]); |
ist kürzer ;)
Arne Danikowski - Fr 31.07.09 10:23
Vielen Dank für die Antwort, kannst Du mir ein Beispiel dafür geben? So ganz verstehe ich das nicht.
Delete - Fr 31.07.09 10:34
Pack eine Query auf Dein Formular und gib das Statement von oben in der Eigenschaft SQL ein (mit dem Doppelpunkt, der kennzeichnet einen Parameter). Dann kannst Du von Delphi aus prüfen.
Delphi-Quelltext
1: 2: 3: 4:
| Query.Close; Query.ParamByName('pass').Value := pass; Query.Open; Vorhanden := Query.Fields[0].AsInteger > 0; |
Arne Danikowski - Fr 31.07.09 11:02
Ok ich habe nun folgendes:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11:
| procedure Tfrm_admin.BitBtn1Click(Sender: TObject); var pin,pass: string; vorhanden:Boolean; begin pin := Format('%.4d',[Random(10000)]);DM.Query.Close; DM.Query.SQL.TEXT:='SELECT COUNT (*) FROM KINDER WHERE passwort = :pass'; DM.Query.Parameters.ParamByName('pass').Value := pass; DM.Query.Open; Vorhanden := DM.Query.Fields[0].AsInteger > 0; Label12.Caption := BoolToStr(vorhanden); |
Der Wert von vorhanden ist immer 0, egal. ob die Pin schon vorhanden ist oder nicht
Delete - Fr 31.07.09 11:05
Delphi-Quelltext
1:
| DM.Query.Parameters.ParamByName('pass').Value := pin; |
Arne Danikowski - Fr 31.07.09 13:47
Vielen Dank für die Hilfe. Ich habe es mit diesen Hinweisen geschafft. Zur vollständigkeit hier
der gesamte "KOT" :)
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: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40:
| procedure Tfrm_admin.BitBtn1Click(Sender: TObject); var pin, pass: string; vorhanden: Boolean; pruef:Integer; begin pin := Format('%.4d', [Random(10000)]);
DM.Query.Close;
DM.Query.SQL.TEXT := 'SELECT COUNT (*) FROM KINDER WHERE passwort = :pin'; DM.Query.Parameters.ParamByName('pin').Value := pin;
DM.Query.Open;
Vorhanden := DM.Query.Fields[0].AsInteger > 0;
pass := BoolToStr(vorhanden);
pruef:= StrToInt(pass);
if pruef < 0 then begin ShowMessage('Passwort bereits vergeben. Bitte erneut generieren!'); DBEdit10.Text:=''; end else
DM.Query2.Edit; DM.Query2.FieldByName('Passwort').AsString := pin; DM.Query2.Post; end |
So funktioniert es jedenfals.
BenBE - So 02.08.09 17:53
Anstatt deiner komischen Verrenkungen mit BoolToStr und StrToInt würd ich in der IfAbfrage einfach if Vorhanden then ... nehmen. Das ist tausendmal schneller ... Und vor allem wesentlich sauberer.
jaenicke - So 02.08.09 18:03
Oder direkt 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: 24: 25: 26: 27: 28: 29: 30:
| procedure Tfrm_admin.BitBtn1Click(Sender: TObject); var pin, pass: string; begin pin := Format('%.4d', [Random(10000)]);
DM.Query.Close;
DM.Query.SQL.TEXT := 'SELECT COUNT (*) FROM KINDER WHERE passwort = :pin'; DM.Query.Parameters.ParamByName('pin').Value := pin;
DM.Query.Open;
if DM.Query.Fields[0].AsInteger > 0 then begin ShowMessage('Passwort bereits vergeben. Bitte erneut generieren!'); DBEdit10.Text:=''; end else
DM.Query2.Edit; DM.Query2.FieldByName('Passwort').AsString := pin; DM.Query2.Post; end |
Und in dem gehighlighteten Teil stimmt die Einrückung nicht mit dem Quelltext überein. Die Einrückung hieße, dass alles in else ist, im Quelltext ist aber nur das
DM.Query2.Edit; im else, da begin..end fehlt.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2025 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!