Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   TFDQuery.ParamByName().AsBlob (https://www.delphipraxis.net/189641-tfdquery-parambyname-asblob.html)

Zwirbel 4. Jul 2016 15:06

Datenbank: Firebird • Version: 3 • Zugriff über: Delphi

TFDQuery.ParamByName().AsBlob
 
Hallo,

beschäftige mich gerade mit Firebird 3.0. Auch wenn ich das Beispiel-Projekt nicht zum Laufen bekommen habe (siehe http://www.delphipraxis.net/189552-f...uft-nicht.html) habe ich mittlerweile meine Applikation so weit im Griff. Es geht lediglich darum Daten aus einer anderen Datenbank (basierend auf Paradox) nach FB zu übertragen. Es sind ca. 150 Tabellen. Beim letzten Umstieg von der Vorgängerdatenbank auf Paradox hatte ich quasi für jede einzelne Tabelle (damals waren es noch deutlich weniger), eine eigne Routine geschrieben und hatte somit für alle Felder der Pdx-Tabellen auch persistene Felder an der Hand. Diesmal wollte ich mir die Arbeit nicht machen und habe eine globale Routine geschrieben die mir einfach alle Tabellen der Quelle durchläuft und die Felder in die Zieltabelle in FB überträgt. Ohne persistente Felder bin ich nun gezwungen die Felder per ParamByName anzusprechen, je nach Datentyp unterschiedlich, soweit auch kein Problem.
Delphi-Quellcode:
    Session.GetTableNames(dbsAM_Pdx.DatabaseName, '', False, False, lbTableNames.Items); // Liste der Tabellen holen
    for i := 0 to Pred(lbTableNames.Count) do begin
      tbl_Pdx.TableName := lbTableNames.Items[i];
      tbl_Pdx.Open;
      try
        tbl_Pdx.First;

        { Alle Datensätze der Quelltabelle durchlaufen }
        for j := 0 to Pred(RecordCount) do begin
          for k := 0 to Pred(tbl_Pdx.Fields.Count) do begin
            FieldNameUpper := UpperCase(tbl_Pdx.Fields[k].FieldName);
            FieldNameMixed := tbl_Pdx.Fields[k].FieldName;

            case tbl_Pdx.Fields[k].DataType of
              ftString : qry_FB.ParamByName(FieldNameUpper).AsString := tbl_Pdx.FieldByName(FieldNameMixed).AsString;
Aber ich habe zwei Tabellen die BLOBs verwenden. Und das klappt nicht, für das TTable gibt es kein AsBlob oder etwas vergleichbares.
Delphi-Quellcode:
  ftBlob  : qry_FB.ParamByName(FieldNameUpper).AsBlob := tbl_Pdx.FieldByName(FieldNameMixed).???;
Hat jemand eine Idee wie man das hinbekommt? TIA.

baumina 4. Jul 2016 15:26

AW: TFDQuery.ParamByName().AsBlob
 
Keine Ahnung ob das mit Blobs auch gehen kann (wahrscheinlich eher nicht), aber ich würde bei den Feldtypen nicht unterscheiden, sondern immer .Value zuweisen.

Beispiel:
Delphi-Quellcode:
 qry_FB.ParamByName(FieldNameUpper).Value := tbl_Pdx.FieldByName(FieldNameMixed).Value;

Zwirbel 4. Jul 2016 15:49

AW: TFDQuery.ParamByName().AsBlob
 
Zitat:

Zitat von baumina (Beitrag 1341928)
Keine Ahnung ob das mit Blobs auch gehen kann (wahrscheinlich eher nicht), aber ich würde bei den Feldtypen nicht unterscheiden, sondern immer .Value zuweisen.

Beispiel:
Delphi-Quellcode:
 qry_FB.ParamByName(FieldNameUpper).Value := tbl_Pdx.FieldByName(FieldNameMixed).Value;

Ja, das klappt.

Vielen Dank für die rasche Antwort.


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