Avatar billede kennethv Nybegynder
21. juli 2006 - 23:26 Der er 6 kommentarer og
1 løsning

RichEdit og DB.

Hvordan gemmer man indhold af RichEdit i en DB? Jeg ved hvordan man forbinder til DB med ADO. Men kender ikke syntax for gemme indhold. Når man gemmer, gemmer den automatisk fontstyle og andet, så som, tekst der er FED, kursiv og forskellig symboler?
Avatar billede kroning Nybegynder
22. juli 2006 - 11:25 #1
Jeg har rodet lidt med den men syntes ikke lige jeg kan finde et sted hvor man kan hive alle oplysninger ud samlet (men det findes sikkert). En lidt fusket løsning kunne være at kører via en fil, dvs. gemme i en temp fil og derefter læse denne fil ind i f.eks. en TStringList hvor du så kan finde alt teksten i StringList.Text;

Men det skulle da være mærkelig hvis der ikke findes en bedre måde, en eller anden må da vide det.
Avatar billede hrc Mester
22. juli 2006 - 23:10 #2
Lines.SaveToFile og Lines.LoadFromFile gemmer data i RTF-format - så det er ligeud af landevejen for det samme gør SaveToStream og LoadFromStream. Det er bare et spørgsmål om at lave en TBlobStream til feltet i tabellen i databasen og så streame indholdet af TRichEdit'en frem og tilbage.

I øvrigt: Når jeg tænker på at læse og skrive til tabeller så tænker jeg altid SQL-vegne og data via en TAdoQuery.ParamByName (property hedder vist noget andet i ADO).

Hvis du skal have hjælp til det kan jeg godt arbejde lidt på et eksempel - men giv mig tid. Jeg har ferie fra arbejdet, men ikke fra familien...
Avatar billede hrc Mester
23. juli 2006 - 01:45 #3
Nå, der var kun Colombo i fjernsynet...

Jeg oprettede en access-database med en tabel indeholdende et autoinc. ID som også er primærnøglen (ikke at det er vigtigt, men det er bare for god ordens skyld). Dernæst et felt jeg kaldre reData af typen Memo (max grænse 64kb) som er det nærmeste Access kommer et blob-felt (medmindre ole-typen kan bruges). Den forbinder jeg til i mit testprogram og det lykkes mig at gemme og hente data fra tabellen.

Det der tog et stykke tid var, at jeg gemte som streng, men hentede igen som widestring (dvs. hhv. 8 og 16bit pr. tegn). Det kunne TRichEdits LoadFromStream ikke li'. Løsningen var at vælge ftFmtMemo. Så faldt det hele på plads.

procedure TfrmMain.btnLoadClick(Sender: TObject);
var
  MemoryStream : TMemoryStream;
begin
  ADOConnection.Open;
  try
    ADOQuery.SQL.Text := 'select reData from data where id=(select max(id) from data)';
    ADOQuery.Open;
    try
      if not ADOQuery.Eof then
      begin
        MemoryStream := (ADOQuery.CreateBlobStream(ADOQuery.FieldByName('reData'),bmRead) as TMemoryStream);
        try
          reData.Lines.LoadFromStream(MemoryStream);
        finally
          MemoryStream.Free;
        end;
      end;
    finally
      ADOQuery.Close;
    end;
  finally
    ADOConnection.Close;
  end;
  // reData.Lines.LoadFromFile('c:\test.rtf');
end;

procedure TfrmMain.btnSaveClick(Sender: TObject);
var
  MemoryStream : TMemoryStream;
begin
  ADOConnection.Open;
  MemoryStream := TMemoryStream.Create;
  try
    ADOQuery.SQL.Text := 'insert into data (reData) values(:reData)';
    reData.Lines.SaveToStream(MemoryStream);
    MemoryStream.Seek(0,soFromBeginning);
    ADOQuery.Parameters.ParamByName('reData').LoadFromStream(MemoryStream,ftFmtMemo);
    ADOQuery.ExecSQL;
  finally
    MemoryStream.Free;
    ADOConnection.Close;
  end;
  // reData.Lines.SaveToFile('c:\test.rtf');
end;
Avatar billede kennethv Nybegynder
24. juli 2006 - 13:03 #4
Jeg har ikke været helt vågen, da jeg oprettede dette spørgsmål. Der er en DBRichEdit med D2005, som jeg kunne forstille mig at den kunne bruges.

Men helt klart du får points for dit stykke arbejde, HRC.
Avatar billede kennethv Nybegynder
24. juli 2006 - 13:04 #5
Men det rejser et nyt spørgsmål.
Avatar billede hrc Mester
24. juli 2006 - 15:19 #6
Et spørgsmål er om man skal bruge de DBxxx komponenter eller om man skal holde det separeret - sådan som det skitseres her. Jeg vil altid - belært af erfaringen - bruge denne løsning. Det andet er som at tisse i bukserne for at holde varmen. Senere bliver det lappeløsninger på lappeløsninger.
Avatar billede kennethv Nybegynder
21. august 2006 - 21:44 #7
HRC: Hvis nu man kun har en RichEdit som ikke er en DB komponent og vil bruge den løsning du har lavet her. Hvordan får man indhold af en DBEdit in i samme record?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester