Einzelnen Beitrag anzeigen

norwegen60

Registriert seit: 23. Dez 2007
Ort: Schwarzwald
505 Beiträge
 
Delphi 12 Athens
 
#3

AW: Query in Thread abarbeiten (UniDac mit MsSQL)

  Alt 23. Jan 2017, 22:42
Hallo,

vielen Danke fürs Feedback. Ich weiß dass es mühsam ist, den ganzen Code anzuschauen. Wenn ich aber 10 Threads mit unterschiedlichen Fragen öffne wirds wohl auch nicht einfacher. Deshalb habe ich mal alles in einen Topf geworfen (und auch in eine Unit )

1. Hat das eine Sinn das verschiede Variablen den_ Unterstrich tragen statt wie "üblich" F?
Habe ich geändert. Kam aus einem der ersten Beispiele und ich dachte das macht man bei Threads vieleicht so
2. Warum hat das Event für den Thread den Namen "TThreadBoolean" statt einem sprechenden Namen wie "TFinishLoadList" ... am Namen sollte man schon die Funktionsweise "erahnen"
Weil ich den für verschiedene Aufgaben verwende wo ich ein Boolean übergebe
4. Das gehört nicht in den Thread thrReadDb.ReadyEvent := Form2.SyncReady; Den Eventhander in der Form deklarieren und verbinden.
Habe ich geändert als ich den Thread in eine eigen Unit verschoben habe und eine Rückverlinkung zum Form benötigt hätte
5. TListData = class(TList<TValues>) ... erzeugt dir Speicherlecks mit Values := TValues.Create; besser http://docwiki.embarcadero.com/Libra...ectList.Create
Habe ich mir angeschaut. Hintergrung für TListData = class(TList<TValues>) ist, dass ich die Liste dem Master-Record anhängen will. In etwas so:
Delphi-Quellcode:
  TCalReport = class
  private
    FNr : String;
    ...
    FValues: TListData
  public
    ...
  end;
6. Keine Passworte hardcodiert im Connectionstring
War nur für die Schnelle
7. thrReadDb.Resume; ... nicht mehr verwenden sondern START
Werde ich ändern
8. thrReadDb.FreeOnTerminate := TRUE; habe ich fast überlesen zwischen den Kommentaren.
Was meinst du damit?
9. thrReadDb.dbcon.ProviderName := TSQLServerUniProvider.Create(NIL).Name; ... einfach zuordnen statt von neuer Instanz. (imho legt die UniDAC automatisch intern eine Instanz an) besser: FConnection.ProviderName := 'Interbase';
Habe die DB-Komponenten bisher immer in einem Datamodul angelegt. Da muss ich wohl noch üben.
10. Aufteilung in separate Units. Die Logik (Thread) hat nichts in der Form Unit zu suchen.
Da war ich die letzten Stunden dran, denn das ist ja eines der Ziele der Übung. Trennung GUI - Logic - Daten
11. WICHTG: Der Code ist nicht konsistent. Mal "true" mal "TRUE". Benutze lieber einen Codeformatter...
Bin ich mir am angewöhnen.

Es ist nicht ganz einfach Quellen zu finden, auf die man sich verlassen kann. Auch die Delphi-Beispiele verwenden z.B. Resume http://docwiki.embarcadero.com/CodeE...dList_(Delphi)
Und im Moment habe ich noch meine liebe Mühe mit dem Thema "Thread"

Grüße
Gerd

Geändert von norwegen60 (23. Jan 2017 um 23:50 Uhr)
  Mit Zitat antworten Zitat