Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Finde Fehler in SQL-Statement nicht. (https://www.delphipraxis.net/137928-finde-fehler-sql-statement-nicht.html)

Mithrandir 31. Jul 2009 10:50

Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos

Finde Fehler in SQL-Statement nicht.
 
Hi ihr,

Irgendwie bin ich heute blind. Ich suche seit einer geschlagenen Stunde den Fehler in meinem Statement und finde ihn nicht. Hier erstmal die Abfrage:

SQL-Code:
INSERT INTO EXPENSES (ID INTEGER, EXP_TYPE INTEGER, EXP_VALUE FLOAT, EXP_CATEGORY INTEGER, EXP_COMMENT CHAR(255) CHARACTER SET NONE, EXP_USER INTEGER, EXP_DAY INTEGER, EXP_MONTH INTEGER, EXP_YEAR INTEGER) VALUES (:id, :exp_type, :exp_value, :exp_category, :exp_comment, :exp_user, :exp_day, :exp_month, :exp_year);
Im Quelltext sieht es dann so aus:

Delphi-Quellcode:
  TDGHBEntry = packed record
    EntryType: TEntryType;
    Value: Double;
    Categorie: String;
    Comment: String;
    User: String;
    ID: String;
    Date: TDateTime;
  end;
 
//[...]

 procedure TDGHBDatabase.AddEntry(Entry: TDGHBEntry);
  var
    InsertCategoryQuery : TZQuery;
    GetUserIDQuery: TZQuery;
    GetCategoryIDQuery: TZQuery;

    UserID: Integer;
    CategoryID: Integer;

    CurrDay,
    CurrMonth,
    CurrYear: Word;
  begin

    InsertCategoryQuery := TZQuery.Create(nil);
    GetUserIDQuery := TZQuery.Create(nil);
    GetCategoryIDQuery := TZQuery.Create(nil);

    with GetUserIDQuery do
    begin
      Connection := fConnection;
      ParamCheck := true;
      SQL.Text := 'SELECT ID FROM USERS WHERE USER_NAME = :user';
      ParamByName('user').AsString := Entry.User;
      Open;
      UserID := FieldByName('ID').AsInteger;
    end;

    with GetCategoryIDQuery do
    begin
      Connection := fConnection;
      ParamCheck := true;
      SQL.Text := 'SELECT ID FROM CATEGORIES WHERE CATEGORIE_NAME = :cat';
      ParamByName('cat').AsString := Entry.Categorie;
      Open;
      CategoryID := FieldByName('ID').AsInteger;
    end;

    with InsertCategoryQuery do
      begin
        Connection := fConnection;
        ParamCheck := true;
{CREATE TABLE EXPENSES (ID INTEGER, EXP_TYPE INTEGER, EXP_VALUE FLOAT, EXP_CATEGORY INTEGER, EXP_COMMENT CHAR(255) CHARACTER SET NONE, EXP_USER INTEGER, EXP_DAY INTEGER, EXP_MONTH INTEGER, EXP_YEAR INTEGER);}
        SQL.Text := 'INSERT INTO EXPENSES (ID INTEGER, EXP_TYPE INTEGER, EXP_VALUE FLOAT, EXP_CATEGORY INTEGER, EXP_COMMENT CHAR(255) CHARACTER SET NONE, EXP_USER INTEGER, EXP_DAY INTEGER, EXP_MONTH INTEGER, EXP_YEAR INTEGER)' +
                    ' VALUES (:id, :exp_type, :exp_value, :exp_category, :exp_comment, :exp_user, :exp_day, :exp_month, :exp_year);';

        ParamByName('exp_type').AsInteger := Integer(Entry.EntryType);
        ParamByName('exp_value').AsFloat := Entry.Value;
        ParamByName('exp_category').AsInteger := UserID;
        ParamByName('exp_comment').AsString := '';
        ParamByName('exp_user').AsInteger := CategoryID;
        DecodeDate(Entry.Date, CurrYear, CurrMonth, CurrDay);
        ParamByName('exp_day').AsInteger := CurrDay;
        ParamByName('exp_month').AsInteger := CurrMonth;
        ParamByName('exp_year').AsInteger := CurrYear;
        ExecSQL;
      end;

    InsertCategoryQuery.Free;
    GetUserIDQuery.Free;
    GetCategoryIDQuery.Free;
  end;
Und das sagt mein Programm zu dem Statement:

Code:
---------------------------
dghb
---------------------------
SQL Error: Dynamic SQL Error SQL error code = -104 Token unknown - line 1, column 26 INTEGER. Error Code: -104. Invalid token The SQL: INSERT INTO EXPENSES (ID INTEGER, EXP_TYPE INTEGER, EXP_VALUE FLOAT, EXP_CATEGORY INTEGER, EXP_COMMENT CHAR(255) CHARACTER SET NONE, EXP_USER INTEGER, EXP_DAY INTEGER, EXP_MONTH INTEGER, EXP_YEAR INTEGER) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?);;
---------------------------
OK  
---------------------------
Ich seh einfach den Wald vor lauter Bäumen nicht mehr... :wall: Aus der Fehlermeldung lese ich, dass er mit dem Wort "INTEGER" nix mehr anfangen kann. Kann doch nicht sein, oder?

DeddyH 31. Jul 2009 10:52

Re: Finde Fehler in SQL-Statement nicht.
 
Seit wann gibt man bei Insert den Datentyp an?
SQL-Code:
INSERT INTO EXPENSES (ID, EXP_TYPE, ...)

fkerber 31. Jul 2009 10:54

Re: Finde Fehler in SQL-Statement nicht.
 
Hi!

Doch ich denke, das kann sein ;)

Also ich kenne das nicht, dass man beim Insert den Typ mit angibt?
Vllt. ist das bei FB anders - dann will ich nichts gesagt haben ;)


Grüße, Frederic

Mithrandir 31. Jul 2009 10:55

Re: Finde Fehler in SQL-Statement nicht.
 
Argh, ich wusste es. Irgendwas offensichtliches... :wall: :wall:

Besten Dank. ;) :oops:

DeddyH 31. Jul 2009 10:56

Re: Finde Fehler in SQL-Statement nicht.
 
Zitat:

Zitat von fkerber
Hi!

Doch ich denke, das kann sein ;)

Also ich kenne das nicht, dass man beim Insert den Typ mit angibt?
Vllt. ist das bei FB anders - dann will ich nichts gesagt haben ;)


Grüße, Frederic

Hab ich noch nie gesehen. Abgesehen davon macht das ja auch keinen Sinn, da der Datentyp ja ohnehin beim Anlegen der Tabelle festgelegt wurde, da geht ja auch nichts anderes rein.

fkerber 31. Jul 2009 10:58

Re: Finde Fehler in SQL-Statement nicht.
 
Hi!

Ich auch nicht - aber die letzte Wochen haben mich sensibilisiert, dass es doch größere Unterschiede zwischen manchen DBMS gibt - deswegen habe ich lieber mal ne Einschränkung dazu geschrieben :D


Grüße, Frederic


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