![]() |
Datenbank: Firebird • Version: 4 • Zugriff über: FireDAC
BINARY Feld auslesen
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:
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:
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;
Code:
jedoch bekomme ich bei der ParamByName Zeile den Fehler:
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; [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? |
AW: BINARY Feld auslesen
Habe annähernd 0 Ahnung zu C++ aber dashier hätte ich anders erwartet:
Statt
Delphi-Quellcode:
ss << "INSERT INTO DATEN (DBK) VALUES('AAA') returning id {into :new_id}";
eher
Delphi-Quellcode:
ss << "INSERT INTO DATEN (DBK) VALUES('AAA') returning id into {:new_id}";
Kann aber sein, dass ich mich da heftig irre. |
AW: BINARY Feld auslesen
hab ich bei
![]() geklaut :-D 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. |
AW: BINARY Feld auslesen
Hallöle...😎
Wie wäre es statt
Delphi-Quellcode:
mit
FDQuery1->ExecSQL
Delphi-Quellcode:
...Das Statement gibt eine Ergebnismenge zurück. (Returning)
FDQuery1->Open
|
AW: BINARY Feld auslesen
verflixt... Das war's:thumb:
Danke |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:11 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 by Thomas Breitkreuz