Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Umstieg DBExpress -> FireDac (https://www.delphipraxis.net/187413-umstieg-dbexpress-firedac.html)

Delbor 27. Nov 2015 12:10

Datenbank: MySQL • Version: 5.7.9.1 • Zugriff über: DBExpress/FireDac

Umstieg DBExpress -> FireDac
 
Hi zusammen

Da ich unter Verwendung der DBExpress-Komponenten keine Verbindung mit meinem MySQL-Server herstellen konnte, hab ich das mal mit FireDac versucht, und das klappte problemlos. Soweit, so gut, sieht man mal davon ab, dass mich die Vielfalt an FireDac-Komponenten fürs erste fast erschlagen hätte - glücklicherweise hab ich noch das gefunden (Die Antwort von Uwe Raabe)...
So denke ich, sollte ich die Sache durchziehen können, indem ich (einfach?) die verwendeten DBExpress-Komponenten durch entsprechende FireDac-Komponenten ersetze.

Als erstes will ich mir die Insert-Prozeduren vornehmen, wobei ich am Code selbst möglichst wenig ändern will. Der Ablauf ist folgender, beginnend mit dem Aufruf der ersten Insert-Prozedur aus einem eigenen FileopenFrame:

Delphi-Quellcode:
  if MySQLDataMod.GetSQLConnection(AUser,APass) then begin
    try
    MySQLDataMod.MySQLConnection.KeepConnection := true;
    Transaction := MySQLDataMod.MySQLConnection.BeginTransaction;
    MySQLDataMod.MySQLConnection.AutoClone := false;
    MySQLDataMod.BildTabelleInsert2(100, FolderID);                     // Startet die Insert-Prozeduren
    finally
      MySQLDataMod.MySQLConnection.CommitFreeAndNil(Transaction);
      CM_First.ProgressbarDlg.FormStyle := fsnormal;
      CM_First.ProgressbarDlg.Close;
      FreeAndNil(CM_First.ProgressbarDlg);
    end;
  end;
Innerhalb einer Iteration durch eine Pathlist werden hier folgende Prozeduren aufgerufen, die jede ein SQL-Insert-Statement für jeweils eine Tabelle ausführt und jeweils die in der Liste nächste Prozedure aufruft:
  1. MySQLDataMod.BildTabelleInsert2(100, FolderID),
  2. BildDescribeTabelleInsert(BildTabelleLastId,BildNa me,Bildpfad);
  3. kategorien_bildDescribeTabelleInsert(BildDescribeL astID,bildtabelle_idbild);
Dadurch werden Bilder im Bitmapformat in die Datenbank geschrieben, deren Originale sich im RAW-Format am angegebenen Pfad befinden.

Die Umstellung hab ich schon mal damit begonnen:
Delphi-Quellcode:
procedure TFireDacMySQLModul.CreateCategory;
  var ACategory, SQLString: String;
begin
  ACategory := Self.Category;
  SQLString := 'Insert Into kategorien_tabelle(kategorie) Values (:ACategory)';
  if GetSQLConnection(FUser,FPass) then
  begin
    Self.FDQueryMain.Connection := Self.FDConnectionMySql;
    Self.FDQueryMain.Command := SQLString;
    Self.FDQueryMain.Params.CreateParam(ftString,ACategory,ptInput);
    MySQLQuery1.Params[0].AsString := ACategory;
    MySQLQuery1.ExecSQL(false);
    SelectCategoryRecords;
  end;
end;
Meine Unsicherheit hier besteht in der Verwendung der Params: Laut Help gibt es neben Params.Add(); aber auch Params.Create().
In DExpress ist es so, dass jedes Paramlist-Item mit CreateParams erzeugt werden muss. Wie sich das unter FireDac verhält, habe ich bislang noch nicht finden können.
Die oben aufgelisteten Prozeduren arbeiten mit mehreren Createparams...
Einzig die an Createparams übergebenen Parameter scheinen gleich zu sein; die ersten 2 sind es, soviel ich bis jetzt gefunden habe, sicher.

Vielen Dank für eure Antworten!

Gruss
Delbor

mkinzler 27. Nov 2015 12:30

AW: Umstieg DBExpress -> FireDac
 
Eigentlich sollten die Parameter automatisch auf Grund der Abfrage erzeugt werden (wenn nicht in Einstellungen der Query-Komponente deaktiviert.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:34 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