AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Suche erweiterten DBNavigator!!!
Thema durchsuchen
Ansicht
Themen-Optionen

Suche erweiterten DBNavigator!!!

Ein Thema von romber · begonnen am 7. Mär 2009 · letzter Beitrag vom 9. Mär 2009
Antwort Antwort
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#1

Suche erweiterten DBNavigator!!!

  Alt 7. Mär 2009, 18:59
Datenbank: MS SQL Server • Version: 2005 • Zugriff über: ADO
Hallo!

Wenn man auf irgendeiner Suchseite nach irgendetwas sucht und viele Suchergebnisse gefunden wurden, werden meistens nicht alle Ergebnisse auf einmal angezeigt sondern auf mehrere Seiten aufgeteilt. Etwa so:

< 1 2 3 4 5 6 7 8 9 ... 100 >

So etwas möchte ich auch in meinem Programm machen. Gibt es eine fertige Komponente dafür?
Wenn nicht, wie mache ich das am besten? Bestimmt hat das jemand schon gemacht.

Wür jeden Tipp werde ich sehr dankbar.
  Mit Zitat antworten Zitat
Joe_the_Junkie
(Gast)

n/a Beiträge
 
#2

Re: Suche erweiterten DBNavigator!!!

  Alt 8. Mär 2009, 08:44
Eine Möglichkeit wäre wenn du über SQL-Befehle gehst:

Als erstes erhälst du mit "SELECT COUNT(*) FROM [Tabelle]" Die Anzahl der Zeilen in deiner Tabelle.
Bzw. kannst Du auch schreiben "SELECT COUNT(*) FROM [Tabelle] WHERE {Bedingung}";

Damit erhälst du die Anzahl der Einträge, die deiner Bedingung entsprechen.
Jetzt nimmst du die Anzahl der Lösungen, die du pro Seite zeigen möchtest und erhälst damit die Anzahl der Seiten
die Du brauchst. => Erstes Problem gelöst.

Wenn du jetzt nur eine gewisse Menge anzeigen lassen möchtest kannst du das hiermit machen.

"SELECT * FROM [Tabelle] LIMIT a,b"

Dabei sagt dir "a" wo dein Select anfangen soll.

Wenn "a" z.B. 0 ist fängt er ganz am Anfang an.
Wenn es z. B. 5 ist, fängt er erst ab der 6 Zeile an die Zeilen aus der Datenbank zu holen.

Mit "b" gibst du dann an wieviele Einträge Du aus der Datenbank ziehen möchtest.

Kleines Beipsiel:

"SELECT * FROM [Tabelle] LIMIT 5,10" nimmt die Zeile ab dem 6. Eintrag und gibt von da an die nächsten 10 Einträhe aus.

Am besten ist, alle Einträge haben eine id (Was meistens einegntlich Standart ist).
Dann schreibst du in deine SELECT-Abfrage noch "ORDER BY id ASC, bzw DESC"

ASC bedeutet hier aufsteigend und DESC absteigend.

Wenn man jetzt auf eine Seitenzahl klickt, dann kann man ausrechnen ab welcher Zeile die Datenbank die Daten ausgeben soll.

Sagen wir du willst pro Seite 10 Zeilen Ausgeben:

Als erstes erhälst du als Ergebnis 40 Zeilen. D. h. du hast 4 Seiten.
Klickt man nun auf Seite 2 musst du ja die Einträge von 11 bis 20 ausgeben.

Also "SELECT * FROM [Tabelle] ORDER BY id ASC LIMIT (SEITE -1)*10,10" (SEITE stelle hier eine Variable dar, für die Seite, die angeklickt wurde)

Somit erhälst du die passenden Einträge für deine angeklcikte Seite.


Sry, war garde im schriebrausch, hoffe, hab das nicht zu kompliziert erklärt.

Mfg Joe the Junkie
  Mit Zitat antworten Zitat
Benutzerbild von Codewalker
Codewalker

Registriert seit: 18. Nov 2005
Ort: Ratingen
945 Beiträge
 
Delphi XE2 Professional
 
#3

Re: Suche erweiterten DBNavigator!!!

  Alt 8. Mär 2009, 09:43
MSSQL kennt den Befehl LIMIT nicht - der ist von MySQL und nicht SQL-Standard. Mit TOP ist so etwas ähnliches vorhanden, aber man kann halt nur die TOP 10 oder TOP 20 bekommen und halt nicht zwei Grenzen angeben. Dafür muss man schon etwas mehr tun: Mehr Info hier
Thomas
  Mit Zitat antworten Zitat
Alt 8. Mär 2009, 10:31     Erstellt von sniper_w
Dieser Beitrag wurde von Matze gelöscht. - Grund: Doppelpost
Benutzerbild von sniper_w
sniper_w

Registriert seit: 11. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#4

Re: Suche erweiterten DBNavigator!!!

  Alt 8. Mär 2009, 10:32
Was du eingentlich suchst ist "Paging". Wie schon erwähnt kennt mssql kein LIMIT. Hier ein Beispiel für MSSQL:
SQL-Code:
DECLARE @PageNum AS INT;
DECLARE @PageSize AS INT;
SET @PageNum = 2;
SET @PageSize = 10;

WITH OrdersRN AS
(
    SELECT ROW_NUMBER() OVER(ORDER BY OrderDate, OrderID) AS RowNum
          ,OrderID
          ,OrderDate
          ,CustomerID
          ,EmployeeID
      FROM dbo.Orders
      -- hier kommen zusätzlichn Bedingungen, z.B.
      -- Where OrderDate < '1.1.2009'
)

SELECT *
  FROM OrdersRN
 WHERE RowNum BETWEEN (@PageNum - 1) * @PageSize + 1
                  AND @PageNum * @PageSize
 ORDER BY OrderDate
         ,OrderID;
Quelle: http://blogs.x2line.com/al/archive/2005/11/18/1323.aspx( "gegoogelt" in 15 sec )
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
romber

Registriert seit: 15. Apr 2004
Ort: Köln
1.164 Beiträge
 
Delphi 10 Seattle Professional
 
#5

Re: Suche erweiterten DBNavigator!!!

  Alt 9. Mär 2009, 17:53
Vielen Dank! Es klappt!
  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 17:45 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