![]() |
Datenbank: Firbird • Version: 1.5 • Zugriff über: BDE
TMemo Komponente, Zeilen in Firbird DB schreiben
Hallo zusammen,
ich habe folgendes Problem. Ich benutze die TMemo Komponente um ein Blob-Feld aus der Datenbank anzuzeigen. Das funktioniert auch. Wenn ich nun meinen Update-Befehl absätze bekomme ich einen Fehler. Conversion Error from String "Blob". Mein Update Befehl.
Delphi-Quellcode:
Weiss jemand wo der Fehler ist?
QuMem.Sql.Text := 'Update Tabelle1 set Mem = ("' + MeMemo.Lines.Text + '"); ';
Vielen Dank. Eppos |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zeig doch mal, wie Du das TMemo aus der Datenbank füllst.
Und gib und mehr Infos zur DB. |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Datenbank: Firbird
Version: 1.5 Verbindung: BDE Tabelle: Tabelle1 Feld: Mem (Blob Memo)
Delphi-Quellcode:
MeMemo.Lines.Text := QuMem.FieldByName( 'Mem' ).AsString;
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Hi Eppos,
Firebird interpretiert Angaben in doppelten Anführungsstrichen als Feld- bzw. Tabellen-Namen. Den Inhalt eines Strings mußt du in einfache Anführungsstrichen setzen. Um solche Probleme zu vermeiden, gilt auch für Datums- und Zeitangaben, sollte man immer mit Parametern arbeiten.
Delphi-Quellcode:
Durch die Verwendung von .AsString, .AsDateTime usw. bei der Parameterzuweisung hat man
QuMem.Sql.Text := 'Update Tabelle1 set Mem = :Mem';
QuMem.ParamByName('Mem').AsString := MeMemo.Lines.Text; auch keine Probleme mit den Parametertypen. alex |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Oder man verwendet QuotedStr:
Delphi-Quellcode:
Das QuotedStr setzt die Anführungszeichen " oder ' so wie sie benütigt werden.
QuMem.Sql.Text := 'Update Tabelle1 set Mem = ' + QuotedStr(MeMemo.Lines.Text);
Schöner ist allerdings die Variante mit den Parametern. |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Ich werde beide Varianten heute Abend mal ausprobieren.
Vielen Dank im Vorraus! Eppos |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Bei der ersten Möglichkeit kommt diese Fehlermeldung:
Allgemeiner SQL-Fehler feature is not supported BLOB and array dataq types are not supported for move operation Bei der zweiten Möglichkeit diese: Conversion Error from String. |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zeig mal den Code, damit wir sehen, was Du gemacht hast.
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Delphi-Quellcode:
// erste
QuData.Sql.Text := 'Update Data set Data = ' + QuotedStr(MeMem.Text); QuData.Execsql; QuData.Free; // zweite QuData.Sql.Text := 'Update Data set Data = :Data'; QuData.ParamByName('Data').AsString := MeData.Text; QuData.Execsql; QuData.Free; |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
Nebenbei erwähnt: Es ist eh keine gute Idee, in einer Datenbank BLOBs zu verwenden. Jedes DBMS bietet Text-Felder in variabler Grösse an. |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Das kann ja aber nicht die Lösung sein, andere Felder zu verwenden und die Datenbank umzuschreiben.
Firbird selber weisst aber auf solche Felder hin, für Memos sollte man den Typ Blob Typ 1 benutzen. Hat jemand noch Vorschläge |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
@RavenIV:
In Firebird sind Textfelder variabler Größe als Blob mit SubTyp 1 definiert. Es ist als absolut korrekt. alex |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
genau so sehe ich das auch.
Nein, paramby halt leider auch nicht geklappt. |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Die Variante mit .ParamByName('..').AsString funktioniert bei mir
ohne Probleme, allerdings verwende ich nicht die BDE sondern FibPlus. Zitat:
alex |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
Sie wird auch nicht mehr von neuen Delphi-Versionen unterstützt. Gott-sei-Dank. Die Datenstruktur war (hoofentlich) nur ein ungeschickt gewähltes Besipiel... |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
@alex
Ja die Tabelle heisst data und das Feld auch data Bei mir funktioniert es leider nicht @raven ich muss momentan noch die bde verwenden, da ich die software nicht umstellen darf. Ich programmiere auch noch mit D5 |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Versuchs mal mit
Delphi-Quellcode:
alex
TQuery.ParamByName('..').AsBlob := ....
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
ich habe die funktion asblob nicht?!
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Zitat:
Habe gerade nachgesehen. alex |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Habs gerade mit D3 ein ausprobiert, geht:
Delphi-Quellcode:
BEMERKUNGEN ist ein Blobfeld.
Query2.SQL.Text := 'update Person set BEMERKUNGEN = :BEMERKUNGEN where ID=:ID';
Query2.ParamByName('ID').AsInteger := Query1ID.AsInteger; Query2.ParamByName('BEMERKUNGEN').AsBlob := Memo1.Lines.Text; Query2.ExecSQL; alex |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Vielen Dank es hat funktioniert. Die Funktion AsBlob habe ich gefunden.
Vielen Dank an alle beteiligten die mich unterstützt haben... Gruß, Eppos |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
also es funktioniert noch nicht ganz.
Folgendes Problem habe ich noch. Wenn ich den Text speichere und es kommen mehrere leerzeichen nacheinandere vor, oder mal ein Tabulator dann bringt er diese Fehlermeldung: Allgemeiner SQL-Fehler Cannot transliterate character between character sets. Hat das was mit der größe des Feldew zu tun? |
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Nein, aber die Charset-Einstellungen des Feldes weicht von dem der Verbindung ab.
|
Re: TMemo Komponente, Zeilen in Firbird DB schreiben
Es war gar kein charset hinterlegt bei dem Feld "Data", habe nun win1252 verwendet
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:25 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 by Thomas Breitkreuz