Hi ihr,
irgendwie habe ich gerade eine Denkblockade und such mir schon n Wolf:
Ich möchte ein Array, dass bspw. so aufgebaut ist, in eine Firebird-Datenbank schreiben:
Delphi-Quellcode:
TORPTag = packed record
Key: String;
Value: String;
end;
TORPTags = Array of TORPTag;
Ich weiß, dass ich das mittels BLOBs erledigen kann. Dazu gibt es ja auch einige Beispiele, zumindest, wenn es sich um Bilder handelt. Die arbeiten meist alle mit TFileStream/TMemoryStream. Nur, wie bekomme ich ein Array in den Stream? Und wenn die Datenbankabfrage so aussieht:
Delphi-Quellcode:
procedure TORPDataBase.WriteWayToDB(Way: TORPWay);
var
BlobStr: TStream;
begin
//Create Query-Object for Way Insert
fInsertWayQuery := TZQuery.Create(
nil);
fInsertWayQuery.SQL.Text := '
INSERT INTO WAYS (WAY_ID, SUB_NODES, TAGS) VALUES (:way_id, :sub_nodes, :tags) RETURNING "ID"';
try
DecimalSeparator := '
.';
with fInsertWayQuery
do
begin
Connection := fConnection;
ParamCheck := true;
ParamByName('
way_id').AsInteger := StrToInt(Way.ID);
ParamByName('
tags').AsBlob := ?
ParamByName('
sub_nodes').AsString := EncodeSubNodes(Way.Subnodes);
ExecSQL;
end;
finally
fInsertWayQuery.Free;
end;
end;
Wie bekomme ich das Array da drinne unter, ohne, dass mir Zeos das
Query um die Ohren haut? Denn ein
SQL-Statement ist ja ein Text-Statement, da kann man ja keine Binärdaten unterbringen, oder?