AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein GUI-Design mit VCL / FireMonkey / Common Controls Delphi Komponente per WriteComponent in Datenbank speichern
Thema durchsuchen
Ansicht
Themen-Optionen

Komponente per WriteComponent in Datenbank speichern

Ein Thema von BenjaminHelbig · begonnen am 2. Apr 2004 · letzter Beitrag vom 2. Apr 2004
Antwort Antwort
BenjaminHelbig

Registriert seit: 23. Okt 2003
Ort: Mannheim
80 Beiträge
 
Delphi 5 Professional
 
#1

Komponente per WriteComponent in Datenbank speichern

  Alt 2. Apr 2004, 10:19
Hi DP'ler

ich habe folgendes Problem. Ich möchte eine TreeView in einer MySQL Datenbank speichern. DA ich aus der TreeView alle Formatierungen übernehmen möchte speichere ich die TreeView zuerst als Datei:

Delphi-Quellcode:
MyStream := TFileStream.Create('C:\test.tmp', fmCreate or fmShareCompat);
try Mystream.WriteComponent(tmptree);
finylls MyStream.free;
end;
daraufhin öffne ich den File mit AssignFile und lese ihn in ein DBMEmo.

Delphi-Quellcode:
AssignFile(extern, 'C:\test.tmp');
reset(extern);
while not eof(extern) do
 begin
   readln(extern, tmpvar);
   DBMemo1.Lines.Add(tmpvar);
 end;
Das Problem bei der Sache ist das beim Rückschreiben der Komponente fehler auftreten wie Stream Error usw. Wenn ich aber über WriteComponent nur in den File schreiben lasse und von dort wieder zurücklese funzt es einwandfrei.

Habt ihr eine Idee? Ich vermute mal das es daran liegt, dass er mir beim schreiben in das DBMEmo die Binärstruktur zerstört.

Grüße Benjamin
--------
Es ist schon über so viele Dinge Gras gewachsen, dass ich keinem Rasen mehr traue.
  Mit Zitat antworten Zitat
Benutzerbild von maximov
maximov

Registriert seit: 2. Okt 2003
Ort: Hamburg
548 Beiträge
 
Delphi 2005 Professional
 
#2

Re: Komponente per WriteComponent in Datenbank speichern

  Alt 2. Apr 2004, 10:31
Moin.

Ich sehe da uzwei möglichkeiten:

1. Du versuchst die kompo direkt in ein binäres DB feld zu streamen, einen Blob oder so. Bin da kein spezialist...ist aber IMO die beste und schnellste lösung!

2. Du konvertierst den binären stream in ein text-dfm. -> ObjectBinaryToText -> ObjectTextToBinary

So hab ich es gelöst:
Delphi-Quellcode:
function SaveCompoToFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var Stream1:TMemoryStream;
    Stream2:TMemoryStream;
      format : TStreamOriginalFormat;
begin
  result := false;
   format := sofText;
   Stream1 := TMemoryStream.Create;
  Stream2 := TMemoryStream.Create;
   try
      Stream1.WriteComponent(aCompo);
    Stream1.Position := 0;
    if not asBinary then
    begin
      format := sofText;
      ObjectBinaryToText(Stream1,Stream2,format);
    end else Stream1.SaveToStream(Stream2);
    Stream2.SaveToFile(FileName);
    result := true;
   finally
      Stream1.Free;
      Stream2.Free;
   end;
end;


function LoadCompoFromFile(aCompo : TComponent; FileName: string; asBinary: Boolean = false): boolean;
var FileStream:TFileStream;
    MemoryStream:TMemoryStream;
    format:TStreamOriginalFormat;
begin
  result := false;
  if not FileExists(fileName) then exit;
  MemoryStream := TMemoryStream.Create;
  FileStream := TFileStream.Create(FileName,fmOpenRead);
  try
    if not asBinary then
    begin
      format := sofBinary;
      ObjectTextToBinary(FileStream,MemoryStream,format);
    end else MemoryStream.LoadFromStream(FileStream);
    MemoryStream.Position := 0;
    MemoryStream.ReadComponent(aCompo);
    result := true;
  finally
    FileStream.Free;
    MemoryStream.Free;
  end;
end;
Denke das hilft dir erstmal weiter. Aber in eine datei schreiben dann in ein memo laden, um es dann in die DB zu streamen hört sich nicht gerade effizient an
mâxîmôv.

{KDT}
  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 10:41 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