Einzelnen Beitrag anzeigen

Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Denkblockade: Wie speicher ich ein Array in einer Datenbank?

  Alt 3. Mai 2009, 16:31
Datenbank: Firebird Embedded • Version: 2.1.2 • Zugriff über: ZEOS 6.6.4
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?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat