Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi UIB Dataset und UNION (https://www.delphipraxis.net/99298-uib-dataset-und-union.html)

GuenterS 10. Sep 2007 11:10

Datenbank: Firebird • Version: 1.5 • Zugriff über: UIB

UIB Dataset und UNION
 
Hallo

habe ein kleines Problemchen mit einer UNION Abfrage

Ich glaube aber nicht dass die UIB Komponenten schuld sind, da es im SQL Manager for Interbase/Firebird auch nicht funktioniert. Da scheint es im SQL Statement an Hund zu geben, den ich übersehe.

SQL-Code:
SELECT 0 AS ID, '' AS KUERZEL
UNION ALL
SELECT ADRESSENID AS ID, ADR_KUERZEL AS KUERZEL
FROM ADRESSEN
WHERE AKTUELL = 1 AND ADR_KUERZEL != '' AND ADR_KUERZEL IS NOT NULL

Erreichen möchte ich, dass ich auch ein Ergebnis mit ID = 0 und '' als Kuerzel bekomme.

Als Fehlermeldung wird mir ausgespuckt:
Zitat:

Invalid Token.
Dynamic SQL Error.
SQL error code = -104.
Invalid command.
Data type unknown.
Sieht vielleicht jemand den Fehler der sich da eingeschlichen hat?

DeddyH 10. Sep 2007 11:12

Re: UIB Dataset und UNION
 
Ersetz mal != durch <>

GuenterS 10. Sep 2007 11:15

Re: UIB Dataset und UNION
 
Das bringt leider nichts.

Die einzelne Unterabfrage

SQL-Code:
SELECT ADRESSENID AS ID, ADR_KUERZEL AS KUERZEL
FROM ADRESSEN
WHERE AKTUELL = 1 AND ADR_KUERZEL != '' AND ADR_KUERZEL IS NOT NULL
Funktioniert ja auch, denke eher dass es was mit dem Union zu tun hat, bzw. des ersten Selects, das funktioniert nämlich auch nicht alleine wie ich eben feststellen musste...

Wenn ich nur
SQL-Code:
SELECT 0 AS ID, '' AS KUERZEL
ausführen möchte, schreibt er mir

Zitat:

Can't Prepare , because query is empty

DeddyH 10. Sep 2007 11:17

Re: UIB Dataset und UNION
 
Und wenn Du vor die UNION-Zeile noch ein FROM Adressen einfügst?

GuenterS 10. Sep 2007 11:18

Re: UIB Dataset und UNION
 
Wenn ich das mache, funktionieren beide Abfragen für sich alleine gut. Mit Union bekomme ich aber Fehlermeldung aus dem ersten Post.

dataspider 10. Sep 2007 11:36

Re: UIB Dataset und UNION
 
Hi,

IMHO müsste die erste Zeile so lauten:
SQL-Code:
SELECT 0 AS ID, '' AS KUERZEL from rdb$database ...
Frank

dataspider 10. Sep 2007 11:42

Re: UIB Dataset und UNION
 
habe es mal probiert, man muss noch casten:

SQL-Code:
SELECT cast(0 as integer) AS ID, cast('' as varchar(40)) AS kuerzel from rdb$database
[EDIT] du solltest natürlich das casting den Felddefinitionen deiner Tabelle Adressen anpassen [/EDIT]

Cu, Frank

GuenterS 10. Sep 2007 11:44

Re: UIB Dataset und UNION
 
und für was steht rdb$database? Ändern tuts jedenfalls nix am Fehler.

Habe es folgendermaßen umgebaut

SQL-Code:
SELECT DISTINCT 0 AS ID, '' AS KUERZEL FROM RDB$DATABASE
UNION
SELECT ADRESSENID AS ID, ADR_KUERZEL AS KUERZEL
FROM ADRESSSEN
WHERE AKTUELL = 1 AND ADR_KUERZEL != '' AND ADR_KUERZEL IS NOT NULL

/Nachtrag:
Aufs Casting ists angekommen :)

dataspider 10. Sep 2007 11:48

Re: UIB Dataset und UNION
 
Zitat:

Zitat von GuenterS
und für was steht rdb$database?

wird immer benutzt, wenn man genau einen Datensatz benötigt, da diese Sytemtabelle genau einen Datensatz enthält.

Union verbindet mehrere Selects, und der erste select muss natürlich vollständig sein.

Mit dem cast (siehe Beitrag über deinem) sollte es gehen.

[EDIT]
ich denke, so....
SQL-Code:
SELECT cast(0 as integer) AS ID, cast('' as varchar(1)) AS KUERZEL FROM RDB$DATABASE
UNION ALL
SELECT ADRESSENID AS ID, ADR_KUERZEL AS KUERZEL
FROM ADRESSSEN
WHERE AKTUELL = 1 AND ADR_KUERZEL <> '' AND ADR_KUERZEL IS NOT NULL
[/EDIT]

Cu, Frank

GuenterS 10. Sep 2007 12:02

Re: UIB Dataset und UNION
 
Super so geht es auch :) Danke

Jetzt wollt ichs nur noch sortieren und habe unten ein ORDER BY ADR_KUERZEL ASC angefügt... irgendwie mag das nicht.


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Seite 1 von 2  1 2      

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