AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Finde Fehler in SQL-Statement nicht.
Thema durchsuchen
Ansicht
Themen-Optionen

Finde Fehler in SQL-Statement nicht.

Ein Thema von Mithrandir · begonnen am 31. Jul 2009 · letzter Beitrag vom 31. Jul 2009
Antwort Antwort
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#1

Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:50
Datenbank: Firebird • Version: 2.1 • Zugriff über: Zeos
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:

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... Aus der Fehlermeldung lese ich, dass er mit dem Wort "INTEGER" nix mehr anfangen kann. Kann doch nicht sein, oder?
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:52
Seit wann gibt man bei Insert den Datentyp an?INSERT INTO EXPENSES (ID, EXP_TYPE, ...)
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 fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#3

Re: Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:54
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
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Mithrandir
Mithrandir
(CodeLib-Manager)

Registriert seit: 27. Nov 2008
Ort: Delmenhorst
2.379 Beiträge
 
#4

Re: Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:55
Argh, ich wusste es. Irgendwas offensichtliches...

Besten Dank.
米斯蘭迪爾
"In einer Zeit universellen Betruges wird das Aussprechen der Wahrheit zu einem revolutionären Akt." -- 1984, George Orwell
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:56
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.
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 fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#6

Re: Finde Fehler in SQL-Statement nicht.

  Alt 31. Jul 2009, 09:58
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


Grüße, Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Antwort Antwort


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 09:11 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