![]() |
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: UniDac
Memo in MS SQL Speichern und Auslesen
Hallo,
ich habe in meiner MS SQL Tabelle eine Spalte vom Typ "Text"... In dieser Spalte möchte ich den Inhalt eines Memos abspeicher:
Delphi-Quellcode:
Das Funktioniert soweit, bzw. in der MS SQL Tabelle ist die Memo eingabe:
Try
With (MSSQL_Query1) Do Begin Active := False; SQL.Clear; SQL.Add(' Insert Into "' + ModuleUniDBSchema + '.Table1" '); SQL.Add(' (Message) '); SQL.Add(' Values( '); SQL.Add(' '''+ mem_mailtext.Lines.Text +''' '); SQL.Add(' )' ); ExecSQL; End; Except On E:EUniError Do Begin fnDisplayMyActionBox('ERR', 'MS SQL Error', 'Could not insert Record into Table1!', E.Message, EmptyStr, EmptyStr, True); Exit; End; End;
Code:
wie folgt abgespeichert:
Das
ist ein Test
Code:
Jetzt hab ich das Problem das ich über die UniDac Komponente den Text nicht auslesen kann:
Das ist ein Test
Delphi-Quellcode:
Beim ShowMessage erhalte ich die Fehlermeldung:
With (MSSQL_Query1) Do
Begin Active := False; SQL.Clear; SQL.Add(' Select Message From "' + ModuleUniDBSchema + '.Table1" '); Active := True; End; ShowMessage(MSSQL_Query1.FieldByName('Message').AsAnsiString); Invalid class typecast Was mach ich falsch, bzw. wie kann ich den Text so auslesen wie ich ihn gespeichert hab? |
AW: Memo in MS SQL Speichern und Auslesen
Ich kenne UniDAC nicht, aber üblicherweise liest man BLOB-Felder mittels BlobStream aus und kopiert dessen Inhalt dann ggf. in einen anderen Stream (TStringStream z.B.).
|
AW: Memo in MS SQL Speichern und Auslesen
Wie schon oft geschrieben:
1. .Clear und dann anschliessend .Add ist Quark! nimm besser .Text 2. Verwende (SQL-)Parameter. Insert:
Delphi-Quellcode:
MSSQL_Query1.SQL.Text := 'Insert Into "' + ModuleUniDBSchema + '.Table1" ';
MSSQL_Query1.SQL.Add(' (Message) '); MSSQL_Query1.SQL.Add(' Values( :text )'); MSSQL_Query1.ParamByName( 'text').Value := mem_mailtext.Lines.Text; MSSQL_Query1.ExecSQL; Select:
Delphi-Quellcode:
Bei Select musst du Open verwenden, da sonst die Abfrage zwar ausgeführt wird, aber das Ergebnis nicht gefetcht wird.
MSSQL_Query1.SQL.Text := 'Select Message From "' + ModuleUniDBSchema + '.Table1" ';
MSSQL_Query1.Open; |
AW: Memo in MS SQL Speichern und Auslesen
Delphi-Quellcode:
müsste funktionieren.
// speichern
ParamByName('FELDNAME').AsWideString := trim(Memo.Lines.Text); // auslesen Memo.Lines.Append(FieldByName('FELDNAME').AsWideString); |
AW: Memo in MS SQL Speichern und Auslesen
Zitat:
|
AW: Memo in MS SQL Speichern und Auslesen
Weil es 1. unübersichtlich ist und 2. unnötigen Code produziert.
|
AW: Memo in MS SQL Speichern und Auslesen
Ich hab Eure Lösungsansätze allesamt ausprobiert...
Ich bekomme überall den Fehler mit dem "Invalid class typecast"
Delphi-Quellcode:
mem_message.Text := MSSQL_Query1.FieldByName('Message').Text; So erhalte ich keinen Fehler, aber in meinem Memo steht dann nur (MEMO) aber nicht der Inhalt aus dem MS SQL Tabellen Feld... |
AW: Memo in MS SQL Speichern und Auslesen
![]() Zitat:
|
AW: Memo in MS SQL Speichern und Auslesen
@DeddyH
Many Thanks! Es funktioniert =) :thumb: Edit: Hab das Parameter Beispiel verwendet! |
AW: Memo in MS SQL Speichern und Auslesen
Noch ein OT Frage...
Das Programm in dem ich das Text Feld in der MS SQL DB benötige wird als DLL erstellt und in den Projekt opitonen ist der hacken bei "Laufzeit-Packages" gesetzt, da die DLL in eine andere Form geladen wird... Allerdings Funktionieren hier meine Try Except Blöcke nicht ganz:
Delphi-Quellcode:
Will heißen er gibt mir die Fehlermeldung nicht mehr aus... Liegt das an den Laufzeit-Packages? Muss ich die von der Datenbank Komponente mit angeben?
Try
Except On E:EUniError Do Begin ShowMessage(E.Message); End End; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:32 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