![]() |
TEdit-Feld MUSS einen Wert enthalten!!
Hi Leute, ich habe einige Edit-Felder in meinem Programm und bei einem möchte ich es so machen, dass der User aufgefordert wird, in dieses etwas zu schreiben.
Es ist ein TEdit-Feld, was auf eine Datenbank zugreift. In dieses Feld wird das Geburtstatum geschrieben. Wenn der User nun den Datensatz speichern möchte, dann soll überprüft werden, ob das TEdit3-Feld einen Wert enthällt oder nicht. Wenn kein Wert drinn steht, dann soll eine MessageBox erscheinen mit der Aufforderung, dass der User einen Geburtstag eingeben MUSS. Wie kann ich das machen? |
Wenn Edit1 keinen Text enthält, ist Edit1.Text ein Leerstring.
Also sieht das so aus:
Code:
if Edit.Text = '' then MessageDlg('Du hast keinen Wert eingegeben', mtError, mbOK, 0)
else begin //In Datenbank reinschreiben end; |
Und wenn ich das Datum nicht weiß, werde ich gezwungen was falsches rein zu schreiben? :roll:
|
Hi, danke für den code. Der funktioniert prima.
Es muß ein Geburtsdatum rein. Es handelt sich hierbei um eine Kundendatenbank. Da weiss man das Geburtsdatum. Es lässt sich nicht anders lösen, da sonst der Geburtstagsfilter nicht funktioniert! |
Stürzt der Filter ab, wenn er über ein leeres Feld gehen muß? dann würde ich den noch mal überarbeiten.
|
Hi, nein der Filter stürtz mir nicht ab.
Es ist so. Ich habe da einen Filter, der mir alle Personen anzeigt, die von Heute weg bis in einer Woche, Geburtstag haben. Wenn jetzt aber im Geburtstagsfeld kein Wert steht, dann kommt, wenn ich mir die Geburtstagskinder ansehen will, immer die Meldung: '2002' ist kein gültiges Datum. Und angezeigt bekomme ich dabei auch keine Geburtstagsliste. Darum wird das Feld benötigt. |
Wie wäre es mit einer Abfrage
Code:
Oder auch einem try-except-Block.
if Edit.Text = '' then ...
|
Hi, ich habe ja einen code zusammengeschnipselt:
Code:
So sieht der Code zur Zeit aus.
procedure TKundendaten.SpeichernClick(Sender: TObject);
begin if DBEdit38.Text = '' then MessageDlg('Sie haben das Geburtsdatum nicht eingetragen. Bitte tragen Sie jetzt ein Geburtsdatum ein!', mtError,[mbOK], 0) else try DM.ADOSHaupt.Post; //DM.ADOSHaupt.Refresh; except on exception do MessageDlg('Keinen Wert zum speichern gefunden oder der Datensatz wurde bereits gespeichert!', mtWarning,[mbOk],0); end end; Hast du da einen besseren vorschlag? |
Das ist aber nicht der Filter oder?
Wenn jemand kein Geburtsdatum einträgt dann, dann trag doch 01.01.1899 ein und beim Anzeigen der Datensätze filters du das mit einer if-Abfrage wieder raus, damit es nicht dargestellt wird. |
Klingt gut, nur wie mache ich das genau?
|
Re: TEdit-Feld MUSS einen Wert enthalten!!
Zitat:
Zitat:
Code:
Das gehört ins "OnChange"-Ereignis von "TEdit3", dann hast du eine Echtzeitprüfung, die den Button aktiviert oder eben wieder deaktiviert. A n der Stelle könnte (!) man auch bereits ansetzen und die Eingabe mit dem erforderlichen Datumsformat vergleichen, so dass bei einer Fehleingabe der Button ebenfalls nicht aktiviert wird.
Button1.Enabled := (Edit3.Text <> '');
Ich ahne, was jetzt kommen wird: Zitat:
|
Wenn er den Vorschlag mit dem Dummydatum nimmt, dann ist das aber überflüssig, denn genau das wollen wir ja vermeiden. :wink:
|
Noch mal langsam, Luckie :twisted: -
Wenn das Geburtsdatum nicht eingetragen ist, dann wäre der Button nach meiner Idee deaktiviert und kann überhaupt nicht angeklickt werden. Auf die Weise kann auch kein Dummydatum eingetragen werden und die Speicherung eines evtl. leeren Feldes findet gar nicht erst statt. So hatte ich das gemeint. :) |
Dann wird der Benutzer aber wieder gezwungen ein falsches datum einzugeben, sonst geht es nicht weiter. :(
Ich wollte dass, wenn das Feld leer bleibt das Programm ein Dummydatum eingibt, welches beim Anzeigen unterdrückt wird. |
Zitat:
Zitat:
btw: Ich orientiere mich bei solchen Dingen aber lieber an professioneller Software, die Buttons usw. erst aktiviert, wenn die entsprechenden Bedingungen erfüllt sind. Sagen wir als kleines Beispiel: Eine Adressdatenbank (:roll:) nutzt eine CHM-Hilfedatei über den "ShellExecute"-Befehl. Das wird unter Win95 und NT4 ohne Html-Help-Update nicht klappen. Der Befehl ist aber dennoch verfügbar und kann ausprobiert werden. Mit der Html-Help-API von den JEDIs kann man allerdings mit einer Bool-Variable prüfen, ob die CHM-Hilfe überhaupt möglich ist und den Befehl abhängig davon aktivieren oder deaktivieren. Hat zwar nichts mit dem Thema zu tun, verdeutlicht aber den Weg, den ich versuche zu gehen. Aber mal was anderes - Was bedeutet Zitat:
|
Redest du von einer bestimmten Adressdatenbank? :angle2:
|
Äh, ... nein, das war nur ein fi(c)ktives Beispiel. :wink:
|
Na dann bin ich aber beruhigt. :mrgreen:
|
Hallo Leute,
habe so ein ähnliches Problem. Das hier jetzt mit dem Datum habe ich so gelöst : Bei einem neuen Datensatz belege ich die Felder mit einem Datum, das es nicht gibt. Das mit 1899 ein guter Vorschlag. Hab es aber umgekehrt gemacht. Nehme MaxDate (Konstante), glaube es ist der 31.12.2078. Ist so etwas in Delphi nicht schon vordefiniert? Jetzt aber meine Frage : Bei mir soll ein nicht gefülltes Editfeld auch nicht verlassen werden, außer in einem Fall, wenn der ENDE Button gedrückt wird. Habe hierfür Edit1.Setfocus verwendet, solange bis etwas drin steht. Weiß der User aber gar keinen Wert, wird er gezwungen irgendeinen einzugeben, um dann ENDE zu clicken. Andernfalls kommt er nicht dran. Gefällt mir nicht besonders. Der ENDE Button ist eigentlich dafür gedacht, diesen Programmteil zu verlassen. Gruß Hansa |
Hallo Hansa!
Was soll denn in deiner Edit für Wert eingeben werdern? |
Hallo City Light,
Es soll in einer Schleife laufen : 1. Eingabe Art.Nr. (das ist das besagte Feld) 2. Editieren der anderen Felder 3. wieder bei 1. anfangen Damit ich hier keine Endlosschleife produziere ist die Ende-Bedingung halt mein Ende-Button. Da ich keinen Preis ändern kann, sofern die Art.Nr. noch gar nicht bekannt ist, darf das Feld nicht leer sein. NUR in einem Fall : ich will etwas anderes machen ! Z.B. weil ich die Nr. gar nicht weiß.
Code:
procedure TKGeingabe.Edit1Exit(Sender: TObject);
begin IF StrVorhanden (Edit1.Text) THEN BEGIN Edit1.Enabled := false; // KG-Nr. nicht editierbar WITH DataModule2.KGdatenSatz DO BEGIN // hier wird der Datensatz gesucht usw. END; DBedit2.SetFocus; // Focus auf erstes DB-Feld END ELSE Edit1.SetFocus; end; Wie man sieht, wird Edit1.SetFocus immer aufgerufen, falls Edit1.text leer ist und jemand versucht, das Feld trotzdem zu verlassen. Dadurch erreiche ich einerseits, daß die Felder erst benutzt werden können, sofern ein Datensatz verfügbar ist, aber an den Ende Button komme ich so auch nicht dran. Das SetFocus funktioniert zwar, aber es ist in diesem Fall zu "streng". Gruß Hansa @Admin : obiger Quelltext ließ sich bei mir nicht in ein Code - Fenster bringen. ????? Syntax hinzugefügt&UBBCode entdeaktiviert :mrgreen: - FuckRacism |
Du hattest den UBBCode deaktiviert!!!!
Code machst du mit
Code:
dein Code
|
@FuckRacism : Aha. Prompte Antwort.
|
Hi Hansa!
Ich sitze noch immer dran!! was ich bisher erreicht ist das hier
Code:
procedure TForm1.Edit1Exit(Sender: TObject);
begin if Edit1.Text = '' Then if MessageDlg('Es wurden keine Eingaben gemacht'#13#10#13#10'Eingabe fortzetzen?', mtConfirmation, [mbYes, mbNo], 0) = mrNo then begin Edit1.Enabled := False; Edit1.Color := ClBtnFace; Button1.SetFocus; end else Edit1.SetFocus; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:35 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz