![]() |
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:
[edit=Matze][delphi]-Tag eingefügt. MfG, Matze[/edit]
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; |
DP-Maintenance
Dieses Thema wurde von "Matze" von "Programmieren allgemein" nach "Object-Pascal / Delphi-Language" verschoben.
Delphi-Frage |
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; |
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 |
Re: procedure mit Sender
Siehe meine PN.
Zitat:
|
Re: procedure mit Sender
Delphi-Quellcode:
Ist dir aufgefallen, dass du obigen Code zweimal hingeschrieben hast?
// 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']); Du darfst diesen Code ruhig in eine private Procedure des Formulars packen und schon wird die Sache etwas klarer und aufgeräumter. |
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