Autor |
Beitrag |
D. Annies
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 19.03.11 16:22
Hi, Delpher,
wie kann man den nachfolgenden Code, der in den beiden Procs ja seehr ähnlich ist, vereinfachen?
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61: 62: 63: 64: 65: 66: 67: 68: 69: 70: 71: 72: 73: 74: 75: 76: 77: 78: 79: 80: 81: 82: 83: 84: 85:
| procedure TBuchMain.GebTag(Q_sl: TQuery); var mo, tg : integer; tbname : string; begin Mo := strtoint(copy(maskedit1.editText,4,2)); Tg := strtoint(copy(maskedit1.editText,1,2)); tbname := combobox2.Items[combobox2.itemindex]; Q_sl.close;
Q_sl.sql.text := format('select Name, Vorname, Klasse, Telefon, Gebdat from "%s" ' + 'where MONTH(gebdat) = :MONAT and DAY(gebdat) = :TAG ' + 'order by Name, Vorname, Klasse', [TbName]); Q_sl.ParamByName('Monat').asinteger := Mo; Q_sl.ParamByName('Tag').asinteger := Tg; Q_sl.open; tntstringgrid1.RowCount := 2; TeilMengenausgabeSG(Q_sl); Splitter2Moved(Self); if Q_sl.RecordCount > 0 then begin fname := concat(label30.caption, 'OUTXLS\Geburtstag_'+tbname); fname := fname + format('%.02d', [tg])+ format('%.02d', [mo])+ '.xls'; bericht := bericht + #13+ #13+ 'Alles Gute zum Geburtstag!' + #13; checkbox11.Checked := true; checkbox11click(self); end else begin bericht := bericht + #13+ #13+ 'Die Geburtstagsliste der Schule ist heute leer!' + #13; fname := 'Dummy.xls'; end; tntstringgrid1.Hint := fname; if combobox2.ItemIndex = 0 then qLkSort(self); if combobox2.ItemIndex = 1 then qschuelersort(self); MaskEdit1.Text := format('%2d', [t]) + '.' + format('%2d', [m]) + '.'; end;
procedure TBuchMain.GebMon(Q_sl: TQuery); var mo, tg : integer; tbname : string; begin Mo := strtoint(copy(maskedit1.editText, 4,2)); Tg := strtoint(copy(maskedit1.editText, 1,2)); tbname := combobox2.Items[combobox2.itemindex]; Q_sl.close; Q_sl.sql.text := format('select Name, Vorname, Klasse, Telefon, Gebdat from "%s" ' + 'where MONTH(gebdat) = :MONAT ' + 'order by Name, Vorname, Klasse, Gebdat', [TbName]); Q_sl.ParamByName('Monat').asinteger := Mo; Q_sl.open; tntstringgrid1.RowCount := 2; TeilMengenausgabeSG(Q_sl); Splitter2Moved(Self); if Q_sl.RecordCount > 0 then begin fname := concat(label30.caption, 'OUTXLS\Geburtstag_'+tbname); fname := fname + format('%.02d', [tg])+ format('%.02d', [mo])+ '.xls'; bericht := bericht + #13+ #13+ 'Alles Gute zum Geburtstag!' + #13; checkbox11.Checked := true; checkbox11click(self); end else begin bericht := bericht + #13+ #13+ 'Die Geburtstagsliste der Schule ist heute leer!' + #13; fname := 'Dummy.xls'; end; tntstringgrid1.Hint := fname; if combobox2.ItemIndex = 0 then qLkSort(self); if combobox2.ItemIndex = 1 then qschuelersort(self); MaskEdit1.Text := format('%2d', [t]) + '.' + format('%2d', [m]) + '.'; end; |
Vielen Dank für eine gute Idee,
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 19.03.11 17:59
Suche die Gemeinsamkeiten und übergebe die Unterschiede als Parameter.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 18:24
Der Unterschied liegt ja nur im Filter der SQL-Abfrage, wie man leicht sieht, siehe Anhang. Das heißt du brauchst doch nur einen zusätzlichen Parameter, der dir anzeigt welcher Filter gesetzt werden soll: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23:
| TFilterMode = (flmDay, flmMonth);
procedure TBuchMain.GebTag(Q_sl: TQuery; AFilterMode: TFilterMode); var FilterText: string; begin case FilterMode of flmDay: FilterText := 'where MONTH(gebdat) = :MONAT and DAY(gebdat) = :TAG ' + 'order by Name, Vorname, Klasse'; flmMonth: FilterText := 'where MONTH(gebdat) = :MONAT ' + 'order by Name, Vorname, Klasse, Gebdat'; else FilterText := ''; end; ... Q_sl.SQL.Text := Format('select Name, Vorname, Klasse, Telefon, Gebdat from "%s" ' + FilterText, [TbName]); ... if AFilterMode = flmDay then Q_sl.ParamByName('Tag').AsInteger := Tg; ... |
Einloggen, um Attachments anzusehen!
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 19.03.11 18:55
Hi, Sebastian, sieht toll aus!!
Werde ich gleich mal eingeben! (und mich dann bedanken ..  )
Danke, Detlef
--- Moderiert von Narses: Beiträge zusammengefasst---
Hmm, an welcher Stelle genau muss ich den Filter "typen"?
Gruß, Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1
|
Verfasst: Sa 19.03.11 20:28
Natürlich in der Sichtbarkeit der Routinen und der aufrufenden Routine. Da man nicht sehen kann, wie der Rest aufgebaut ist, kann man da nicht viel mehr zu sagen.
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 20:36
Ich würde es innerhalb von TBuchMain deklarieren: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TBuchMain = class... private type TFilterMode = (flmDay, flmMonth); private procedure GebTag(Q_sl: TQuery; AFilterMode: TFilterMode); end; |
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 19.03.11 21:56
Au weiah: Fehlermeldung: die Methode FormCreate, auf die FormMain.OnCreate verweist, existiert nicht.
Soll der Verweis entfernt werden?
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: Sa 19.03.11 22:44
Du musst das private usw. natürlich nach den Komponenten und Ereignismethoden einfügen... 
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 19.03.11 23:06
Hi, Sebastian,
ich krieg's (noch) nicht gebacken:
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46:
| type TBuchMain = class(TForm) procedure ZeigeStringListe(sender:Tobject); procedure Button2Click(Sender: TObject); procedure Zeilelschen1Click(Sender: TObject); procedure Zeilehinzufgen1Click(Sender: TObject); procedure tnt1init(sender:Tobject);
private StartDrag : Boolean; type TFilterMode = (flmDay, flmMonth); procedure GebTagMon(Q_sl: TQuery; AFilterMode: TFilterMode); end;
public
end;
TOpenOffice = class public servicemanager: Variant; desktop: Variant; corereflection: Variant; dispatcherhelper: Variant; constructor Create; end;
const FONT_WEIGHT : record DONTKNOW, THIN, ULTRALIGHT, LIGHT, SEMILIGHT, NORMAL, SEMIBOLD, BOLD, ULTRABOLD, BLACK : extended; end = (DONTKNOW: 0.000000; THIN: 50.000000; ULTRALIGHT: 60.000000; LIGHT: 75.000000; SEMILIGHT: 90.000000; NORMAL: 100.000000; SEMIBOLD:110.000000; BOLD: 150.000000; ULTRABOLD: 175.000000; BLACK: 200.000000);
|
Hast du noch einmal Geduld?
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Sa 19.03.11 23:19
Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16:
| [...] type TFilterMode = (flmDay, flmMonth); TBuchMain = class(TForm) [...] procedure ZeigeStringListe(sender:Tobject); procedure Button2Click(Sender: TObject); procedure Zeilelschen1Click(Sender: TObject); procedure Zeilehinzufgen1Click(Sender: TObject); procedure tnt1init(sender:Tobject);
private StartDrag : Boolean; procedure GebTagMon(Q_sl: TQuery; AFilterMode: TFilterMode); end; [...] |
das lachen heb ich mir mal für später auf rofl
Für diesen Beitrag haben gedankt: D. Annies
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: Sa 19.03.11 23:29
Hi, glotzer,
da hast du ja sehr gut hingesehen  aber bedenke: wenn man etwas noch nie gemacht hat, und die Erklärung
etwas "luschig" gegeben wird, kriegt man es nicht hin. Nun kenne ich die richtige Reihenfolge - Danke
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
glotzer
      
Beiträge: 393
Erhaltene Danke: 49
Win 7
Lazarus
|
Verfasst: Sa 19.03.11 23:45
kein problem, das war niemals böse gemeint 
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: So 20.03.11 11:09
Kurze Nachfrage: statt flmMonth kann ich doch auch flmMon sagen, oder?
Eine "einWortAntwort" reicht ...
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
jaenicke
      
Beiträge: 19315
Erhaltene Danke: 1747
W11 x64 (Chrome, Edge)
Delphi 11 Pro, Oxygene, C# (VS 2022), JS/HTML, Java (NB), PHP, Lazarus
|
Verfasst: So 20.03.11 14:24
@ glotzer: Ich meinte das anders, so ist die Deklaration nicht an die Klasse gebunden. Das gibt nur Unordnung. Ich meinte das so: Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17:
| type TBuchMain = class(TForm) procedure ZeigeStringListe(sender:Tobject); procedure Button2Click(Sender: TObject); procedure Zeilelschen1Click(Sender: TObject); procedure Zeilehinzufgen1Click(Sender: TObject); procedure tnt1init(sender:Tobject);
private type TFilterMode = (flmDay, flmMonth); private StartDrag : Boolean; procedure GebTagMon(Q_sl: TQuery; AFilterMode: TFilterMode); public end; | @ Detlef: Ich habe das nicht umsonst so geschrieben... Delphi-Quelltext 1: 2: 3: 4: 5: 6: 7: 8:
| type TBuchMain = class... private type TFilterMode = (flmDay, flmMonth); private procedure GebTag(Q_sl: TQuery; AFilterMode: TFilterMode); end; | Durch das type startest du eine Typdeklarationssektion. Das kannst du nicht einfach mit anderen Sachen mischen. Vorher kannst du andere Deklarationen schreiben, aber nicht nach dem type. Da musst du zuerst noch einmal private hinschreiben.
Wie du das nennst, ob nun flmMonth oder anders ist egal, ich halte nur nichts davon unnötig abzukürzen, wenn die Bezeichner ohnehin schon sehr kurz sind...
|
|
D. Annies 
      
Beiträge: 1843
windows 7
D6 Enterprise, D7 Pers und TD 2006
|
Verfasst: So 20.03.11 18:50
Hi, Sebastian, danke für deine "Nachsorge"
Detlef
_________________ ut vires desint, tamen est laudanda voluntas
|
|
|