AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte Joblist - Aufgabenplaner
Thema durchsuchen
Ansicht
Themen-Optionen

Joblist - Aufgabenplaner

Ein Thema von AlexII · begonnen am 18. Sep 2014 · letzter Beitrag vom 19. Nov 2014
Antwort Antwort
-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#1

AW: Joblist - Aufgabenplaner

  Alt 19. Sep 2014, 07: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.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#2

AW: Joblist - Aufgabenplaner

  Alt 22. Sep 2014, 10:51
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.

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
Äh.... sag ma und wie übergebe ich die Parameter? Etwa so?

Delphi-Quellcode:
// procedure aufrufen
LoadJobslistByStart(True, ListView1);
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#3

AW: Joblist - Aufgabenplaner

  Alt 22. Sep 2014, 10:57
Äh.... sag ma und wie übergebe ich die Parameter? Etwa so?

Delphi-Quellcode:
// procedure aufrufen
LoadJobslistByStart(True, ListView1);
Korrekt.
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.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#4

AW: Joblist - Aufgabenplaner

  Alt 22. Sep 2014, 11:46
ok ))
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!

Geändert von AlexII (22. Sep 2014 um 11:51 Uhr)
  Mit Zitat antworten Zitat
-=ZGD=-

Registriert seit: 25. Apr 2006
Ort: Bad Aibling
105 Beiträge
 
Delphi 10.1 Berlin Professional
 
#5

AW: Joblist - Aufgabenplaner

  Alt 22. Sep 2014, 11:52
Du verwendest in der Prozedur auch immer
Code:
ListView1
.
Du musst
Code:
aListView
verwenden, da so der Übergabeparameter/Variable heißt.
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.
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#6

AW: Joblist - Aufgabenplaner

  Alt 22. Sep 2014, 11:55
Du verwendest in der Prozedur auch immer
Code:
ListView1
.
Du musst
Code:
aListView
verwenden, da so der Übergabeparameter/Variable heißt.
Ja hab's gemerkt.

Mache jetzt noch die selber Geschichte für's Suchen und dann ist wohl alles ok bei mir, oder gibt's noch Vorschläge bzw. Kritik?
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
AlexII

Registriert seit: 28. Apr 2008
1.717 Beiträge
 
FreePascal / Lazarus
 
#7

AW: Joblist - Aufgabenplaner

  Alt 30. Sep 2014, 13:11
Ich nutze hier mehrere Querys (SQLQuery1 und SQLQueryCategory), wäre es auch nur mit einem gegangen?

Delphi-Quellcode:
    // -------------------------- Category ---------------------------------------
    // Kategorie leer
    if CategoryComboBox.Text = 'then
    begin
      Form1.SQLQuery1.ParamByName('fk_category_id').Clear;
    end else if (CategoryComboBox.Items.IndexOf(CategoryComboBox.Text) = -1) and (CategoryComboBox.Text <> '') then
    begin
      // Kategorie nicht vorhanden, also neue Kategorie in die DB schreiben
      Form1.SQLQueryCategory.Close;
      Form1.SQLQueryCategory.SQL.Text := 'INSERT INTO tbcategory VALUES(NULL, :category)';
      Form1.SQLQueryCategory.ParamByName('category').AsString := CategoryComboBox.Text;
      Form1.SQLQueryCategory.ExecSQL;
      Form1.SQLTransaction1.Commit;

      // Die letzte ID auslesen
      Form1.SQLQueryCategory.Close;
      Form1.SQLQueryCategory.SQL.Text := 'SELECT last_insert_rowid() as id_tbcategory FROM tbcategory';
      Form1.SQLQueryCategory.Open;
      CategoryLastID := Form1.SQLQueryCategory.FieldByName('id_tbcategory').AsInteger;
      Form1.SQLQuery1.ParamByName('fk_category_id').AsInteger := CategoryLastID;
    end else if CategoryComboBox.Items.IndexOf(CategoryComboBox.Text) >= 0 then
    begin
      // String in der CB vorhanden, ID zuweisen
      Form1.SQLQuery1.ParamByName('fk_category_id').AsInteger := Integer(CategoryComboBox.Items.Objects[CategoryComboBox.Items.IndexOf(CategoryComboBox.Text)]);
    end;
    // -------------------------- Ende Category ----------------------------------

    Form1.SQLQuery1.ExecSQL;
    Form1.SQLTransaction1.Commit;
Bin Hobbyprogrammierer! Meine Fragen beziehen sich meistens auf Lazarus!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:42 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