Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   procedure mit Sender (https://www.delphipraxis.net/140906-procedure-mit-sender.html)

mc_flasche 28. Sep 2009 17:49


procedure mit Sender
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Ich hab 2 Proceduren und möchte gern alles in einer Procedure machen ich denke mit Sender würde es am besten gehen,
aber ich kenne mich mit Sendern nicht so gut aus darum bräuchte ich bitte Hilfe!!!!

In dem Programm geht es um das Ausgeben der Daten einer Datenbank in einem Listview jedoch möchte ich eine verkürzte Version haben.

Hier sind die beiden Proceduren falls es jemandem zu unübersichtilich ist habe ich auch noch meine gesamte Datei als Attachment angefügt!

Delphi-Quellcode:
procedure TForm1.Datenausgeben();
var
LI: TListitem;
weiblich, maennlich, Gesamt, i : integer;
begin
 //Zugriff auf die Tabelle über eine Abfrage:

 //Sicherheitshalber wird die Abfrage geschlossen ...
 adoquery1.Close;
 //... und der SQL-Code gelöscht
 adoquery1.SQL.Clear;
 //... und der neue SQL-Code eingefügt
 adoquery1.SQL.add('Select * from Schueler');
 //... und die Abfrage geöffnet:
 adoquery1.Open;


 //Schleife bis zum Ende der Abfrage
 while not adoquery1.Eof do begin

 // Leere Zeile wird ausgegeben
 LI := lv_personen.Items.add;
 //Daten der Abfrage werden ausgegeben:
 LI.Caption := adoquery1.FieldValues['Nachname'] + ' ' + adoquery1.FieldValues['Vorname'];
 LI.subItems.add(adoquery1.FieldValues['Geschlecht']);
 LI.subItems.add(adoquery1.FieldValues['PLZ']);
 LI.subItems.add(adoquery1.FieldValues['Ort']);
 LI.subItems.add(adoquery1.FieldValues['Adresse']);

 //Spring immer einen Datensatz weiter
 adoquery1.Next;
 end;
 adoquery1.close;

 adoquery1.SQL.Clear;


 //distict = Keine Duplikate
 //order by = Sortierung aufsteigend
 adoquery1.SQL.add('Select distinct Ort from Schueler order by Ort');

 adoquery1.Open;

 while not adoquery1.Eof do begin

 lbox_Wohnort.items.add(adoquery1.FieldValues['Ort']);
 //Spring immer einen Datensatz weiter
 adoquery1.Next;
 end;
 adoquery1.close;

 Maennlich := 0;

 Weiblich := 0;

 gesamt:= lv_Personen.Items.count;


 for i := 0 to lv_Personen.Items.Count - 1 do begin

 if lv_Personen.Items[i].subitems[0] = 'M' then
      Inc(Maennlich);
    if lv_Personen.Items[i].subitems[0] = 'W' then
      Inc(Weiblich);

  end;


 StatusBar1.Panels[0].Text := 'Gesamt ' + inttostr(gesamt);
 StatusBar1.Panels[1].Text := 'Männlich ' + inttostr(maennlich);
 StatusBar1.Panels[2].Text := 'Weiblich ' + inttostr(weiblich);

end;


procedure TForm1.Wohnortfilter();
var
AktuellerOrt: string;
LI: TListItem;
weiblich, maennlich, Gesamt, i : integer;
begin

 AktuellerOrt:= lbox_Wohnort.Items[lbox_Wohnort.itemindex];

 adoquery1.Close;

 adoquery1.SQL.Clear;

 adoquery1.SQL.add('Select * from Schueler where Ort = "' + AktuellerOrt + '"');

 adoquery1.Open;

 lv_personen.Items.Clear;


 while not adoquery1.Eof do begin

 // Leere Zeile wird ausgegeben
 LI := lv_personen.Items.add;
 //Daten der Abfrage werden ausgegeben:
 LI.Caption := adoquery1.FieldValues['Nachname'] + ' ' + adoquery1.FieldValues['Vorname'];
 LI.subItems.add(adoquery1.FieldValues['Geschlecht']);
 LI.subItems.add(adoquery1.FieldValues['PLZ']);
 LI.subItems.add(adoquery1.FieldValues['Ort']);
 LI.subItems.add(adoquery1.FieldValues['Adresse']);



 //Spring immer einen Datensatz weiter
 adoquery1.Next;
 end;


 adoquery1.close;

 Maennlich := 0;

 Weiblich := 0;

 gesamt:= lv_Personen.Items.count;


 for i := 0 to lv_Personen.Items.Count - 1 do begin

 if lv_Personen.Items[i].subitems[0] = 'M' then
      Inc(Maennlich);
    if lv_Personen.Items[i].subitems[0] = 'W' then
      Inc(Weiblich);

  end;


 StatusBar1.Panels[0].Text := 'Gesamt ' + inttostr(gesamt);
 StatusBar1.Panels[1].Text := 'Männlich ' + inttostr(maennlich);
 StatusBar1.Panels[2].Text := 'Weiblich ' + inttostr(weiblich);

end;
[edit=Matze][delphi]-Tag eingefügt. MfG, Matze[/edit]

DP-Maintenance 28. Sep 2009 18:09

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage

DeddyH 28. Sep 2009 18:21

Re: procedure mit Sender
 
Das hat aber mit Sender gar nichts zu tun. Erweitere Deine Prozedur einfach um ein Argument, das Du dann innerhalb der Prozedur auswertest.
Delphi-Quellcode:
procedure TForm1.DatenAusgeben(const Ort: string = '');
const DefSQL = 'SELECT * FROM Schueler';
begin
  ...
  ADOQuery1.SQL := DefSQL;
  //wenn ein Ort übergeben wurde, SQL erweitern
  if Ort <> '' then
    begin
      ADOQuery1.SQL := ADOQuery1.SQL + ' WHERE Ort = :ort');
      ADOQuery1.Parameters.ParamByName('ort').Value := Ort;
    end;
  ...
end;

mc_flasche 28. Sep 2009 18:48

Re: procedure mit Sender
 
Liste der Anhänge anzeigen (Anzahl: 1)
Danke für die Antwort, aber das Programm funktioniert leider immer noch nicht, da ich noch nicht ganz verstanden habe wie ich es erweitern muss!!!
Im Anhang befindet sich der gezippte Ordner meines Programms, wenn möglich bitte ich um fertigstellung meines Programms und Rücksendung!!!!!!!!!

Mfg

DeddyH 28. Sep 2009 18:55

Re: procedure mit Sender
 
Siehe meine PN.
Zitat:

Das ist ja wohl nicht Dein Ernst. Ich helfe Dir gerne weiter, aber programmieren musst Du schon selbst.

sx2008 28. Sep 2009 20:12

Re: procedure mit Sender
 
Delphi-Quellcode:
// Leere Zeile wird ausgegeben
LI := lv_personen.Items.add;
//Daten der Abfrage werden ausgegeben:
LI.Caption := adoquery1.FieldValues['Nachname'] + ' ' + adoquery1.FieldValues['Vorname'];
LI.subItems.add(adoquery1.FieldValues['Geschlecht']);
LI.subItems.add(adoquery1.FieldValues['PLZ']);
LI.subItems.add(adoquery1.FieldValues['Ort']);
LI.subItems.add(adoquery1.FieldValues['Adresse']);
Ist dir aufgefallen, dass du obigen Code zweimal hingeschrieben hast?
Du darfst diesen Code ruhig in eine private Procedure des Formulars packen und schon wird die Sache etwas klarer und aufgeräumter.

DeddyH 28. Sep 2009 20:14

Re: procedure mit Sender
 
Das ist aber nicht das Einzige, was doppelt da oben steht :zwinker:, beispielsweise auch die Geschlechterauswertung.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:54 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