AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi HowTo: Datenfelder (MEMO) zu anderem Datentyp (RT) migrieren
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von hacki · begonnen am 10. Dez 2002 · letzter Beitrag vom 12. Dez 2002
Antwort Antwort
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#1

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

  Alt 10. Dez 2002, 21:18
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
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#2
  Alt 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
  Mit Zitat antworten Zitat
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#3
  Alt 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
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#4

Memo

  Alt 11. Dez 2002, 12:39
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
  Mit Zitat antworten Zitat
hacki

Registriert seit: 15. Nov 2002
96 Beiträge
 
Delphi XE5 Professional
 
#5
  Alt 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
Es ist nicht gesagt, daß es besser wird, wenn es anders wird! Wenn es aber besser werden soll, muß es anders werden! ** There are 10 different types of people in this world; those who understand binary numbers and those who don’t !
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#6
  Alt 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
  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 00:26 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