Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi html-Inhalt des WebBrowsers in Datenbank speichern? (https://www.delphipraxis.net/51327-html-inhalt-des-webbrowsers-datenbank-speichern.html)

Hansi 10. Aug 2005 18:08


html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hey,

In einem anfangs leeren WebBrowser schreibe ich Text usw rein. Nun möchte ich den html code in eine Datenbank(MySQL) speichern.

Wie mache ich so was?

marabu 10. Aug 2005 19:45

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hallo Hansi,

vielleicht hilft dir das weiter:

Delphi-Quellcode:
var
  bClearDirty: boolean = true;

function SaveToStream(wb: TWebBrowser; const s: TStream): HRESULT;
begin
  if not Assigned(wb.Document) then AssignDocument(wb);
  s.seek(0, 0);
  Result := (wb.Document as IPersistStreamInit).Save(TStreamadapter.Create(s), bClearDirty);
end;

function SaveHypertext(wb: TWebBrowser; fileName: string): string;
var
  fs: TFileStream;
begin
  fs := TFileStream.Create(fileName, fmCreate);
  SaveToStream(wb, fs);
  fs.Free;
end;

procedure Test;
begin
  SaveHypertext(WebBrowser, 'c:\temp\hansi.html');
end;
Grüße vom marabu

Hansi 11. Aug 2005 09:16

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hallo marabu,

Vielen Dank für Deine Hilfe!

Damit sind fast alle Probleme schon gelöst; Nur...

Wie kann ich den Inhalt in eine Variable zwischenspeichern, damit ich dann die Variable in die Datenbank speichern kann? Muss ich da über eine Temp Datei gehen oder geht das auch direkt!

marabu 11. Aug 2005 09:26

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Nimm das (ungetestet) noch dazu:

Delphi-Quellcode:
function GetHypertext(wb: TWebBrowser): string;
var
  s: TMemoryStream;
  p: pointer;
begin
  s := TMemoryStream.Create;
  SaveToStream(wb, s);
  SetLength(Result, s.Size);
  p := @Result[1];
  Move(s.Memory^, p^, s.Size);
  s.Free;
end;
marabu

Hansi 14. Aug 2005 09:29

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hey,

Also, SaveHypertext funzt (fast).

Die Zeile:
Delphi-Quellcode:
if not Assigned(wb.Document) then AssignDocument(wb);
habe ich mit "//" auskommentiert, weil sonst folgende Fehlermeldung kommt:
Undefinierter Bezeichner "AssignDocument"
Woran liegt es?

Das Speichern in eine Datei funktioniert bestens! Danke!

Das Speichern des WebBrowser Inhaltes in eine String Variable tut aber nicht so!
Wenn ich mir die Variable mit ShowMessage anzeigen lassen steht da:
"ÿþ<"

Irgendwo mache ich da noch einen Fehler! Kann mir nochmal jemand helfen?

marabu 14. Aug 2005 10:07

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hansi, du machst nicht direkt einen Fehler - mein Code ist noch nicht für Unicode angepasst. Der Inhalt des web document muss bei UTF-8 und UTF-16 codierten Seiten erst noch umgeformt werden.

marabu

Hansi 14. Aug 2005 10:20

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hallo marabu,

ohje...

Warum brauche ich das, bei der Speicherung in eine Datei tut es doch auch?


Wie wandelt man den Stream dann in Unicode um?

Edit:
Warum funzt es mit dem Code nicht???
Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  F1  :TextFile;
  x :String;
begin
  SaveHypertext(WebBrowser1, 'c:\temp\hansi.html');
  AssignFile(F1,'c:\temp\hansi.html');
  Reset(F1);
  read(F1,x);
  ShowMessage(x);
end;
Wenn ich die Datei im Editor öffne steht folgendes drinn:
Zitat:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META http-equiv=Content-Type content="text/html; charset=unicode">
<META content="MSHTML 6.00.2900.2722" name=GENERATOR></HEAD>
<BODY>dsdfsdfdfdfdfd</BODY></HTML>

marabu 14. Aug 2005 13:54

Re: html-Inhalt des WebBrowsers in Datenbank speichern?
 
Hallo Hansi,

schau dir mal die Code-Konverter-Funktionen - z.B. UTF8Decode() - in der unit System an, da sollte Einiges für dich dabei sein.

Zitat:

Zitat von Hansi
Warum funzt es mit dem Code nicht?

Weil Read(F1, x) äquivalent zu ReadLn(F1, x) ist - du liest so nur die erste Zeile ein. Wenn schon, dann alles einlesen:

Delphi-Quellcode:
procedure TForm1.Button4Click(Sender: TObject);
var
  sl: TStringList;
  fn: string;
begin
  fn := 'c:\temp\hansi.html';
  SaveHypertext(WebBrowser1, fn);
  sl := TStringList.Create;
  sl.LoadFromFile(fn);
  ShowMessage(sl.Text);
  sl.Free;
end;
Es gibt da noch ein paar Dinge zu beachten. Wenn du beliebige Seiten im Internet hernimmst, dann musst du das character encoding der Seite ermitteln und dann vor dem Wegschreiben in den Code übersetzen, der für das BLOB-Feld in deiner Datenbank definiert wurde.

Grüße vom marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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