AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Memo in MS SQL Speichern und Auslesen

Memo in MS SQL Speichern und Auslesen

Ein Thema von Andidreas · begonnen am 5. Sep 2013 · letzter Beitrag vom 5. Sep 2013
Antwort Antwort
Seite 1 von 2  1 2   
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 08:56
Datenbank: MS SQL Server • Version: 2008 • Zugriff über: UniDac
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:
  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;
Das Funktioniert soweit, bzw. in der MS SQL Tabelle ist die Memo eingabe:
Code:
Das
ist
ein
Test
wie folgt abgespeichert:
Code:
Das ist ein Test
Jetzt hab ich das Problem das ich über die UniDac Komponente den Text nicht auslesen kann:
Delphi-Quellcode:
  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);
Beim ShowMessage erhalte ich die Fehlermeldung:
Invalid class typecast

Was mach ich falsch, bzw. wie kann ich den Text so auslesen wie ich ihn gespeichert hab?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#2

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 09:08
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.).
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 09:13
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:
    MSSQL_Query1.SQL.Text := 'Select Message From "' + ModuleUniDBSchema + '.Table1" ';
    MSSQL_Query1.Open;
Bei Select musst du Open verwenden, da sonst die Abfrage zwar ausgeführt wird, aber das Ergebnis nicht gefetcht wird.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von user0815
user0815

Registriert seit: 5. Okt 2007
331 Beiträge
 
Delphi XE2 Professional
 
#4

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 09:20
Delphi-Quellcode:
  // speichern
  ParamByName('FELDNAME').AsWideString := trim(Memo.Lines.Text);

  // auslesen
  Memo.Lines.Append(FieldByName('FELDNAME').AsWideString);
müsste funktionieren.
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#5

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 09:54
Wie schon oft geschrieben:
1. .Clear und dann anschliessend .Add ist Quark! nimm besser .Text
OT: Warum ist das Quark?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 09:59
Weil es 1. unübersichtlich ist und 2. unnötigen Code produziert.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 10:44
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...
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.537 Beiträge
 
Delphi 11 Alexandria
 
#8

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 10:58
http://www.devart.com/unidac/docs/in...data_types.htm (ganz unten):
Zitat:
A BLOB values can be retrieved from the server in two ways. The first way is using a SELECT query from the table containing a BLOB field:

Delphi-Quellcode:
UniQuery.SQL.Text := 'SELECT TextField FROM UniDAC_Text WHERE ID = 1';

UniQuery.Open;

(UniQuery.FieldByName('TextField') as TBlobField).SaveToFile('A_file_name');

UniQuery.Close;
The second way is to use output parameters like in the following example. Note that the query may differ depending on your database server.

Delphi-Quellcode:
UniSQL.SQL.Text := 'SELECT :TEXTValue = TextField FROM UniDAC_Text WHERE ID = 1';

UniSQL.ParamByName('TEXTValue').ParamType := ptOutput;

UniSQL.Execute;

ShowMessage(UniSQL.ParamByName('TEXTValue').AsString);
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#9

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 11:57
@DeddyH
Many Thanks!
Es funktioniert =)

Edit: Hab das Parameter Beispiel verwendet!
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Benutzerbild von Andidreas
Andidreas

Registriert seit: 27. Okt 2005
1.110 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#10

AW: Memo in MS SQL Speichern und Auslesen

  Alt 5. Sep 2013, 12:35
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:
Try
Except
  On E:EUniError Do
  Begin
    ShowMessage(E.Message);
  End
End;
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?
Ein Programmierer Programmiert durchschnittlich 15 Code Zeilen pro Tag
Wir sind hier doch nicht bei SAP!!!

Aber wir habens bald
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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:00 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