Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Text aus Memo in Datenbankfeld eintragen (https://www.delphipraxis.net/151715-text-aus-memo-datenbankfeld-eintragen.html)

DelphiManiac 28. Mai 2010 22:53

Datenbank: SQL Server • Version: 2008 • Zugriff über: ADO

Text aus Memo in Datenbankfeld eintragen
 
Hallo,

ich habe folgendes Problem,
ich nutze einen SQL Server 2008 und will in einer Tabelle den Body einer zuverschikenden Email speichern,
und habe hierzu eine Tabelle angelegt

tblEmail

SQL-Code:
CREATE TABLE [dbo].[tblEmail](
   [EmailID] [bigint] NULL,
   [EmailHost] [nvarchar](50) NULL,
   [EmailUserName] [nvarchar](50) NULL,
   [EmailPort] [bigint] NULL,
   [Sender] [nvarchar](50) NULL,
   [Headline] [nvarchar](50) NULL,
   [Body] [text] NULL,
   [EmailPasswort] [nvarchar](50) NULL
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
Das Feld Body habe ich als text angelegt.

Nun will ich einen Mehrzeiligen Text aus einem Memo Feld in meiner Datenbank speichern,
dazu muss ich den Wert auslesen in ein Memo laden ändern und zurückschreiben können.


Delphi-Quellcode:
with TADOQuery.Create(Self) do
  begin
    Connection := ADOConnection1;
    SQL.Clear;
    Active := False;
    SQL.Text := 'SELECT * FROM tblEmail';
    Active := True;
    First;
    Edit;
    //Test
    ShowMessage(emaildat.body.Text);
    FieldByName('Body').AsWideString:=emaildat.body.Text; // Hier wird immer nur die 1. Zeile in der DB gespeichert...

    Update;
  end; // of with TADOQuery.Create(Self) do
end; // of function TFrmMainGUI.GetEmailData(var emaildat: REmailInfos): Boolean;
Leider wird bei der Methode die ich anwende immer nur der 1. String gespeichert des Memos. Ich weiß nicht wo das Problem ist.
Vielleicht könnt ihr mir ja helfen

Danke
Gruß
DM

mkinzler 28. Mai 2010 23:06

Re: Text aus Memo in Datenbankfeld eintragen
 
Es scheint ich an den Zeilenumbrüchen zu stören. Ich würde es mal mit Hilfe eines Blobparameters versuchen

Sir Rufo 28. Mai 2010 23:10

Re: Text aus Memo in Datenbankfeld eintragen
 
Versuch es doch mal so, das ist nicht nur sicherer (SQL-Injection) sondern auch schneller.
Delphi-Quellcode:
with TADOQuery.Create( Self ) do
  try
    Connection := ADOConnection1;
    // SQL.Clear;
    // Active := False;
    SQL.Text := 'UPDATE tblEmail SET Body = :Body WHERE EmailID = :EmailID';
    Prepare; // Vorbereiten, dann ist die Verarbeitung u.U. schneller

    // Werte an die Parameter übergeben
    ParamByName( 'EmailID' ).Value := 1; // Hier natürlich die entsprechende ID benutzen
    ParamByName( 'Body' ).Value := emaildat.body.Text;

    // Ausführen
    ExecSQL;

  finally
    Free; // wir sind ordentlich und räumen auf
  end; // of with TADOQuery.Create(Self) do

end; // of function TFrmMainGUI.GetEmailData(var emaildat: REmailInfos): Boolean;

DelphiManiac 28. Mai 2010 23:38

Re: Text aus Memo in Datenbankfeld eintragen
 
Hallo,

EDIT:Problem gelöst

@Sir Rufo,@Mkinzler

danke für deinen Vorschlag, ich werde jetzt ein Update des Feldes machen, so wie du es vorgeschlagen hast.

Hat im ersten Ansatz nicht funktioniert, da ich auf den falschen Index zugegriffen habe, mein Fehler,
aber jetzt mit Deklaration des Feldes als VARCHAR(MAX) und der Update Syntax klappts

Danke an Alle!


Alle Zeitangaben in WEZ +1. Es ist jetzt 09: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