Delphi-PRAXiS

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]);

p80286 16. Feb 2011 16:55

AW: order by als parambyname geht nicht?
 
Zitat:

Zitat von alzaimar (Beitrag 1082218)
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.

Warum das?
Hört sich für mich sehr nach der Aufforderung an, das Rad neu zu erfinden.

Gruß
K-H

khh 16. Feb 2011 17:56

AW: order by als parambyname geht nicht?
 
Zitat:

Zitat von p80286 (Beitrag 1082271)
Zitat:

Zitat von alzaimar (Beitrag 1082218)
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.

Warum das?
Hört sich für mich sehr nach der Aufforderung an, das Rad neu zu erfinden.

Gruß
K-H

die Begründung intressiert mich auch.

Gruss KHH

Sir Rufo 16. Feb 2011 18:32

AW: order by als parambyname geht nicht?
 
Die Begründung ist eigentlich naheliegend ;) wenn man die Übertragungskosten/Rechenzeitkosten gegenüberstellt.

Soll die Liste einfach nur sortiert an den Rechner übergeben werden und die Sortierung wird nicht verändert, dann ist das die Aufgabe vom Server.

Hat der Benutzer aber die Möglichkeit die Sortierkriterien zu wählen (Spalte a,b,c oder jetzt c,a,b) dann muss ich mir überlegen wo diese Sortierung erfolgen soll.
Immer auf dem Server und die Daten alle naselang wieder an den Client übertragen, oder lieber doch gleich auf dem Client.

Somit ist es eine Kosten/Nutzen-Rechnung wo die Sortierung erfolgt.
Am Ergebnis ändert sich nichts, aber evtl. an der Zeit, die der Nutzer warten muss, bis die Daten sortiert angezeigt werden.

alzaimar 16. Feb 2011 19:01

AW: order by als parambyname geht nicht?
 
Der Hauptgrund ist doch einfach Folgender (wobei Sir Rufo nicht Unrecht hat): Ein RDBMS ist i.a. recht ausgelastet. Sortieroperationen wirken sich da einfach negativ auf die Wartezeit aus, vor allen Dingen dann, wenn alle Anwendungen so vorgehen. Dann ist der Server fast nur noch mit Sortieren beschäftigt. In der Folge geht er schon bei wesentlich weniger gleichzeitigen Zugriffen in die Knie.

Wenn Du natürlich eine RDBMS mit einigen wenigen Anwendern hast, und Dir sicher bist, nie in höhere Gefilde zu stoßen, dann kannst Du dir natürlich angewöhnen, die Sortieroperation immer vom Server erledigen zu lassen. Wundere dich dann aber nicht, wenn dein RDBMS immer 'etwas' größer sein muss, als die der Konkurrenz, um die gleiche Performance zu erreichen.


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