AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Problem mit FireDac(XE3) und Firebird rows
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit FireDac(XE3) und Firebird rows

Ein Thema von WoGe · begonnen am 16. Dez 2014 · letzter Beitrag vom 16. Dez 2014
Antwort Antwort
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#1

Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 14:22
Datenbank: firebird • Version: 2.5 • Zugriff über: FireDac (XE3)
Hallo

folgendes SQL Befehl funktionier in IBExpert einwandfrei

Code:
select * from tmp_tblRohwerte
order by Messwerte rows :Anzahl to :Anzahl
Meine Firedac-Komponenten verlangen im Rows Befehl aber einen "Echte" Integerwert und keinen Parameter.

Ich möchte auf diese Weise den Medianen Wert ermitteln und/oder den Mittelwert der mittleren 80% der Werte.

Gibt es irgendeine Möglichkeit Firedac zu überreden?
Oder kann man die zur Frage stehenden Werte anderswie bekommen?

Grüße
wo
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#2

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 15:54
FireDAC ist DB-Übergreifend, daher solltest Du das Limit weglassen und stattdessen die dafür vorgesehenen Eigenschaften verwenden:
Delphi-Quellcode:
FDQuery.FetchOptions.RecsSkip := Anzahl-1;
FDQuery.FetchOptions.RecsMax := 1;
FireDac erweitert dann das Select selber je nach DB-Dialekt (ROWS..TO, LIMIT..OFFSET, FETCH FIRST, TOP, WHERE ROWNUM, ...).
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#3

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 16:10
HM..
interessante Idee, werde ich auf jeden Fall mal ausprobieren.

FireDAC ist DB-Übergreifend, daher solltest Du das Limit weglassen und stattdessen die dafür vorgesehenen Eigenschaften verwenden:
Delphi-Quellcode:
FDQuery.FetchOptions.RecsSkip := Anzahl-1;
FDQuery.FetchOptions.RecsMax := 1;
FireDac erweitert dann das Select selber je nach DB-Dialekt (ROWS..TO, LIMIT..OFFSET, FETCH FIRST, TOP, WHERE ROWNUM, ...).
Problem ist, das Konstrukt ist Bestandteil eines sehr komplexen Execute Block. (War Vorher mal ne SP, aber auch da hat Firedac gemeckert).
Ich bin schon am Überlegen, ob ich, da ich jetzt einen Execute Block habe, die Zeile im SQL Text nicht lokalisiere und jedesmal ersetzte.

Trotzdem erst mal vielen Dank
Ich werde meine Erkenntnisse hier schreiben

Grüße
wo
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

Registriert seit: 18. Mär 2004
Ort: Luxembourg
3.492 Beiträge
 
Delphi 7 Enterprise
 
#4

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 16:27
Wenn Dir die DB-Unabhängigkeit nicht wichtig ist, kannst Du auch die Macro-Ersetzung von FireDAC verwenden.
Delphi-Quellcode:
FDQuery.SQL.Text := 'select * from tmp_tblRohwerte order by Messwerte rows &Anzahl to &Anzahl';
FDQuery.MacroByName('Anzahl').AsInteger := 100;
IBExpert behandelt wohl durch Parameter-Marker ":" gekennzeichnete Werte wie ein Macro. Die Limits (wie auch Tabellennamen) werden nämlich von den DB-Treibern und dem Optimizer nicht als Parameter akzeptiert.
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
WoGe

Registriert seit: 16. Jun 2005
Ort: Kelkheim
178 Beiträge
 
Delphi 10.3 Rio
 
#5

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 17:40
Hallo
vielen Dank.
Getestet und funktioniert soweit.

Mit diesen Anregungen kann sicher weiterkommen.
Vermutlich muss ich meinen Block zerlegen, da "Anzahl" außerhalb des Blocks zurzeit nicht bekannt ist.

Was mich wundert ist diese Aussage, da ich das ganze vorher in einer Stored-Procedure hatte und da ging es (in IBExpert) auch einwandfrei - ich hatte eigentlich gedacht, das eine SP ausschließlich von Firebird bearbeitet wird.

...
IBExpert behandelt wohl durch Parameter-Marker ":" gekennzeichnete Werte wie ein Macro. Die Limits (wie auch Tabellennamen) werden nämlich von den DB-Treibern und dem Optimizer nicht als Parameter akzeptiert.
Viele Grüße
wo
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 17:42
Zitat:
ich hatte eigentlich gedacht, das eine SP ausschließlich von Firebird bearbeitet wird.
Wird Sie auch.
Markus Kinzler
  Mit Zitat antworten Zitat
tsteinmaurer

Registriert seit: 8. Sep 2008
Ort: Linz, Österreich
530 Beiträge
 
#7

AW: Problem mit FireDac(XE3) und Firebird rows

  Alt 16. Dez 2014, 23:09
Das Statement aus dem ersten Posting klappt mit FireDAC in XE5 ohne Probleme.
  Mit Zitat antworten Zitat
Antwort Antwort


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