Delphi-PRAXiS
Seite 3 von 4     123 4      

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 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.


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:28 Uhr.
Seite 3 von 4     123 4      

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