AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Firebird und LIMIT bei SELECT
Thema durchsuchen
Ansicht
Themen-Optionen

Firebird und LIMIT bei SELECT

Ein Thema von hsbc · begonnen am 15. Mai 2005 · letzter Beitrag vom 16. Sep 2005
Antwort Antwort
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#1

Firebird und LIMIT bei SELECT

  Alt 15. Mai 2005, 11:37
Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Delphi 7 Professional + Zeos-Lib.
Hallo allerseits,

kann es sein, dass Firebird das LIMIT bei SELECT nicht kennt?

SELECT * FROM Tabelle ORDER BY Feld1 LIMIT 20

ergibt bei mir eine Fehlermeldung.

Welche Alternativen kann ich hier verwenden, wenn ich immer nur die nächsten xx Datensätze auslesen möchte?

mfg
Herbert
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#2

Re: Firebird und LIMIT bei SELECT

  Alt 15. Mai 2005, 11:58
Hat sich erledigt - hab es bereits selbst rausgefunden:

SELECT FIRST 20 * FROM ....

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von kiar
kiar

Registriert seit: 2. Aug 2003
Ort: Aschersleben
1.362 Beiträge
 
Delphi 5 Professional
 
#3

Re: Firebird und LIMIT bei SELECT

  Alt 15. Mai 2005, 12:01
hallo,

ich weis nicht ob firebird einen Limit bezeichner hat. aus ib zeiten habe ich zwei stored proceduren von kosch , die das erledigen , damit bin ich aber auch zufrieden.

wenn du den quelltext möchtest, dann eine PN an mich.

raik

Edit// das ist ja einfach, werde wohl oder übel mich mal wieder intensiver mirt firebird beschäftigen müssen
verhältnisse die einem nicht passen,
muss man verändern oder verlassen
  Mit Zitat antworten Zitat
hsbc

Registriert seit: 28. Jan 2004
Ort: Krems/Donau
404 Beiträge
 
Delphi 7 Professional
 
#4

Re: Firebird und LIMIT bei SELECT

  Alt 15. Mai 2005, 14:12
Hallo kiar,

LIMIT geht einwandfrei bei Firebird und zwar mit folgender Syntax:

SELECT FIRST xx SKIP yy <column1, column2> FROM <table> ORDER BY <column1>

wobei xx der Anzahl an Zeilen entspricht, die du zurückbekommst, wobei yy Zeilen vorher übersprungen werden.

Was ich noch suche:

Eine Möglichkeit, die das gleiche unter MSSQL macht - bisher leider nichts gefunden.

mfg
Herbert
  Mit Zitat antworten Zitat
Benutzerbild von Union
Union

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

Re: Firebird und LIMIT bei SELECT

  Alt 15. Mai 2005, 14:48
Zitat von hsbc:
Hallo kiar,

LIMIT geht einwandfrei bei Firebird und zwar mit folgender Syntax:

SELECT FIRST xx SKIP yy <column1, column2> FROM <table> ORDER BY <column1>

wobei xx der Anzahl an Zeilen entspricht, die du zurückbekommst, wobei yy Zeilen vorher übersprungen werden.

Was ich noch suche:

Eine Möglichkeit, die das gleiche unter MSSQL macht - bisher leider nichts gefunden.

mfg
Herbert
Bei MSSQL heisst es:
SELECT TOP N
Ibi fas ubi proxima merces
sudo /Developer/Library/uninstall-devtools --mode=all
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#6

Re: Firebird und LIMIT bei SELECT

  Alt 16. Sep 2005, 14:37
Hallo ihr,

in mySQL kann ich ja folgendes schreiben:
SELECT * FROM tablename ORDER BY somefield LIMIT 15, 30 Wie wuerde der Befehl in Firebird aussehn? Sind Skip die Anzahl Zeilen die Uebersprungen werden, also so:
SELECT FIRST 15 SKIP 29 FROM tablename ORDER BY somefield Ich will ja ab dem 30. Datensatz 15 haben, also muss ich 29 ueberspringen, sehe ich das richtig?

Thanks and Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#7

Re: Firebird und LIMIT bei SELECT

  Alt 16. Sep 2005, 14:48
Ehrlich gesagt halte ich herzlich wenig von solchen Konstrukten.
Ist ähnlich wie setLength in .Net : Es sieht so simple aus, dass man schnell vergisst wieviele Resourcen man dabei verbrät...

Du kannst das in FB simulieren indem du eine selectable procedure schreibst, die einfach ein SELECT first ZuÜberschringende+ZuSelektierende records ausführt.
Innerhalb der schleife verwirfst du die zu überspringenden Datensätze.
Und schon sieht man ganz gut, warum sowas ziemlich viel Rechenzeit den Gullie runterspült...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#8

Re: Firebird und LIMIT bei SELECT

  Alt 16. Sep 2005, 14:52
Nichts fuer ungut Robert, aber da gibt es ein paar Problemchen.
Ich brauche das, weil ich ein zusaetzliches Datenbankmodul fuers phpBB2 baue. Dieses Modul abstrahiert die Funktionen, so dass es dem Anwendungsscript herzlich egal ist, welche DB dahintersteckt
Bei DB-Systemen die LIMIT x, y nicht verstehn, muss ich das also umbiegen. Procedures kaemen hier nicht in Frage, dazu muessten sehr viele Queries im phpBB angepasst werden, und das will ich mir nicht antun.

Es geht nur darum, ob ich 1 subtrahieren muss oder nicht, also ob die Anzahl nach SKIP x wirklich uebersprungen werden, und erst der x+1te Datensatz als erster zurueckkommt.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
Robert_G
(Gast)

n/a Beiträge
 
#9

Re: Firebird und LIMIT bei SELECT

  Alt 16. Sep 2005, 15:04
Du kannst in eine selectable procedure genauso abfragen wie eine Tabelle.
Du bekommst natürlich etwas Overhead. Zusätzlich zu dem bestehenden Overhead von solchen "ich frage mal 1.000 Datensätze ab, die ich gleich wegwerfe" Abfragen...
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#10

Re: Firebird und LIMIT bei SELECT

  Alt 16. Sep 2005, 15:14
Ich glaube wir reden ein klein bisschen aneinander vorbei, ich hole mal etwas weiter aus.
In den verschiedenen Dateien des phpBBs werden die Queries so ausgefuehrt:
Code:
$sql = "SELECT * FROM sometable ORDER BY id ASC LIMIT 15,15;
if (!($result = $db->sql_query($sql)))
{
//...
}
$db ist dabei ein Objekt von sql_db, einer Klasse die je nach eingestelltem DBMS anders definiert ist. Ich baue eben eine neue sql_db-Klasse, also weiss ich momentan nicht wie ich da mit einer selecteable Procedure arbeiten soll.
In meiner sql_query spalte ich das uebergebene Query mit einer RegExp ausseinander um Limit und Start zu erhalten, und setze dann das neue Query zusammen. Die Frage ist nur, ob ich im obigen Fall das:
SELECT FIRST 15 SKIP 14... oder das:
SELECT FIRST 15 SKIP 15... schreiben muss

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  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 11:35 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