Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Alle Edit-Felder auf Eingaben prüfen (https://www.delphipraxis.net/59379-alle-edit-felder-auf-eingaben-pruefen.html)

Ati 21. Dez 2005 13:55


Alle Edit-Felder auf Eingaben prüfen
 
Mahlzeit,

auch zu diesem Thema habe ich einiges gefunden und auch etliches schon ausprobiert, jedoch funktioniert nichts so wie ich es gerne hätte. Ziel ist es in meiner Anwendung alle Edit-Felder auf Eingaben zu prüfen. Es gibt insgesamt 9 Felder, wovon 8 quasi Pflichtfelder sind. Ich habe es schon mit verschachtelten IF-Then-Abfragen versucht jedoch geht das nur beim ersten Feld. Ist das zweite leer so tut sich nichts (es erscheint allerdings auch nicht meine Nachricht). Dann habe ich die Überprüfung für jedes Feld bei "OnExit" durchgeführt. Das hat soweit funktioniert, nur habe ich Buttons plaziert, wo a) alle Eingaben gelöscht werden können und b) die Anwendung beendet werden kann. Diese Buttons verursachen dann allerdings meine Fehlermeldung und ich kann die Anwendung nicht unterbrechen bzw. beenden. Wie kann ich hier weiter vorgehen!!

Ati

dahead 21. Dez 2005 14:11

Re: Alle Edit-Felder auf Eingaben prüfen
 
mach doch einen "Übernehmen" oder "Bestätigen" Button unter die ganzen Edits.
Darin rufst du eine Prüf-Funktion auf, die prüft ob alle Text ungleich '' sind.
Dazu kannst du entweder jedes TEdit.Text einzeln prüfen lassen, oder in einer For-Schleife (siehe dazu die Hilfe FindComponent).

mgubler 21. Dez 2005 14:13

Re: Alle Edit-Felder auf Eingaben prüfen
 
So in etwa aus dem Kopf gegriffen habe ich mal etwas gelöst.
Zwar kompliziert, aber in PHP hat es wunderbar geklappt!


Delphi-Quellcode:
...
var
 bErrFeld1,
 bErrFeld2,
 bErrFeld3,
 bErrFeld4,
 bErrFeld5,
 bErrFeld6,
 bErrFeld7,
 bErrFeld8: boolean;
//hier alle auf true setzen!
...

 sErrMsg1,
 sErrMsg2,
 sErrMsg3,
 sErrMsg4,
 sErrMsg5,
 sErrMsg6,
 sErrMsg7,
 sErrMsg8: string;

 sErrAll: string;

begin

if (edit1.text <> '') then
begin
   bErrFeld1 := false;
end
else
begin
   sErrMsg1 = 'Feldname';
end;

...

if (bErrFeld1 = true) OR (bErrFeld2 = true) OR (bErrFeld3 = true).... then
begin
  if (bErrFeld1 = true) then sErrAll := 'Name des Ersten Feldes';
  if (bErrFeld2 = true) then sErrAll := sErrAll+#13#10+'Name des zweiten Feldes';
...

Showmessage('Nachfolgende Felder müssen auf Ihren Inhalt geprüft werden:' + #13#10+ sErrAll);
end;
end;

AndreasP 21. Dez 2005 14:16

Re: Alle Edit-Felder auf Eingaben prüfen
 
mahlzeit,

nachfolgender code müßte dein problem lösen. er läst sich noch optimieren wie z.b. ein forzeitiger abbruch oder das nich das ganze formular abgefragt wird. aber das prinzip sollte klar sein.
Delphi-Quellcode:
var a, i: integer;
begin
  a := 1;
  for i := 0 to Form1.ComponentCount -1 do
  begin
    if Form1.Components[i] is TEdit then
      a := a * (Length(TEdit(Form1.Components[i]).Text));
  end;

  if a = 0 then
    ShowMessage('Bitte Eingabe überprüfen');

Ati 21. Dez 2005 15:41

Re: Alle Edit-Felder auf Eingaben prüfen
 
Danke Andreas. Dein Code funktioniert schon zu gut. Ein Problem gibt es da aber noch. Das letzte Edit-Feld ist optional. D.h. es muß nicht ausgefüllt werden. Wie kann ich das einbauen??

Ati

dahead 21. Dez 2005 15:45

Re: Alle Edit-Felder auf Eingaben prüfen
 
du könntest es entweder direkt überprüfen (also ob das TEdit in der schleife auftaucht) oder du weist ihm bspw. den Tag 1 zu. alle TEdits mit diesem Tag werden ignoriert.

Ati 21. Dez 2005 15:50

Re: Alle Edit-Felder auf Eingaben prüfen
 
@dahead den ersten Teil habe ich noch nicht ganz verstanden. Das mit Tag=1 funktioniert so ohne weiteres nicht.

AndreasP 21. Dez 2005 15:57

Re: Alle Edit-Felder auf Eingaben prüfen
 
mahlzeit,

was dahead meint ist das du dem 9. edit über den oi den tag 1 (oder ein anderen wert) zuweist und du den code entsprechend abänderst das dieses edit nicht geprüft wird:
Delphi-Quellcode:
if (Form1.Components[i] is TEdit) and (Form1.Components[i].Tag <> 1) then

Ati 21. Dez 2005 16:06

Re: Alle Edit-Felder auf Eingaben prüfen
 
Ach so. Sorry. Habe ich jetzt mal so eingebaut, jedoch ist die überprüfungsfunktion damit ausgehebelt. Habe mal nur das erste Edit-Feld eingetragen und er hat den DS trotzdem ohne meckern gespeichert!!
Hier mla mein aktueller Code
Delphi-Quellcode:
a := 1;
  for i := 0 to Form1.ComponentCount -1 do
  begin
    if (Form1.Components[i] is TEdit) and (Form1.Components[i].Tag = 0) then
      a := a * (Length(TEdit(Form1.Components[i]).Text));
  end;

  if a = 0 then
   begin
    ShowMessage('Bitte Eingabe überprüfen');
    exit;
   end;

dahead 21. Dez 2005 16:12

Re: Alle Edit-Felder auf Eingaben prüfen
 
kann es sein, dass du vergessen hast den tag auf 1 zu setzen?

AndreasP 21. Dez 2005 16:16

Re: Alle Edit-Felder auf Eingaben prüfen
 
mahlzeit,

mit = 0 wird doch im normal fall alle edits geprüft, deshalb der forschlag mit edit = 1.

Sharky 21. Dez 2005 16:17

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Ati,

hier mal mein Quick and Dirty Code. Es werden alle TEdits beachtet deren Tag <> 1 ist.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  test: Boolean;
  i : integer;
begin
  test := True;
  for i := 0 to Form1.ComponentCount -1 do
  begin
    if (Components[i] is TEdit) and (Components[i].Tag <> 1) then
    begin
      if Length((Components[i] as TEdit).Text) = 0 then
      begin
        test := False;
        break;
      end;
    end;
  end;

  if not (Test) then
  begin
    ShowMessage('Fehler bei der Eingabe');
  end;
end;

Ati 21. Dez 2005 16:18

Re: Alle Edit-Felder auf Eingaben prüfen
 
@dahead :wink: Nein :wink:

@Andreas hoffentlich versteh ich Deine Aussage jetzt nicht falsch. Du beziehst Dich wohl darauf das ich hinten mit einer =0 arbeite und nicht <>1. Aber beides hat nicht funktioniert

1ceman 21. Dez 2005 16:32

Re: Alle Edit-Felder auf Eingaben prüfen
 
Das Eine Edit-Feld,was nur Optional ist hat ja nen bestimmten namen(in meinen Beispiel hat das Edit Feld den Namen Test).
dann frag den doch einfach ab:

Delphi-Quellcode:
a := 1;
  for i := 0 to Form1.ComponentCount -1 do
  begin
    if (Form1.Components[i] is TEdit) and (Form1.Components[i].Tag = 0) and (Form1.Components[i].name<>'Test') then
      a := a * (Length(TEdit(Form1.Components[i]).Text));
  end;

  if a = 0 then
   begin
    ShowMessage('Bitte Eingabe überprüfen');
    exit;
   end;

Ati 21. Dez 2005 16:33

Re: Alle Edit-Felder auf Eingaben prüfen
 
HAAAAAAAAllllllllllllllllltttt Stoooopppp

Bevor ihr euch jetzt Gedanken macht!!! Ich habe nur 1 wirkliches TEdit-Feld.
Die anderen sind entweder TMaskEdit oder TDateEdit.
Mein Gott ist mir das peinlich.

1ceman 21. Dez 2005 16:39

Re: Alle Edit-Felder auf Eingaben prüfen
 
loool
ist aber eigentlich auch kein problem

musst nur die If Abfrage für alle felder, die du abfragen möchtest erweitern so z.b

Delphi-Quellcode:
a := 1;
  for i := 0 to Form1.ComponentCount -1 do
  begin
    if ((Form1.Components[i] is TEdit) or (Form1.Components[i] is TMaskEdit) or (weiter Felder) and (Form1.Components[i].Tag = 0) and (Form1.Components[i].name<>'Test') then
      a := a * (Length(TEdit(Form1.Components[i]).Text));
  end;

  if a = 0 then
   begin
    ShowMessage('Bitte Eingabe überprüfen');
    exit;
   end;
kann nur sein, das du das net mit dem or Abfragen kannst, sondern das du
Delphi-Quellcode:
if(Form1.Components[i].Tag = 0) and (Form1.Components[i].name<>'Test') then
   if (Form1.Components[i] is TEdit) then
   a := a * (Length(TEdit(Form1.Components[i]).Text));
   else Abfrag für die anderen Typen
   then a := a * (Length(TEdit(Form1.Components[i]).Value));
Musst halt alle sachen, die mit .text arbeiten in eine If-Abfrage packen und alle die z.b mit .value arbeiten in eine if-abfrage.
wenn die allerdings alle mit .text arbeiten, würd ich die obere variante nehmen.

Ati 21. Dez 2005 16:48

Re: Alle Edit-Felder auf Eingaben prüfen
 
Kann mir jemand helfen wie ich diesen Code den Umbauen muß.
Ich habe 5 xTMaskEdit, 2xTDateEdit und eine TCombobox.

Sharky 21. Dez 2005 16:50

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Ati,

ich würde es so machen:
Delphi-Quellcode:
function EditTest(const aEdit : TEdit): boolean;
begin
  result := Length (aEdit.Text) > 0;
end;

function DateEditTest(aDateEdit : TJvDateEdit): Boolean;
begin
  result := true; // Ein Passender Code
end;

function MaskEditTest(aMaskEdit : TMaskEdit): Boolean;
begin
  result := true; // und noch ein Code;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  test: Boolean;
  i : integer;
  tmpComponent : TComponent;
begin
  test := True;

  for i := 0 to ComponentCount -1 do
  begin
    tmpComponent := Components[i];
    if (tmpComponent is TEdit) then // Test des Edit
    begin
      test := EditTest (tmpComponent as TEdit);
    end;

    if (tmpComponent is TJvDateEdit) then // Test des DateEdit
    begin
      test := DateEditTest (tmpComponent as TJvDateEdit);
    end;

    if (tmpComponent is TMaskEdit) then // Test des MaskEdit
    begin
      test := MaskEditTest (tmpComponent as TMaskEdit);
    end;

    if not (test) then
    begin
      break;
    end;
  end;

  if not (Test) then
  begin
    ShowMessage('Fehler bei der Eingabe');
  end;
end;
Ich habe also für jede zu prüfende Komponente eine Testfunktion welche man sich noch ausprogrammieren muss.

Ati 21. Dez 2005 17:15

Re: Alle Edit-Felder auf Eingaben prüfen
 
Irgendeinen kleinen Fehler habe ich noch. Hier nochmal die Funktionen und die Procedure:
Delphi-Quellcode:
function ComboTest(const acombo : TCombobox): boolean;
begin
  result := Length (acombo.Text) > 0;
end;

function DateEditTest( const aDateEdit : TDateEdit): Boolean;
begin
  result := Length (aDateEdit.Text) >0; // Ein Passender Code
end;

function MaskEditTest(const aMaskEdit : TMaskEdit): Boolean;
begin
  result := Length (aMaskEdit.text) >0; // und noch ein Code;

end;
Delphi-Quellcode:
procedure TForm1.btnspeichernClick(Sender: TObject);
var datum:TDate;
    zeit:TTime;
    i: integer;
    test:boolean;
    tmpComponent : TComponent;
begin

  for i := 0 to Form1.ComponentCount -1 do
  begin
   if (tmpComponent is TMaskEdit) then // Test des MaskEdit
   begin
      test := MaskEditTest (tmpComponent as TMaskEdit);
    end;
    if (tmpComponent is TDateEdit) then // Test des DateEdit
    begin
      test := DateEditTest (tmpComponent as TDateEdit);
    end;
    if (tmpComponent is TCombobox) then // Test der ComboBox
    begin
      test := ComboTest (tmpComponent as TCombobox);
    end;
  end;

  if not (Test) then
  begin
    ShowMessage('Fehler bei der Eingabe');
    exit;
  end;
Wenn ich jetzt alle Pflichteingaben gemacht habe meldet er mir trotzdem einen Eingabefehler......oder hast Du mir eine kleine Falle gestellt Sharky :???:

dahead 21. Dez 2005 17:22

Re: Alle Edit-Felder auf Eingaben prüfen
 
sieht so aus als hättest du vergessen, das "Test" zu initialisieren (test := True;), s. Sharkys Code.

Ati 21. Dez 2005 17:29

Re: Alle Edit-Felder auf Eingaben prüfen
 
Man Man Man. Klar hatte ich das vergessen. Und tmpComponent := Components[i]; hatte ich auch nicht eingetragen.
Aber jetzt nimmt er wieder alle Eingaben auch die leeren!!!!!!!

Sharky 21. Dez 2005 17:33

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Ati,

ich vermisse in deinem Code diese Zeilen aus meinem:
Delphi-Quellcode:
    if not (test) then
    begin
      break;
    end;
Bei dir ist der Wert von Test ja nur von der letzten überprüften Componente abhängig. Wenn in dieser etwas steht ist test bei Dir True. Darum breche ich ja sobald die erste Componente ohne Inhalt gefunden wurde die FOR-DO-Schleife ab.

Ati 21. Dez 2005 17:42

Re: Alle Edit-Felder auf Eingaben prüfen
 
Stimmt hatte ich übersehen. Jetzt meckert er Dein "break" an

Sharky 21. Dez 2005 17:48

Re: Alle Edit-Felder auf Eingaben prüfen
 
Zitat:

Zitat von Ati
... Jetzt meckert er Dein "break" an

Hast Du es auch an der richtigen Stelle? Es muss natürlich innerhalb des BEGIN-END Blockes der For-Do Schleife stehen. ;-)
Delphi-Quellcode:
begin
  for i := 1 to 100 do
  begin
    if not (test) then
    begin
      break; // Hier ist es Okay;
    end;
  end; // Ende der Schleife

  if not (test) then
  begin
    break; // Hier würde der Compiler meckern weil wir ausser halb einer Schleife sind.
  end;
end;

Ati 21. Dez 2005 17:57

Re: Alle Edit-Felder auf Eingaben prüfen
 
Jetzt scheint es endlich zu funktionieren. Mußte nur noch ein "exit" hinter dem Showmessage-Befehl setzen, weil nach der Prüfung der Datensatz in eine DB geschrieben wird und das muß ja unbedingt verhindert werden.

Werde morgen noch mal alles ausprobieren und dann bescheid sagen. Will jetzt einfach nur noch nach Hause.

Danke
Ati

Sharky 21. Dez 2005 18:05

Re: Alle Edit-Felder auf Eingaben prüfen
 
Zitat:

Zitat von Ati
... weil nach der Prüfung der Datensatz in eine DB geschrieben wird und das muß ja unbedingt verhindert werden...

Ich würde den Prüfcode dann in das Delphi-Referenz durchsuchenBeforPost Ereigniss deines TDataSets schreiben und das speichern im fehlerfall mit DataSet.Cancel; abbrechen.

Ati 22. Dez 2005 09:15

Re: Alle Edit-Felder auf Eingaben prüfen
 
Da ich ja ein gelehriger Schüler bin habe ich versucht Deinen Tip umzusetzen. Und den Prüfcode in das "BeforePost"-Ereignis des Query´s eingebaut. Wie auch nicht anders zu erwarten funktioniert das bei mir nicht.
Es werden wieder halbe Datensätze gespeichert. Wo muß ich genau DataSet.Cancel einsetzen? Welcher Teil vom Prüfcode muß in dem BeforePost-Ereignis und was muß im Button-Ereignis bleiben?

Sharky 22. Dez 2005 09:25

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Ati,

so würde es bei mir wohl aussehen (ungetestet):
Delphi-Quellcode:
function TForm1.CheckInput: Boolean;
var datum:TDate;
    zeit:TTime;
    i: integer;
    test:boolean;
    tmpComponent : TComponent;
begin
  test := True;
  for i := 0 to Form1.ComponentCount -1 do
  begin
   if (tmpComponent is TMaskEdit) then // Test des MaskEdit
   begin
      test := MaskEditTest (tmpComponent as TMaskEdit);
    end;
    if (tmpComponent is TDateEdit) then // Test des DateEdit
    begin
      test := DateEditTest (tmpComponent as TDateEdit);
    end;
    if (tmpComponent is TCombobox) then // Test der ComboBox
    begin
      test := ComboTest (tmpComponent as TCombobox);
    end;
    if not (test) then
    begin
      break;
    end;
  end;
  result := test;
end;


procedure TForm1.ADOQuery1BeforePost(DataSet: TDataSet);
begin
  if not (CheckInput) then
  begin
    DataSet.Cancel;
    ShowMessage('Bitte prüfen sie die Eingabe');
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.Post;
end;

Ati 22. Dez 2005 09:35

Re: Alle Edit-Felder auf Eingaben prüfen
 
Wie Du ja vor kurzem mitbekommen hast bin ich gerade am Anfang bezüglich der Datenbankprogrammierung unter Delphi. Daher kann ich so gewisse Sachen noch nicht ganz miteinander in Beziehung bringen. Auch auf die Gefahr hin das sich hier einige gleich ausschütten werden vor Lachen anbei mal mein gesamter Quelltext.
Delphi-Quellcode:
  public
    procedure clear;
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

function ComboTest(const acombo : TCombobox): boolean;
begin
  result := Length (acombo.Text) > 0;

end;

function DateEditTest( const aDateEdit : TDateEdit): Boolean;
begin
  result := Length (aDateEdit.Text) >0; // Ein Passender Code

end;

function MaskEditTest(const aMaskEdit : TMaskEdit): Boolean;
begin
  result := Length (aMaskEdit.text) >0; // und noch ein Code;
end;

procedure TForm1.clear;
begin
 edvim.text:='';
 edbenr.Text:='';
 edlief.Text:='';
 delterm.Text:='';
 edkunde.Text:='';
 edabnr.Text:='';
 cbaufgabe.Text:='';
 dekterm.Text:='';
 edbemerk.Text:='';
 edvim.SetFocus;
end;

procedure TForm1.btnspeichernClick(Sender: TObject);
var datum:TDate;
    zeit:TTime;

begin
  datum:=date;
  zeit:=time;
  qrmain.Sql.Clear;
  qrmain.Sql.Text:='Insert into Anforderungen (vim,benr,lieferant,ltermin,kunde,'+
                   'abnr,aufgabe,ktermin,bemerkung,anfdat,anfuhr)' +
                   'VALUES ('+quotedstr(edvim.text)+','+quotedstr(edbenr.text)+','+
                   quotedstr(edlief.text)+','+quotedstr(delterm.text)+','+
                   quotedstr(edkunde.text)+','+quotedstr(edabnr.text)+','+
                   quotedstr(cbaufgabe.text)+','+quotedstr(dekterm.text)+','+
                   quotedstr(edbemerk.text)+','+quotedstr(datetostr(datum))+','+
                   quotedstr(timetostr(zeit))+');';
  qrmain.ExecSql;
  body.Clear;
  body.Lines.Add('VIM: '+edvim.text);
  body.Lines.Add('BE_NR: '+edbenr.text);
  smtp.MailMessage:=body.Lines;
  smtp.Mail;
  clear;
end;

procedure TForm1.btnabbruchClick(Sender: TObject);
begin
  clear;
end;

procedure TForm1.btnendeClick(Sender: TObject);
begin
  application.Terminate;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
smtp.Connect;
end;

procedure TForm1.qrmainBeforePost(DataSet: TDataSet);
var i: integer;
    test:boolean;
    tmpComponent : TComponent;
begin
    test:=true;
  for i := 0 to Form1.ComponentCount -1 do
  begin
  tmpComponent := Components[i];
   if (tmpComponent is TMaskEdit) then // Test des MaskEdit
   begin
      test := MaskEditTest (tmpComponent as TMaskEdit);
    end;
    if (tmpComponent is TDateEdit) then // Test des DateEdit
    begin
      test := DateEditTest (tmpComponent as TDateEdit);
    end;
    if (tmpComponent is TCombobox) then // Test der VomboBox
    begin
      test := ComboTest (tmpComponent as TCombobox);
    end;
  if not (test) then
    begin
      break;
    end;
  end;
  if not (Test) then
  begin
    ShowMessage('Fehler bei der Eingabe');
    Dataset.Cancel;
  end;
end;

end.
Ich denke mal das Verfahren zum löschen der Eingabefelder geht auch "eleganter". Also habt ein bischen Gnade mit mir.

Ati

Ati 22. Dez 2005 10:51

Re: Alle Edit-Felder auf Eingaben prüfen
 
Wenn ich mit der Post-Methode arbeite meckert er das die Datenmenge sich nicht im Editier bzw Einfügemodus befinden.

Sharky 22. Dez 2005 11:14

Re: Alle Edit-Felder auf Eingaben prüfen
 
Zitat:

Zitat von Ati
... Auch auf die Gefahr hin das sich hier einige gleich ausschütten werden vor Lachen anbei mal mein gesamter Quelltext.

Wer lacht sollte sich daran erinnern wie er angefangen hat :!:

So, jetzt zu dem "Problem"
Das mit dem AfterPost kann natürlich nicht gehen da Du das Query ja ganz anders benutzt als ich dachte (ist aber auch gut so).

Die Ereignisse BeforPost, AfterPost usw. würde nur ausgelöst werden wenn Du über eine TDataSource irgendwelche DBxxxx-Komponenten verwendest oder im Code so etwas stehen hast:
Delphi-Quellcode:
begin
  Query1.Edit
  Query1.FieldByName ('blubb').AsString := Edit1.Text
  Query1.FieldByName ('meow').AsInteger := 0815;
  Query1.Post;
end
Du arbeitest aber "direkt" mit SQL-Kommandos (INSTERT,UPDATE).

Bei dir müsstest Du also nur, wie von mir vorgeschlagen eine Funktion schreiben welche die Fehler prüft.
Wenn diese TRUE liefert führst Du deinen Code im OnClick des Buttons aus und wenn FALSE kommt dann gibst Du die Meldung aus.

Ich würde den ganzen Code zum Eintragen der Daten aber auch noch in eine Funktion auslagern.
So das Du diesen Pseudocode hast:
Delphi-Quellcode:

procedure TForm1.btnspeichernClick(Sender: TObject);
begin
  if (EingabeTest) then
  begin
    SpeicherenNeuenDatensatz;
  end
  else
  begin
    Fehlermeldung;
  end;
end;

Ati 22. Dez 2005 11:46

Re: Alle Edit-Felder auf Eingaben prüfen
 
Es funktioniert mit einer kleiner Ausnahme. Ich benutze zur Datumseingabe das TDateEdit der RXLib. Hier ist Standardmäßig als Text " . . " hinterlegt. Bei der Prüfung der Textlänge >0 zählt er (so vermute ich jedenfalls) die Punkte. D.h. wenn alle anderen ausgefüllt sind aber die Terminangaben fehlen so nimmt er den Datensatz. Obwohl die Felder in der DB als NotNull deklariert sind (sollte dann nicht wenigstens hier Firebird meckern??). Ich benutze diese Objekte, da ich sie einfach "Benutzerfreundlich" finde und somit ein Datumsformat erzwinge.


P.S. selbst wenn ich die Prüflänge auf >2 setze nimmt er eine leeres TDateEdit-Feld.

Sharky 23. Dez 2005 08:28

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Ati,

du könntest mal prüfen was genau in einem lehren TDateEdit steht. Im notfall versuche in einem try-except Block eine Umwandlung in ein TDate versuchen. Wenn diese fehlschlägt gibt deine Testfunktion ein False zurück.

Ati 3. Jan 2006 07:36

Re: Alle Edit-Felder auf Eingaben prüfen
 
Hai Sharky,

nicht das Du denkst ich habe Deinen Tip unter dem Tisch fallen lassen. Hier mal meine Prüffunktion für das Datumsfeld:
Delphi-Quellcode:
function DateEditTest( const aDateEdit : TDateEdit): Boolean;
var dat:Tdate;
begin
  result:=true;
  try
   dat:= strtodate(aDateEdit.Text);
  except
   result:=false;
  end;
end;
Wenn man das eleganter lösen kann bitte ich um Korrektur!!!

Ati

Sharky 3. Jan 2006 07:41

Re: Alle Edit-Felder auf Eingaben prüfen
 
Zitat:

Zitat von Ati
... nicht das Du denkst ich habe Deinen Tip unter dem Tisch fallen lassen.

Das wäre auch schlecht. Irgendwann liegen bei dir lauter Tips unter dem Tisch und Du kannst dich nicht nicht mehr daran setzen :stupid:

Alternativ könntest Du noch prüfen ob in der Eigenschaft .Text (wenn es die bei dem DateEdit gibt) etwas eingetragen wurde.

Ati 3. Jan 2006 07:45

Re: Alle Edit-Felder auf Eingaben prüfen
 
Das habe ich ja als erstes versucht. Nur vermute ich das die Pünktchen als Eingabe gewertet werden.
Aus Deiner Antwort schliesse ich aber das Du mit meiner aktuellen Lösung "zufrieden" bist.

Ati

Sharky 3. Jan 2006 07:52

Re: Alle Edit-Felder auf Eingaben prüfen
 
Zitat:

Zitat von Ati
... Nur vermute ich das die Pünktchen als Eingabe gewertet werden.

In der Theorie müsstest Du das so prüfen können:
Delphi-Quellcode:
function DateEditTest( const aDateEdit : TDateEdit): Boolean;
begin
  result := StringReplace(aDateEdit.Text,' ','',[rfReplaceAll]) <> '..';
end;
Aber ich finde das mit dem try-except besser da so auch falsch Eingaben abgefangen werden.

Ati 3. Jan 2006 07:53

Re: Alle Edit-Felder auf Eingaben prüfen
 
Danke für die Blumen.


Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz