![]() |
Datenbank: PG • Version: 16 • Zugriff über: FireDAC
FiredDAC Postgres Feldtyp JSON
Hi zusammen,
ich versuche gerade einen Datensatz in eine Postgres-Tabelle einzutragen, welche ein Feld vom Datentyp "json" beinhaltet. Hat das jemand schon erfolgreich geschafft? Folgenden Code führe ich aus:
Code:
Folgende Fehlermeldung erhalte ich
procedure TForm1.Button1Click(Sender: TObject);
var Params: TFDParams; Guid: TGUID; begin CreateGUID(Guid); try Params := TFDParams.Create; Params.Add('guid', Guid.ToString); Params.Add('type', '123'); Params.Add('data', '{"value": "123"}'); Params.Add('inserted', Now); Params.Add('processed', False); Params.ParamByName('guid').DataType := ftGuid; Params.ParamByName('data').DataType := ftString; // Params.ParamByName('data').DataType := ftBlob; // Params.ParamByName('data').DataType := ftStream; FDConnection1.ExecSQL('INSERT INTO events (guid, type, data, inserted, processed)' + ' VALUES (:guid, :type, :data, :inserted, :processed)', Params); finally Params.Free; end; end; Zitat:
|
AW: FiredDAC Postgres Feldtyp JSON
Delphi-Quellcode:
so?
Params.ParamByName('data').DataType := ftString;
FDConnection1.ExecSQL('INSERT INTO events (guid, type, data, inserted, processed)' + ' VALUES (:guid, :type, :data::JSON, :inserted, :processed)', Params); |
AW: FiredDAC Postgres Feldtyp JSON
@Himitsu,
Besten Dank! Nachdem ich zusätzlich gemerkt habe, dass ich so wie oben gar nicht mit den Parametern arbeiten kann (keine Datentypzuweisung nachdem ich einem Parameter einen Wert zugewiesen habe :wall:), hat genau deine Antwort mein eigentliches Problem gelöst. Wieder was gelernt :-) so läufts:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var Params: TFDParams; Guid: TGUID; Query: TFDQuery; begin Query := TFDQuery.Create(nil); try CreateGUID(Guid); Query.Connection := FDConnection1; Query.SQL.Text := 'INSERT INTO events (guid, type, data, inserted, processed)' + ' VALUES (:guid, :type, :data::JSON, :inserted, :processed)'; Query.Params.ParamByName('guid').AsGUID := Guid; Query.Params.ParamByName('data').AsString := '{"value": "123"}'; Query.Params.ParamByName('type').AsString := '123'; Query.Params.ParamByName('inserted').AsDateTime := Now; Query.Params.ParamByName('processed').AsBoolean := False; Query.ExecSQL; finally Query.Free; end; end; |
AW: FiredDAC Postgres Feldtyp JSON
PS:
Delphi-Quellcode:
Query.ParamByName('guid').AsGUID := TGUID.NewGuid;
bzw.
Delphi-Quellcode:
Query.ParamByName('guid').AsString := TGUID.NewGuid.ToString;
Das erste .Params dürfte bestimmt optional sein. Wir verwenden allerdings PgDAC. Mit Datentypen hatten wir vor Kurzem auch Problemchen, da Devart etwas umgebaut hatte und die "automatischen" Datentypen an einigen Stellen nicht mehr funktionierten, wobei dort der Spaß erst recht begann, wenn man einfach nur die Reihenfolge der Parameter änderte. |
AW: FiredDAC Postgres Feldtyp JSON
Jup, recht haste :thumb:
Mit der Angabe der Datentypen an den Parametern scheint das auf jeden Fall super zu funktionieren. BTW: Womit ich ebenfalls Probleme hatte:
Code:
Das hat zwar grundsätzlich funktioniert, aber in der DB stand dann eine andere GUID, als die, die ich eigentlich hatte. Irgendwie scheint Delphi das fehlerhaft umzuwandeln. :?
ParamByName('id').AsGUID
Aber auch das konnte ich mit :id::UUID lösen Gruß |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:53 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