AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Fehler im SQL-Statement...aber wo?
Thema durchsuchen
Ansicht
Themen-Optionen

Fehler im SQL-Statement...aber wo?

Ein Thema von Silbar · begonnen am 25. Jul 2005 · letzter Beitrag vom 25. Jul 2005
Antwort Antwort
Silbar

Registriert seit: 23. Jun 2005
42 Beiträge
 
Delphi 6 Professional
 
#1

Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 11:15
Datenbank: Oracle • Version: 8 • Zugriff über: BDE
Hallo Leute,
ich habe hier ein SQL-Statement bei dem mir Delphi sagt das es nicht richtig beendet ist.

Delphi-Quellcode:
SELECT Q.*, K.NAME
FROM QUICKCLC Q
     LEFT OUTER JOIN KUNDEN K ON(Q.KDNR = K.KDNR)
WHERE Q.DATUM >= :VOM AND
      Q.DATUM <= :BIS
ich weiss aber nicht wo der Fehler ist.

PS.: Das Statement steht so in der SQL-Property eines Query-Objekts drin.
Zukunft: etwas, das die meisten Menschen erst lieben, wenn es Vergangenheit geworden ist.

- William Somerset Maugham (engl. Schriftsteller)
  Mit Zitat antworten Zitat
Benutzerbild von Jelly
Jelly

Registriert seit: 11. Apr 2003
Ort: Moestroff (Luxemburg)
3.741 Beiträge
 
Delphi 2007 Professional
 
#2

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 11:17
:VOM und :BIS sind Parameter, die du noch mit Werten füllen musst, bevor du die Query ausführen kannst. Kuck dir dazu mal die Eigenschaft Params deiner Query an.
  Mit Zitat antworten Zitat
Silbar

Registriert seit: 23. Jun 2005
42 Beiträge
 
Delphi 6 Professional
 
#3

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 11:27
Das sind Parameter vom DataType = ftDateTime. Standartmässig haben die kein Value werden aber definitiv 'gefüllt' bevor die Query aktivert wird. Das Problem ist wie gesagt das ich die Meldung bekomme:
Zitat:
General SQL error
ORA-00933: SQL-Befehl wurde nicht korrekt beendet
PS.:Auch wenn ich die Parameter von vornherein fülle kommt der Fehler
Zukunft: etwas, das die meisten Menschen erst lieben, wenn es Vergangenheit geworden ist.

- William Somerset Maugham (engl. Schriftsteller)
  Mit Zitat antworten Zitat
cell

Registriert seit: 5. Jul 2005
Ort: Ebensee
171 Beiträge
 
Delphi 4 Standard
 
#4

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 12:26
Zitat:
SELECT Q.*, K.NAME
FROM QUICKCLC Q
LEFT OUTER JOIN KUNDEN K ON(Q.KDNR = K.KDNR)
WHERE Q.DATUM >= :VOM AND
Q.DATUM <= :BIS
normalerweise heißt es doch SELECT * FROM ....
ohne '.' vlt is es das
vlt verträgt er den punkt nicht ????
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#5

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 12:34
Zitat von Silbar:
ich habe hier ein SQL-Statement bei dem mir Delphi sagt das es nicht richtig beendet ist.
PS.: Das Statement steht so in der SQL-Property eines Query-Objekts drin.
Dein SQL-Statement ist syntaktisch korrekt, aber vielleicht hast du den "menschlichen Faktor" übersehen.
Du denkst zwar, es stünde dein SQL-Statement drin, in Wirklichkeit steht das aber etwas andereres.
(Häufiger Fehler: es wird immer nur mit SQL.Add() gearbeitet ohne jemals SQL.Clear aufgerufen zu haben)
Du musst dir selbst beweisen, dass das Richtige drinsteht.
Delphi-Quellcode:
Query1.SQL.SaveToFile('C:\SQL.txt'); // in Datei speichern
Query1.Open;
Das Feld K.NAME könnte ein reserviertes Wort sein.
Deshalb würde ich probeweise statt K.NAME z.B. K.ORT hinschreiben.
Andreas
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#6

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 12:56
Zitat von Silbar:
ich habe hier ein SQL-Statement bei dem mir Delphi sagt das es nicht richtig beendet ist.
Delphi kann zu einem SQL-Statement eigentlich überhaupt nichts sagen. Diese Fehlermeldungen kommen vom DB-Server und werden durch Dein Programm nur angezeigt. Teile doch mal den kompletten Fehlertext mit.
  Mit Zitat antworten Zitat
Silbar

Registriert seit: 23. Jun 2005
42 Beiträge
 
Delphi 6 Professional
 
#7

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 13:28
Also zunächst wird Folgende Prozedure aufgerufen:
Delphi-Quellcode:
procedure TQrySchnellkalkulationen.AktualisierenExecute(Sender: TObject);
var
   vom, bis: TDateTime;
begin
   try
      vom := StrToDate( Edit_Vom.Text );
   except
      On E: Exception do begin
         TryErrorBox(E.Message,'Ungültiges Startdatum');
         Edit_Vom.SetFocus;
         Exit;
      end;
   end;

   try
      bis := StrToDate( Edit_Bis.Text );
   except
      On E: Exception do begin
         TryErrorBox(E.Message,'Ungültiges Enddatum');
         Edit_Bis.SetFocus;
         Exit;
      end;
   end;

   Query.ParamByName('VOM').AsDate := vom;
   Query.ParamByName('BIS').AsDate := bis;

   LoadFromDataSet(ClientDataSet,Query,'DATUM');
   Calculate;
end;
LoadFromDataSet sieht so aus:
Delphi-Quellcode:
procedure LoadFromDataSet( Destination: TClientDataSet; Source: TDataSet; InitialSort: String = ''; CheckNotNull: String = '' );
var
   fieldNo, indexNo: Integer;
   field: TField;
   fieldName: String;
   CopyData: Boolean;
begin
   with Destination do begin
      Screen.Cursor := crHourGlass;
      DisableControls;

      //-- Vorhandene Indexes löschen --//
      if ( FieldDefs.Count > 0 ) then begin
         IndexDefs.Update;
         Close;
         Open;
         while( IndexDefs.Count > 2 ) do begin
            try
               DeleteIndex(IndexDefs.Items[2].Name);
            except
               Break;
            end;
            IndexDefs.Update;
         end;
      end;

      //-------------------------------------//
      //-- Struktur des DataSet übernehmen --//
      //-------------------------------------//
      Close;
      try
         Source.Open;
      except
      end;
      if ( Source.FieldDefs.Count < 1 ) then
         raise Exception.Create('Fehler beim öffnen der Abfrage.');

      //-- Clientdataset erstellen --//
      FieldDefs.Assign(Source.FieldDefs);
      CreateDataSet;

      //-- Währungsfelder setzen --//
      for fieldNo := 0 to Fields.Count - 1 do begin
         field := Fields[fieldNo];
         if ( field is TFloatField ) then begin
            fieldName := field.FieldName;
            if ( Copy(fieldName,Length(fieldName)-3,4) = '_EUR' ) then begin
               (FieldByName(fieldName) as TFloatField).Currency := True;
               System.Delete(fieldName,Length(fieldName)-3,4);
               (FieldByName(fieldName) as TFloatField).Currency := True;
            end;
         end;
      end;

      CopyData := True;

      //-- Alle Datensätze kopieren --//
      if ( CheckNotNull <> '' ) then
         CopyData := not Source.FieldByName(CheckNotNull).IsNull;

      if ( CopyData ) then begin
         while ( not Source.Eof ) do begin

            //-- Datensatz anlegen und alle Felder kopieren --//
            Append;
            for fieldNo := 0 to Fields.Count - 1 do
               Fields[fieldNo].Value := Source.Fields[fieldNo].Value;
            Post;

            Source.Next;
         end;

         //-- Einen Index anlegen --//
         if ( (InitialSort <> '') and (not (Bof and Eof)) ) then begin
            AddIndex('IDX_'+InitialSort,InitialSort,[]);
            IndexName := 'IDX_'+InitialSort;
         end;
      end;
      Source.Close;

      First;
      EnableControls;
      Screen.Cursor := crDefault;
   end;
end;
hoffe das hilft weiter
PS.: Das SQL-Statement ist direkt in der TQuery Komponete eingetragen (Also nicht mit 'Add()')
Zukunft: etwas, das die meisten Menschen erst lieben, wenn es Vergangenheit geworden ist.

- William Somerset Maugham (engl. Schriftsteller)
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#8

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 13:52
Laut Oracle bedeutet Fehler 00933, dass die terminierende Klausel deines SQL-Statements unzulässig ist. Das wäre bei dir die WHERE Klausel...

Grüße vom marabu
  Mit Zitat antworten Zitat
Tyrael Y.

Registriert seit: 28. Jul 2003
Ort: Stuttgart
1.093 Beiträge
 
Delphi 2007 Professional
 
#9

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 13:58
Delphi-Quellcode:
 

LQuery.SQL.Add(Format('SELECT Q.*, K.NAME
FROM QUICKCLC Q
LEFT OUTER JOIN KUNDEN K ON(Q.KDNR = K.KDNR)
WHERE Q.DATUM >=
''%s'' AND
Q.DATUM <=
''%s''', [:VOM, :BIS]);
Levent Yildirim
Erzeugung von Icons aus Bildern:IconLev
  Mit Zitat antworten Zitat
Silbar

Registriert seit: 23. Jun 2005
42 Beiträge
 
Delphi 6 Professional
 
#10

Re: Fehler im SQL-Statement...aber wo?

  Alt 25. Jul 2005, 14:17
Okay Leute vorne Weg: Es war eindeutig mein Fehler

Das Programm an dem ich arbeite soll unteranderem mit Paradox(lokale DB) sowie Oracle (auf einem Server liegende DB) funktionieren. Hab am Anfang der Unit die Abfragen vertauscht und somit versucht die Paradox spezifischen Aspekt bei Oracle zu verwenden und umgekehrt.

Ein weiteres Beispiel für die Macht des NOT

Danke das ihr euch trotzdem die Mühe gemacht habt und versucht habt mir zu helfen (ob das aber manchmal bei mir noch möglich ist wage ich gerade ernsthaft zu bezweifeln )
Zukunft: etwas, das die meisten Menschen erst lieben, wenn es Vergangenheit geworden ist.

- William Somerset Maugham (engl. Schriftsteller)
  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 23:35 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