Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL- Abfrage (https://www.delphipraxis.net/102097-sql-abfrage.html)

pronny31 23. Okt 2007 13:23

Datenbank: Firebird • Version: 2.0 • Zugriff über: Interbase

SQL- Abfrage
 
Also ich habe mal wieder ein kleines Problem .
Ich möchte einen String der ziemlich lange also um die 600 Zeilen ist in ein Textfeld(Memo) einer Datenbank mittels des Befehls 'Update Tabellenname set Memo1 = '+string+'where zaehler = 32 ' ändern..
Beim ausführen diese Befhels kommt es zu folgender Fehlermeldung :

Unerwartetes Ende des Statements.......
Klingts so als ob man im Update - Statement einen so langen String einfügen kann oder ?

Nuclear-Ping 23. Okt 2007 13:33

Re: SQL- Abfrage
 
Versuch mal 'ne parametrisierte Abfrage.
Code:
  Qry := 'UPDATE ... SET Spalte=:Spalte';
  Query.Add(Qry);
  Query.Prepare;
  Query.ParamByName('Spalte').AsString := DeinString;
  Query.Open;

mkinzler 23. Okt 2007 13:56

Re: SQL- Abfrage
 
Parameter sind immer eine gute Alternative.
Dein Problem lag aber an den fehlenden Quotes um den einzufügenden Text.

pronny31 23. Okt 2007 14:36

Re: SQL- Abfrage
 
Jetzt kommt die Meldung das das Feld bei Mir Memo1 nicht gefunden wurde !!!
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  Db, IBDatabase, StdCtrls, DBCtrls, IBCustomDataSet, IBQuery;

type
  TForm1 = class(TForm)
    DataSource1: TDataSource;
    IBDatabase1: TIBDatabase;
    IBTransaction1: TIBTransaction;
    IBQuery1: TIBQuery;
    DBMemo1: TDBMemo;
    procedure FormCreate(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

procedure TForm1.FormCreate(Sender: TObject);
var test : string;
    qry : string;
begin

  IBQuery1.Open;
  DBMemo1.SelectAll;
  test :=DBMemo1.SelText;
  StringReplace(test,'FormStammArtikel','FormArtiekl_Stamm,,',[rfReplaceAll]);
  IBQuery1.SQL.Clear;


  Qry := 'UPDATE Tabelle SET MEMO1 =:Spalte where zaehler = 32';
  IBQuery1.sql.Add(Qry);
  IBQuery1.Prepare;
  IBQuery1.ParamByName('Spalte').AsString := test;
  IBQuery1.Open;
end;

end.

mkinzler 23. Okt 2007 14:54

Re: SQL- Abfrage
 
I vermute mal, weil du die selbe Query-Kompo verwendet hast, für welche du eine persistentes Zugriffsfeld erzeugt hast.
Ich würde mal über ein Updateobjekt nachdenken.

Nuclear-Ping 23. Okt 2007 15:13

Re: SQL- Abfrage
 
Wie sieht denn deine Datenbank aus? Gibts da überhaupt eine Spalte die "MEMO1" heisst?

pronny31 23. Okt 2007 15:15

Re: SQL- Abfrage
 
Ja die gibt es !

Nuclear-Ping 23. Okt 2007 15:35

Re: SQL- Abfrage
 
Hm, dann sollte es auch keine Probleme geben, wenn die Spalte "Memo1" in "Tabelle" ist ... :gruebel: ... Sicher? ;)

Bau FormCreate mal so um:
Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
var test : string;
    qry : string;
begin

  IBQuery1.Open;
  DBMemo1.SelectAll;
  test :=DBMemo1.SelText;
  StringReplace(test,'FormStammArtikel','FormArtiekl_Stamm,,',[rfReplaceAll]);
  IBQuery1.Close;

  Qry := 'UPDATE Tabelle SET "Memo1"=:Spalte WHERE "zaehler"=32';
  IBQuery1.SQL.Clear;
  IBQuery1.SQL.Add(Qry);
  IBQuery1.Prepare;
  IBQuery1.ParamByName('Spalte').AsString := test;
  IBQuery1.Open;
  // ...
  IBQuery1.Close;
end;

mkinzler 23. Okt 2007 15:43

Re: SQL- Abfrage
 
Das Problem ist wie oben schon erwähnt, das in der ursprünglichen Abfrage das Feld Memo abgefragt wurde und von DBMemo1 referenziert wird! Nimm ne weitere Query-Kompo, ein IBDataSet oder ein Updateobjekt!


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