Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Access SQL-Abfrage -> Fehler: Exception (https://www.delphipraxis.net/114587-access-sql-abfrage-fehler-exception.html)

p.dworaczek 27. Mai 2008 22:03

Datenbank: Access • Zugriff über: SQL

Access SQL-Abfrage -> Fehler: Exception
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hallo!

Sitze schon länger an dem Fehler und habe keine Ahnung was ich falsch mache....

Hier der CODE:

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
 begin
   with Query1 do
   begin
    sql.clear;
    sql.add('select * from Datennbank.KundenDB where Datennbank.Kunden-Nr=0');
    Active:=true;
    open;
    if recordcount > 0 then
    begin
      first;
      while not EOF do
      begin
        //tu was
        next; //zum nächsten satz gehen
      end; //while
    end; //endif
 end; //beginn
Die Fehlermeldung:

Zitat:

Im Projekt Project1.exe ist eine Exception der Klasse EDBEngineError aufgetreten. Meldung: 'Allgemeiner SQL-Fehler [Microsoft][ODBC Microsoft Access Driver] 2 Parameter wurden erwartet, aber es wurden zu wenig Parameter übergeben.'. Prozess wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.
Im Anhang noch das gepackte Projekt... entschuldigt bitte die Form(des Projekts), habe das Projekt nur zum Testen angelegt... :)

Ich hoffe ihr könnt mir helfen. :)

Mit freundlichen Grüßen
Piotr Dworaczek

Medium 27. Mai 2008 22:19

Re: Access SQL-Abfrage -> Fehler: Exception
 
Auf den ersten Blick kann ich mit der Meldung nicht allzuviel anfangen. Was ich mir vorstellen kann, was problematisch sein könnte, ist das '-' in deinem Tabellennamen. Fasse die Namen mal in " (Dopp. Anführungzeichen / bei MS-SQL) bzw. ´ (Back-Ticks / bei MySQL).

Das muss nicht die Lösung für das angesprochene Problem sein, aber potentielle mathem. Operatoren und sonstige Sonderzeichen in Bezeichnern sollte man sich grundsätzlich angewöhnen zu quoten, um nicht u.U. an anderer Stelle damit auf die Nase zu fallen.


Edit: Mir fällt nochwas auf. "Datennbank" scheint ein Catalog zu sein, "KundenDB" eine Tabelle. Demnach müsste "Datennbank.Kunden-Nr" auch eine Tabelle sein, und die ist schwer auf 0 zu prüfen ;)
(Nebenbei hast du in "Datennbank" ein n zu viel.)

p.dworaczek 27. Mai 2008 22:40

Re: Access SQL-Abfrage -> Fehler: Exception
 
Der Tipp mit dem '-' war schon mal gut. :) Jetzt steht in der Fehlermeldung, dass 1 Parameter erwartet wurde ... vorher waren es ja 2 Parameter, die erwartet wurden. :)

Ich habe den recordcount gelöscht, aber es hatte keine Auswirkungen auf die Fehlermeldung.

Trotzdem Danke!

Aber die Frage ist noch offen :)

Medium 27. Mai 2008 23:03

Re: Access SQL-Abfrage -> Fehler: Exception
 
Zitat:

Zitat von Medium
Edit: Mir fällt nochwas auf. "Datennbank" scheint ein Catalog zu sein, "KundenDB" eine Tabelle. Demnach müsste "Datennbank.Kunden-Nr" auch eine Tabelle sein, und die ist schwer auf 0 zu prüfen ;)

Was ist damit?

p.dworaczek 28. Mai 2008 05:10

Re: Access SQL-Abfrage -> Fehler: Exception
 
Sorry, aber ich weiss nicht so genau was du meinst. :oops:

Bin halt noch Anfänger. :)

ULIK 28. Mai 2008 05:21

Re: Access SQL-Abfrage -> Fehler: Exception
 
Delphi-Quellcode:
sql.add('select * from Datennbank.KundenDB where "Datennbank.KundenDB.Kunden-Nr"=0');
So vieleicht. Ich nehme an, Kunden-Nr ist ein Feld der Tabelle KundenDB. Dann mußt Du es auch als solches ansprechen. Bei deiner Originalschreibweise würde eine Tabelle Kunden-Nr gesucht werden und diese auf 0 verglichen werden (was keinen Sinn macht).

Grüße,
Uli

sx2008 28. Mai 2008 06:36

Re: Access SQL-Abfrage -> Fehler: Exception
 
Bei Access kann man sich nur in einer Datenbank bewegen. Also ist die Schreibweise "Datenbank.KundenDB" unzulässig.
Hier mal ein Beispiel für eine korrekte Abfrage:
Delphi-Quellcode:
  // die Zuweisung an sql.Text erspart uns den sql.Clear
  // das Feld KundenNr wird in aller Regel ein String (z.B. VARCHAR(20)) sein
  // man hätte bei der WHERE Klausel den Namen der Tabelle auch weglassen können,
  // aber das soll ja nur zeigen, wie man's schreiben darf
  ADOQuery1.sql.Text :=
    'select * from KundenTabelle where KundenTabelle.KundenNr=' + QuotedStr('4711');

p.dworaczek 28. Mai 2008 19:37

Re: Access SQL-Abfrage -> Fehler: Exception
 
Vielen Dank für die schnellen und sehr guten Antworten. Nun kann ich die Access-Datenbank auslesen... ohne Fehler :)


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