AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

BINARY Feld auslesen

Ein Thema von hawiwo · begonnen am 12. Jan 2024 · letzter Beitrag vom 12. Jan 2024
Antwort Antwort
hawiwo

Registriert seit: 5. Jul 2018
4 Beiträge
 
#1

BINARY Feld auslesen

  Alt 12. Jan 2024, 13:07
Datenbank: Firebird • Version: 4 • Zugriff über: FireDAC
Hallo,
mir ist klar, das das hier ein Delphi Forum ist. Evtl. kann mir trotz C++ helfen.
Ich habe eine Datenbank mit einem BINARY(16) Feld, das über einen Trigger beim erstellen eines Datensatzes mit UUID() befüllt wird.
Das funktioniert und select id form tabelle giebt dann sowas wie:
ID
================================
A1AC1E8DA7434FE78332324E99FCDA71
aus.

kann ich das mit folgendem Code auch ausgeben (funktioniert auch):
Code:
      std::stringstream ss;
      ss << "SELECT * FROM DATEN";
      std::string fsql = ss.str();
      FDQuery1->SQL->Text = fsql.c_str();
       try {
         FDQuery1->Open();
          TBytes idBytes = FDQuery1->FieldByName("id")->AsBytes;
          std::stringstream hex;
             for (int i = 0; i < idBytes.Length; ++i)
   {
      // Verarbeite jeden einzelnen Byte, z.B. gib es auf der Konsole aus
      hex << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << static_cast<int>(idBytes[i]);
   }

   std::cout << hex.str() << std::endl;
Ich will jedoch beim Erstellen mit "INSERT INTO TABELLE(FELD1) VALUES ('') RETURNING ID;" die für diesen neuen Datensatz generierte UUID abgreifen und habe dazu:
Code:
      std::stringstream ss;
      ss << "INSERT INTO DATEN (DBK) VALUES('AAA') returning id {into :new_id}";
      std::string fsql = ss.str();
      FDQuery1->SQL->Text = fsql.c_str();

       try {
         FDQuery1->Params->CreateParam(ftByte, "new_id", ptOutput)->DataType = ftBytes;
                 // oder FDQuery1->Params->CreateParam(ftBytes, "new_id", ptOutput);
         FDQuery1->ExecSQL();
         TBytes idBytes = FDQuery1->ParamByName("new_id")->AsBytes;
         for (int i = 0; i < idBytes.Length; ++i)
         {
            std::cout << std::hex << std::uppercase << std::setw(2) << std::setfill('0') << static_cast<int>(idBytes[i]);
         }
      std::cout << std::endl;
jedoch bekomme ich bei der ParamByName Zeile den Fehler:
[bcc64 Fehler] main.cpp(1024): wrong number of index arguments to property. Expecting 1, found 0
genau die Zeile funktioniert im ersten Beispiel.
ich weiß nicht warum...
kann jemand helfen?

Geändert von TBx (12. Jan 2024 um 13:31 Uhr) Grund: Code-Tags eingefügt
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.433 Beiträge
 
Delphi 7 Professional
 
#2

AW: BINARY Feld auslesen

  Alt 12. Jan 2024, 13:48
Habe annähernd 0 Ahnung zu C++ aber dashier hätte ich anders erwartet:

Statt
 ss << "INSERT INTO DATEN (DBK) VALUES('AAA') returning id {into :new_id}";

eher
ss << "INSERT INTO DATEN (DBK) VALUES('AAA') returning id into {:new_id}";

Kann aber sein, dass ich mich da heftig irre.
  Mit Zitat antworten Zitat
hawiwo

Registriert seit: 5. Jul 2018
4 Beiträge
 
#3

AW: BINARY Feld auslesen

  Alt 12. Jan 2024, 14:00
hab ich bei https://docwiki.embarcadero.com/RADS...RNING_(FireDAC)
geklaut aber aus Verzweiflung deinen Vorschlag trotzdem ausprobiert. Warum und wo die "wrong number of arguments" ...
in der Zeile TBytes idBytes = FDQuery1->ParamByName("new_id")->AsBytes;

Wenn ich das mit dem Feld DBK und den entsprechenden Typ
Anpassungen mache funktioniert das.
  Mit Zitat antworten Zitat
Benutzerbild von haentschman
haentschman

Registriert seit: 24. Okt 2006
Ort: Seifhennersdorf / Sachsen
5.303 Beiträge
 
Delphi 12 Athens
 
#4

AW: BINARY Feld auslesen

  Alt 12. Jan 2024, 14:19
Hallöle...😎

Wie wäre es statt
FDQuery1->ExecSQL mit
FDQuery1->Open ...Das Statement gibt eine Ergebnismenge zurück. (Returning)
  Mit Zitat antworten Zitat
hawiwo

Registriert seit: 5. Jul 2018
4 Beiträge
 
#5

AW: BINARY Feld auslesen

  Alt 12. Jan 2024, 14:46
verflixt... Das war's
Danke
  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 00:23 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz