![]() |
HowTo: Datenfelder (MEMO) zu anderem Datentyp (RT) migrieren
Hi,
ich habe in meiner Datenbankanwendung zwei Beschreibungsfelder
Code:
Nun möchte ich ein weiteres Datenfeld anhängen, diesmal aber RichText-Format und den Inhalt der ersten beiden in dieses Feld kopieren.
Beschreibung1 BLOB(240,1) //Memofeld
Beschreibung2 BLOB(240,1) //Memofeld
Code:
Wie kann ich dies per SQL-Anweisung über alle Datensätze machen ? Oder geht es nicht mit SQL-Mitteln :( Wie aber dann ?
BeschreibungNeu BLOB(240,3) // formartiertes Memo, RichText
schon mal Danke Jungs Hacki |
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:
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.
SELECT CONVERT(VARCHAR(1000), ISNULL(feld1, '')) + CONVERT(VARCHAR(1000), ISNULL(feld2, '') AS TotalMemo
FROM ...... Gruss Xaver :freak: |
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 |
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 |
Danke Xaver,
ich habe Delphi und die BDE bemüht und das erfolgreich:
Code:
das funzt nun....
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; danke nochmal gruß Hacki |
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