AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Zeileninhalt direkt aus Parameter erzeugen
Thema durchsuchen
Ansicht
Themen-Optionen

Zeileninhalt direkt aus Parameter erzeugen

Ein Thema von FediDelPr · begonnen am 20. Feb 2019 · letzter Beitrag vom 22. Feb 2019
Antwort Antwort
Seite 1 von 2  1 2      
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#1

Zeileninhalt direkt aus Parameter erzeugen

  Alt 20. Feb 2019, 23:17
Datenbank: ACCESS • Version: 2016 • Zugriff über: ADO
Hallo SQL Cracks,

ich möchte folgenden Ausdruck vereinfachen:

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.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.275 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 01:01
Halo,
so wie Du beschreibst, sollte die Abfrage doch genau das liefern?

Wo ist denn das Problem?
Heiko
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#3

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 01:56
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.
  Mit Zitat antworten Zitat
Benutzerbild von Jasocul
Jasocul

Registriert seit: 22. Sep 2004
Ort: Delmenhorst
1.354 Beiträge
 
Delphi 11 Alexandria
 
#4

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 08:27
Meinst du sowas:
Code:
select :ParamInteger1
Bei MS-SQL kann man das machen. Wie es in Access ist, musst du ausprobieren.
Peter
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.858 Beiträge
 
Delphi 11 Alexandria
 
#5

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 08:47
Oder SELECT :ParamInteger1 as Parent FROM Hierarchie;
Markus Kinzler
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#6

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 11:15
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.
  Mit Zitat antworten Zitat
FediDelPr

Registriert seit: 16. Feb 2018
112 Beiträge
 
Delphi 10.1 Berlin Enterprise
 
#7

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 15:51
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:
    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.
Auch nach Neustart von Delphi und Schliessen/Oeffnen der DB kommt immer noch diese
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.
  Mit Zitat antworten Zitat
Delphi.Narium

Registriert seit: 27. Nov 2017
2.490 Beiträge
 
Delphi 7 Professional
 
#8

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 16:42
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:
create table dual (dummy Varchar(1));
insert into dual (dummy) values ('X');
Wenn man nun einen Wert braucht, den es in keiner Tabelle gibt, geht das z. B. mit select sysdate from dual Sinngemäß entspricht das einem select :ParamInteger1 , wobei diese Select-Syntax ohne from nicht von allen Datenbanken verstanden wird. Es gibt da unterschiedliche Hilfskonstrukte.

Soweit so gut so theoretisch:

Vermutlich möchtest Du sowas:
SQL-Code:
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
Die per Select geholten Werte existieren nicht in der Datenbank, sondern sollen per Parameter in eine Ergebnismenge "reingewuselt" werden.

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.
  Mit Zitat antworten Zitat
jobo

Registriert seit: 29. Nov 2010
3.072 Beiträge
 
Delphi 2010 Enterprise
 
#9

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 22:36
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.
So wie es da steht, ist es auch genau so gedacht. Wenn die Tabelle 10000 Datensätze hat, kommt für jeden der Datensätze der Wert des (gleichen) Parameters zurück.

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.
Gruß, Jo
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#10

AW: Zeileninhalt direkt aus Parameter erzeugen

  Alt 21. Feb 2019, 23:43
Delphi-Quellcode:
    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.
Das ist die unnachahmlich effizente Methode von ADO, Dir mitzuteilen, daß Du die Syntax Deiner Abfrage einmal überprüfen solltest.

Gruß
K-H
P.S.
das "SELECT DISTINCT Parent FROM Hierarchie h1a WHERE (h1a.Parent = aramInteger1)" bedeutet "Es gibt mindestens einen Datensatz mit Parent=Parameterinteger"
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (21. Feb 2019 um 23:48 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 10:58 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