Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
Delphi 10.1 Berlin Professional
|
AW: Joblist - Aufgabenplaner
19. Sep 2014, 08:11
Guten Morgen.
Find´s gut.
Funktioniert.
Ich habe mir natürlich auch mal den Quelltext angeschaut.
Es gibt einige Dinge, die ich anders machen würde, da diese redundant sind.
Du hast zwei Funktionen, die bis auf die Reihenfolge der Selektierung die gleichen Felder abfragen. Einzige Unterschiede sind das Flag zum Einen und die Listview zum Anderen.
Delphi-Quellcode:
// Geschlossene Aufgaben
procedure TForm1.LoadCloseJobslistByStart();
var
MyItem: TListItem;
begin
try
ListView2.Clear;
ListView2.Items.BeginUpdate;
SQLQuery1.Close;
SQLQuery1.SQL.Text := 'SELECT tbmain.id_tbmain, '
+ 'tbmain.title, '
+ 'tbmain.start, '
+ 'tbmain.ende, '
+ 'tbcategory.category, '
+ 'tbprocessowner.processowner, '
+ 'tbpriority.priority, '
+ 'tbstatus.status, '
+ 'tbplace.place '
+ 'FROM tbmain '
+ 'LEFT JOIN tbcategory ON tbmain.fk_category_id=tbcategory.id_tbcategory '
+ 'LEFT JOIN tbprocessowner ON tbmain.fk_processowner_id=tbprocessowner.id_tbprocessowner '
+ 'LEFT JOIN tbpriority ON tbmain.fk_priority_id=tbpriority.id_tbpriority '
+ 'LEFT JOIN tbstatus ON tbmain.fk_status_id=tbstatus.id_tbstatus '
+ 'LEFT JOIN tbplace ON tbmain.fk_place_id=tbplace.id_tbplace WHERE flag = 1';
SQLQuery1.Open;
while not SQLQuery1.Eof do
begin
MyItem := ListView2.Items.Add;
MyItem.Data := Pointer(SQLQuery1.FieldByName('id_tbmain').AsInteger); //data mit ids fuellen. Mit dieser ID werden weitere Operationen gemacht, z.B. Bearbeiten, Löschen
MyItem.Caption := SQLQuery1.FieldByName('title').AsString;
MyItem.SubItems.Add(SQLQuery1.FieldByName('priority').AsString);
MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('start').AsDateTime)); // DateTimeToStr zeigt auch die Uhrzeit an
// Prüfen, ob Datenfeld belegt
if not SQLQuery1.FieldByName('ende').IsNull then
MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('ende').AsDateTime))
else MyItem.SubItems.Add('');
MyItem.SubItems.Add(SQLQuery1.FieldByName('place').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('category').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('processowner').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('status').AsString);
SQLQuery1.Next;
end;
ListView2.Items.EndUpdate;
except
MessageDlg('Die Aufgaben konnten nicht gelesen werden!', mtError, [mbOk], 0);
end;
end;
// Offene Aufgaben
procedure TForm1.LoadJobslistByStart();
var
MyItem: TListItem;
begin
try
ListView1.Items.BeginUpdate;
ListView1.Clear;
SQLQuery1.Close;
SQLQuery1.SQL.Text := 'SELECT tbmain.id_tbmain, '
+ 'tbmain.title, '
+ 'tbmain.start, '
+ 'tbmain.ende, '
+ 'tbcategory.category, '
+ 'tbprocessowner.processowner, '
+ 'tbpriority.priority, '
+ 'tbstatus.status, '
+ 'tbplace.place '
+ 'FROM tbmain '
+ 'LEFT JOIN tbcategory ON tbmain.fk_category_id=tbcategory.id_tbcategory '
+ 'LEFT JOIN tbprocessowner ON tbmain.fk_processowner_id=tbprocessowner.id_tbprocessowner '
+ 'LEFT JOIN tbpriority ON tbmain.fk_priority_id=tbpriority.id_tbpriority '
+ 'LEFT JOIN tbstatus ON tbmain.fk_status_id=tbstatus.id_tbstatus '
+ 'LEFT JOIN tbplace ON tbmain.fk_place_id=tbplace.id_tbplace WHERE flag = 0';
SQLQuery1.Open;
while not SQLQuery1.Eof do
begin
MyItem := ListView1.Items.Add;
MyItem.Data := Pointer(SQLQuery1.FieldByName('id_tbmain').AsInteger); //data mit ids fuellen. Mit dieser ID werden weitere Operationen gemacht, z.B. Bearbeiten, Löschen
MyItem.Caption := SQLQuery1.FieldByName('title').AsString;
MyItem.SubItems.Add(SQLQuery1.FieldByName('priority').AsString);
MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('start').AsDateTime)); // DateTimeToStr zeigt auch die Uhrzeit an
// Prüfen, ob Datenfeld belegt
if not SQLQuery1.FieldByName('ende').IsNull then
MyItem.SubItems.Add(DateToStr(SQLQuery1.FieldByName('ende').AsDateTime))
else MyItem.SubItems.Add('');
MyItem.SubItems.Add(SQLQuery1.FieldByName('place').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('category').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('processowner').AsString);
MyItem.SubItems.Add(SQLQuery1.FieldByName('status').AsString);
SQLQuery1.Next;
end;
ListView1.Items.EndUpdate;
except
MessageDlg('Die Aufgaben konnten nicht gelesen werden!', mtError, [mbOk], 0);
end;
end;
Besser wäre es, du würdest einfach einen Boolean übergeben und die ListView.
Delphi-Quellcode:
procedure LoadJobslistByStart(aClosedOnes: Boolean; aListView: TListView);
begin
//Irgendwo unterscheidest du dann.
...
+ 'LEFT JOIN tbplace ON tbmain.fk_place_id=tbplace.id_tbplace WHERE flag = :flag';
if aClosedOnes then
begin
SQLiteQuery1.ParamByName('flag').value:= 0;
end
else
begin
SQLiteQuery1.ParamByName('flag').value:= 1;
end;
//Weitere Verarbeitung
end;
Gruß,
Stefan
Stefan Michalk Wer Provokationen, Ironie, Sarkasmus oder Zynismus herauslesen kann soll sie ignorieren um den Inhalt meiner Beiträge ungetrübt erfassen zu können.
|