Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL Fehler too many actual parameter (https://www.delphipraxis.net/110477-sql-fehler-too-many-actual-parameter.html)

Pluto 18. Mär 2008 17:00

Datenbank: Paradox • Version: 7 • Zugriff über: BDE

SQL Fehler too many actual parameter
 
Hallo,
bei kleineren Programmen arbeite ich immer noch mit der BDE und Paradox,
oder MyBase - ist halt schnell und bequem. (Delphi 7 Enterprise)

Bei einer Datenbank X.db mit 25 Feldern funktionieren SQL Abfragen wie:
SELECT * FROM X.db
und
SELECT 'Vorname', 'Nachname' FROM X.db
einwandfrei.
Sobald ich aber dem SELECT mehr als 12 Feldnamen hinzufüge erhalte ich die
Fehlermeldung "too many actual parameters".

Hat die BDE oder das Local SQL von Delphi hier eine Begrenzung?
Wenn ja, läßt sich diese aufheben?

Ich könnte ja mit SELECT * arbeiten und die erhaltenen Daten dann auf die
benötigten Felder reduzieren - aber das ist eine unelegante Bastelei.

Dank im Voraus für jede Antwort.

shmia 18. Mär 2008 17:12

Re: SQL Fehler too many actual parameter
 
Zitat:

Zitat von Pluto
SQL-Code:
SELECT 'Vorname', 'Nachname' FROM X.db

Falsch! Feldnamen werden nicht in einfache Anführungszeichen gesetzt.

Richtig:
SQL-Code:
SELECT Vorname, Nachname, "31Datum" FROM X.db
Feldnamen, die ein Problem darstellen werden in doppelte Anführungszeichen gesetzt.
Generell sollte man aber die problematischen Feldnamen meiden wie die Pest, so dass man die doppelten Anführungszeichen nicht braucht.

Hier noch ein Beispiel, wie man einfache Anführungszeichen in der Feldliste benützen kann:
SQL-Code:
SELECT *, 'A' AS Satzart FROM TabelleA
UNION ALL
SELECT *, 'B' AS Satzart FROM TabelleB
Hier werden 2 Tabellen mit UNION ALL zu einem Ergebnis vereint.
Damit man noch weiss, welche Datensätze aus welcher Tabelle stammen, wird einfach noch ein künstliches Feld (Name: Satzart) hinzugeführt.

Pluto 18. Mär 2008 18:03

Re: SQL Fehler too many actual parameter
 
Dank für die schnelle Antwort.

Natürlich gehören in die SQL keine Anführungszeichen.
Die Anführungszeichen waren versehentlich nur in meinem verkürztem
Text der Anfrage.

Mein echter Code sah so aus:
Delphi-Quellcode:
  SQL.Add('SELECT Hr.ZUNAME, Hr.VORNAME, Hr.STRASSE, Hr.PLZ, Hr.ORT,');
  SQL.Add('Hr.Titel, Hr.JAHRGANG, Hr.GebDat, Hr.GESCHL, Hr.NR, Hr.INFO');
  SQL.Add('Hr.BANK, 'Hr.KTOINHABER', Hr.EMAIL');
  SQL.Add('FROM "' + DataPath + 'hr.DB" Hr');
  if HrIsActive then begin
    SQL.Add('INNER JOIN "' + SemPath + 'Beleg.DB" Beleg');
    SQL.Add('ON (Hr.NR = Beleg.NR)');
  end;
Da waren durchs Kopieren bei einem Feld Anführungszeichen hineingerutscht.
Auch bei mehrfachem Kontrollieren habe ich den Fehler stets überlesen.

Schon lustig: Durch meine fehlerhafte Anfrage und der Antwort darauf habe
ich den Fehler nun sofort lokalisiert.

Nochmals Dank!


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