![]() |
Datenbank: ACCESS • Version: 2016 • Zugriff über: ADO
Zeileninhalt direkt aus Parameter erzeugen
Hallo SQL Cracks,
ich möchte folgenden Ausdruck vereinfachen:
Delphi-Quellcode:
SELECT DISTINCT Parent FROM Hierarchie h1a WHERE (h1a.Parent = :ParamInteger1)
Ziel ist eine Tabelle die lediglich je eine Zeile/Spalte also ein Feld enthält, wobei der Inhalt gleich dem Parameter ist. Der Ausdruck wird nachher mit UNION mit weiteren Zeilen ergänzt. Sicher ganz einfach. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Halo,
so wie Du beschreibst, sollte die Abfrage doch genau das liefern? Wo ist denn das Problem? |
AW: Zeileninhalt direkt aus Parameter erzeugen
Das Problem ist vielleicht mehr akademischer Art.
Ich suche gerne nach möglichst einfachen, leicht verständlichen Lösungen. Dieser Ausdruck kommt wegen etwa 10 UNION immer wieder vor. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Meinst du sowas:
Code:
Bei MS-SQL kann man das machen. Wie es in Access ist, musst du ausprobieren.
select :ParamInteger1
|
AW: Zeileninhalt direkt aus Parameter erzeugen
Oder
SQL-Code:
SELECT :ParamInteger1 as Parent FROM Hierarchie;
|
AW: Zeileninhalt direkt aus Parameter erzeugen
Variante Jasocul, die kürzeste, funktioniert tatsächlich.
Ich war vermutlich bis anhin über den Eintrag von Parametern im ADOQueryx gestolpert. Wie und wann diese Einträge genau funktionieren ist mir noch nicht klar. Mein Eindruck: manchmal bleiben alte Relikte hängen. Werde ich noch anschauen müssen oder jemand hilft mir auf die Sprünge. Variante mkinzler Diese wird grundsätzlich akzeptiert, liefert aber für für jede Zeile der Tabelle dasselbe Resultat. Leider lässt sich aus irgendeinem Grund DISTINCT nicht anwenden. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Ja so einfach scheint's nun doch wieder nicht zu sein:
Beim Einbinden in weiteren SELECT wird doch eine Tabelle oder Abfrage verlangt. Dann wird's komplizierter / instabiler: Auch der einfache Ausdruck (SELECT : ParamIntereger1) funktioniert nun nicht mehr, es erscheint die Fehlermeldung:
Delphi-Quellcode:
Auch nach Neustart von Delphi und Schliessen/Oeffnen der DB kommt immer noch diese
Fehler bei einem aus mehreren Schritten bestehenden OLE DB-Vorgang.
Prüfen Sie die einzelnen OLE DB-Statuswerte, falls vorhanden. Die Daten wurden nicht verarbeitet. Fehlermeldung (im Debugmodus). Aber: Wenn ich das Programm einfach durchlaufen lasse (anstatt Activate = TRUE im Debug-Modus) kommt keine Fehlermeldung und das Resultat wird richtig erzeugt. Eigenartig. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Ehrlichgesagt hab' ich nicht kapiert, was Du da so bauen möchtest.
Fangen wir mal beim alten, guten Oracle an. Dort gibt es eine Tabelle Dual, die man für so allerlei "missbrauchen" kann.
SQL-Code:
Wenn man nun einen Wert braucht, den es in keiner Tabelle gibt, geht das z. B. mit
create table dual (dummy Varchar(1));
insert into dual (dummy) values ('X');
SQL-Code:
Sinngemäß entspricht das einem
select sysdate from dual
SQL-Code:
, wobei diese Select-Syntax ohne from nicht von allen Datenbanken verstanden wird. Es gibt da unterschiedliche Hilfskonstrukte.
select :ParamInteger1
Soweit so gut so theoretisch: Vermutlich möchtest Du sowas:
SQL-Code:
Die per Select geholten Werte existieren nicht in der Datenbank, sondern sollen per Parameter in eine Ergebnismenge "reingewuselt" werden.
select :Parameter1 from dual
union select :Parameter2 from dual union select :Parameter3 from dual union select :Parameter4 from dual union select :Parameter5 from dual union select :Parameter6 from dual union select :Parameter7 from dual union select :Parameter8 from dual union select :Parameter9 from dual union select :Parameter10 from dual Das Ergebnis diese Konstruktes könnte man dann beliebig (per Join, als In-Klausel, where Exists ...) in beliebige Abfragen einbauen. Suchst Du was in diese Richtung? Aber: Parameter werden für gewöhnlich nur in der Where-Klausel akzeptiert und nicht als "Selectergebnis" oder für Tabellen-, Spaltennamen, ... Das oben Skizzierte wird also mit an Sicherheit grenzender Wahrscheinlichkeit scheitern. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Zitat:
Du könntest vielleicht wirklich mal verraten, was Du erreichen möchtest. Also nicht: ich brauch 10 Union, sondern wofür Du das einsetzt, welche Werte da drinstehen sollen, warum genau diese Werte, also ganz einfach den Anwendungsfall. Vielleicht gibt es eine Abkürzung für Dein Vorhaben. - Z.B. eine virtuelle Datenquelle mit definierten Werten? - ..? Wenn ja, würde man vielleicht am ehesten eine (temporäre )Tabelle erzeugen und dort per Insert die benötigten Werte eintragen und damit weiterarbeiten. Falls das in bestehende Objekte eingebunden werden muss, kann man Dimensionen wie User, Session in der Tabelle definieren und diese on the fly mitverwalten. |
AW: Zeileninhalt direkt aus Parameter erzeugen
Delphi-Quellcode:
Das ist die unnachahmlich effizente Methode von ADO, Dir mitzuteilen, daß Du die Syntax Deiner Abfrage einmal überprüfen solltest.
Fehler bei einem aus mehreren Schritten bestehenden OLE DB-Vorgang.
Prüfen Sie die einzelnen OLE DB-Statuswerte, falls vorhanden. Die Daten wurden nicht verarbeitet. Gruß K-H P.S. das "SELECT DISTINCT Parent FROM Hierarchie h1a WHERE (h1a.Parent = :ParamInteger1)" bedeutet "Es gibt mindestens einen Datensatz mit Parent=Parameterinteger" |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:48 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz