Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi HowTo: Datenfelder (MEMO) zu anderem Datentyp (RT) migrieren (https://www.delphipraxis.net/1586-howto-datenfelder-memo-zu-anderem-datentyp-rt-migrieren.html)

hacki 10. Dez 2002 21:18


HowTo: Datenfelder (MEMO) zu anderem Datentyp (RT) migrieren
 
Hi,

ich habe in meiner Datenbankanwendung zwei Beschreibungsfelder


Code:
Beschreibung1  BLOB(240,1) //Memofeld

Beschreibung2  BLOB(240,1) //Memofeld
Nun möchte ich ein weiteres Datenfeld anhängen, diesmal aber RichText-Format und den Inhalt der ersten beiden in dieses Feld kopieren.

Code:
BeschreibungNeu BLOB(240,3) // formartiertes Memo, RichText
Wie kann ich dies per SQL-Anweisung über alle Datensätze machen ? Oder geht es nicht mit SQL-Mitteln :( Wie aber dann ?

schon mal Danke Jungs
Hacki

xbu58 11. Dez 2002 06:07

Hallo Hacki

Es kommt etwas auf den DB-Server an, was Du machen kannst. Wenn Du z.B. den MS-SQL-Server einsetzt, sollte folgender Aufruf funktionieren:

Code:
SELECT CONVERT(VARCHAR(1000), ISNULL(feld1, '')) + CONVERT(VARCHAR(1000), ISNULL(feld2, '') AS TotalMemo
FROM ......
Dieser Aufruf geht auch auf SQL-Anywhere. Es ist jedoch zu beachten, dass VARCHAR eine max. Länge hat, die auf der Server-Konfiguration eingestellt ist.

Gruss
Xaver :freak:

hacki 11. Dez 2002 08:33

Hallo Xaver,

es handelt sich hier um eine Paradox Datenbank. Die genannten Felder befinden sich innerhalb einer Tabelle. Hast Du da einen Tip für mich, wie ich den Inhalt der beiden Felder (unformatierte Memofelder) in das neue Feld (formartiertes Memofeld) kopieren kann ?

thxs und gruß
hacki

xbu58 11. Dez 2002 12:39

Memo
 
Hallo Hacki

Ich habe mit Paradox nicht viel gemacht, bin aber recht schnell an die Grenzen gestossen. Soviel ich mich erinnere, sind die meisten Formatierungs-Befehle, die von Standard-SQL unterstützt sind, in Paradox nicht implementiert. Es bleibt Dir warscheinlich keine andere Wahl, als das Problem in Delphi zu lösen.

Paradox wird leider über die BDE betrieben, wodurch ein weiters Problem im zusammenhang mit langen Texten entsteht. Du kannst die Daten nicht mit ...AsString aus bzw. ins Feld schreiben. Du must dafür die LoadFromStream und SaveToStream vom TMemoField verwenden. Damit ist es möglich, beinahe beliebig grosse Texte in ein Memo zuschreiben.

Gruss
Xaver

hacki 11. Dez 2002 21:27

Danke Xaver,

ich habe Delphi und die BDE bemüht und das erfolgreich:

Code:
 Var Memodata : TStringList;

 Memodata := TStringList.Create;


 try
  MainForm.DB_UpgradeTable.FindFirst;

  While not DB_UpgradeTable.Eof do
  begin
    MainForm.DB_UpgradeTable.Edit;
    Memodata.Clear;

    Memodata.Text := MainForm.DB_UpgradeTable.FieldByName
                                         ('UebBeschreibung').AsVariant;
    Memodata.Add(' ');
    Memodata.Add('nun kommt Feld2');

    Memodata.Append( MainForm.DB_UpgradeTable.FieldByName
                                         ('UebVariation').AsVariant );

    MainForm.DB_UpgradeTable.FieldByName
                      ('UebBeschreibungREd').AsVariant := Memodata.Text;
   
    MainForm.DB_UpgradeTable.Post;
    MainForm.DB_UpgradeTable.Next;
  end;
 finally
 end;


 Memodata.Free;
das funzt nun....

danke nochmal

gruß
Hacki

xbu58 12. Dez 2002 06:08

Hallo Hacki

Bitte, ist gern geschehen. Ich habe aber noch eine Anmerkung:

Versuch mal einen sehr grossen Text z.B. 100 KB in diese Memo zu schreiben (das kannst Du machen, indem Du mit Memodata.LoadFromFile('<Text.txt>'); aufrufst, bevor die Daten an DB_UpgradeTable übergibst). Ich bin mir nicht sicher ob das mit AsVariant geht. Wenn nicht, kannst Du die String-Liste in einen MemoryStream übergeben, und diese dann Anstelle von AsVariant mit LoadFromStream ausführen.

Gruss
Xaver :coder:


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz