Einzelnen Beitrag anzeigen

DonManfred

Registriert seit: 8. Nov 2007
Ort: Düren
55 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Anleitung zum Umgang mit Datenbank Komponenten

  Alt 7. Okt 2012, 07:57
Wir haben uns in der Firma vor einem Monat die Devart-Komponente MyDAC gekauft und ich muss sagen das war der beste Einkauf den wir je getätigt haben. Bis dahin hatten wir (bzw. ich als Programmierer) die ADO-Komponenten zum Zugriff zu MySQL benutzt; über ODBC.

Der Geschwindigkeitszugewinn den wir durch die MyDAC erfahren haben war bzw. ist ENORM. Ich kann die Komponenten von Devart wärmstens empfehlen.

Ich programmiere seit 5 Jahren nun intensiv mit Delphi. Vorher knappe 10 Jahre mit php und war es von da gewohnt meine SQLs immer manuell auszuführen bzw die Daten dann auch manuell abzufragen bzw zu verwenden.

TDBGrid ist ne nette Komponente wenn man es schnell umgesetzt haben will. ABER sie ist halt nicht sehr komfortabel.
Für einfach Liste wie "Anreden", "Geschlechter" usw nutzen wir sie auch. Aber sobald wir mehr komfort brauchen benutze ich die TAdvStringGrid-Komponente von TMS-Software die ich dann selber befülle und mit Checkboxen usw ausstatte.

Für "Basics" nutze ich idR zwei TMyQuery-Komponenten. Einmal als Abfrage-Query, eine weite für Inserts bzw Updates.

Vom Prinzip her läuft das dann meistens wie folgt ab:

Delphi-Quellcode:
qryorder.Active := false;
qryorder.SQL.Clear;
qryorder.SQL.Add('SELECT *, concat(ma.kd_vorname," ",ma.kd_nachname) AS dest, ma.kd_ma_google_email AS google_email, ma.kd_ma_google_passwort AS google_passwort , kd.*, bvh.* FROM beka_pp pp ');
qryorder.SQL.Add('LEFT JOIN beka_pptypen ppt ON pp_typID=ppt.ppt_id ');
qryorder.SQL.Add('LEFT JOIN beka_kunden ma ON pp_maID=ma.kd_id ');
qryorder.SQL.Add('LEFT JOIN beka_kunden kd ON pp_kdID=kd.kd_id ');
qryorder.SQL.Add('LEFT JOIN beka_bvh bvh ON pp_bvhID=bvh.bvh_id ');
qryorder.SQL.Add('LEFT JOIN beka_order o ON pp_belegID=o.order_beleg ');
qryorder.SQL.Add('WHERE pp_transfer=1 AND pp_datum_sort > "20120101" ORDER BY pp_maID ASC, pp_datum_sort DESC;');
qryorder.ExecSQL;
qryorder.Active := true;
if qryorder.RecordCount > 0 then begin
  while not qryorder.Eof do begin
    aktmaID := qryorder.FieldByName('pp_maID').AsInteger;
    [..]
    writeqry.SQL.Clear;
    writeqry.SQL.Add('UPDATE blablabla);
writeqry.ExecSQL;
qryorder.Next;
end;
end;
qryorder und writeqry sind vom Typ TMyQuery und sind natürlich mit einer TMyConnection verbunden.

TMyDatasource brauche ich nur, wenn ich ein TDbGrid benutzen will. Solche Konstrukte gibt es zu hunderten in unserer Warenwirtschaft...
  Mit Zitat antworten Zitat