Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   order by als parambyname geht nicht? (https://www.delphipraxis.net/158402-order-als-parambyname-geht-nicht.html)

khh 16. Feb 2011 10:59

Datenbank: firebird • Version: 2.1 • Zugriff über: zeos

order by als parambyname geht nicht?
 
hallo zusammen,
in meinen sql-statements weisse ich den where-Klauseln den Wert per Query1.ParamByName() zu.
Leider bekomme ich beim Versuch dies bei der order by klausel auch so zu machen nen Fehler -804
Data typ unknown.

Funktioniert das grundsätzlich nicht per Parameter?

Danke Gruss KHH

DeddyH 16. Feb 2011 11:03

AW: order by als parambyname gent nicht?
 
Du kannst per Parameter nur Werte übergeben, aber keine Tabellen- oder Feldnamen.

khh 16. Feb 2011 11:06

AW: order by als parambyname gent nicht?
 
Zitat:

Zitat von DeddyH (Beitrag 1082121)
Du kannst per Parameter nur Werte übergeben, aber keine Tabellen- oder Feldnamen.

hab ich schon befürchtet :-(

na dann übergebe ich den Feldnamen halt per Variable im Statement.


Ich danke dir

Gruss KHH

Bernhard Geyer 16. Feb 2011 11:11

AW: order by als parambyname gent nicht?
 
Zitat:

Zitat von khh (Beitrag 1082123)
Zitat:

Zitat von DeddyH (Beitrag 1082121)
Du kannst per Parameter nur Werte übergeben, aber keine Tabellen- oder Feldnamen.

hab ich schon befürchtet :-(

na dann übergebe ich den Feldnamen halt per Variable im Statement.

Eine solche Möglichkeit würde (teilweise) verhindern das der Query Analyser schon den Ausführungpfad optimiert bestimmen kann und Geschwindigkeitsvorteile durch wiederholte Ausführung nicht vorhanden wären.

Neumann 16. Feb 2011 11:15

AW: order by als parambyname gent nicht?
 
Hallo,

man kann die Feldposition übergeben, also order by :p und den Parameter dann mit query.parambyname('p').asstring:='2'

Gruß

Ralf

khh 16. Feb 2011 11:26

AW: order by als parambyname gent nicht?
 
Zitat:

Zitat von Neumann (Beitrag 1082130)
Hallo,

man kann die Feldposition übergeben, also order by :p und den Parameter dann mit query.parambyname('p').asstring:='2'

Gruß

Ralf

mh genau das geht aber bei order by wohl nicht, wobei 2 in deinem Beispiel ja auch kein Feldname ist.

khh 16. Feb 2011 11:27

AW: order by als parambyname gent nicht?
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1082127)
Zitat:

Zitat von khh (Beitrag 1082123)
Zitat:

Zitat von DeddyH (Beitrag 1082121)
Du kannst per Parameter nur Werte übergeben, aber keine Tabellen- oder Feldnamen.

hab ich schon befürchtet :-(

na dann übergebe ich den Feldnamen halt per Variable im Statement.

Eine solche Möglichkeit würde (teilweise) verhindern das der Query Analyser schon den Ausführungpfad optimiert bestimmen kann und Geschwindigkeitsvorteile durch wiederholte Ausführung nicht vorhanden wären.

und wie würdest du es dann anders machen?

Neumann 16. Feb 2011 12:14

AW: order by als parambyname geht nicht?
 
Hallo,

die '2' ist kein Feldname, sondern sozusagen die Feldposition in der Liste derselectierten Felder

Ich kann den sql z.B. so schreiben: select nr, name from kunden order by 1 wird nach Nummer sortiert.

Ebenso möglich: select nr, name from kunden order by :p und dann den Wert für p als Parameter übergeben.

Gruß

Ralf

khh 16. Feb 2011 12:17

AW: order by als parambyname geht nicht?
 
Zitat:

Zitat von Neumann (Beitrag 1082169)
Hallo,

die '2' ist kein Feldname, sondern sozusagen die Feldposition in der Liste derselectierten Felder

Ich kann den sql z.B. so schreiben: select nr, name from kunden order by 1 wird nach Nummer sortiert.

Ebenso möglich: select nr, name from kunden order by :p und dann den Wert für p als Parameter übergeben.

Gruß

Ralf

ok, werd ich ausprobieren

danke gruss KHH

alzaimar 16. Feb 2011 14:25

AW: order by als parambyname geht nicht?
 
Man sollte das Sortieren nicht dem Server überlassen. Das sind Perlen vor die Säue. Hol Dir die Datenmenge unsortiert und sortiere selbst in Memory.

Aber wenn Du es partout so willst, dann erstelle deine Query individuell:
Delphi-Quellcode:
myQuery.SQL.Text := Format('select * from tabelle order by %s',[aFieldName]);


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