AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi workaround dbgrid in client-server-anwendung
Thema durchsuchen
Ansicht
Themen-Optionen

workaround dbgrid in client-server-anwendung

Ein Thema von sancho1980 · begonnen am 28. Apr 2006 · letzter Beitrag vom 29. Apr 2006
Antwort Antwort
Seite 1 von 2  1 2      
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#1

workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 20:25
Datenbank: interbase 6.5 • Zugriff über: ibx, ibexpert
Hallo
ich weiß, eigentlich *soll* man das DBgrid bei client/server-datenbanken wegen des hohen datentransfers nicht verwenden, aber ich hab mir einen workaround überlegt, von dem ich aber leider nicht so richtig weiß, wie ichs praktisch umsetzen soll. die idee is folgende:

es werden einfach immer nur soviele datensätze an den client geschickt, wie zu einem bestimmten zeitpunkt auch grad im dbgrid dargestellt werden können. dazu müsste man (1. Problem):

1) irgendwie über den code herausbekommen, wieviele datensätze momentan im dbgrid dargestellt werden können. eine entsprechende funktion oder eigenschaft hab ich leider nicht ausfindig machen können; vielleicht gehts auch gar nicht...zur not könnte man ja pauschal so 50 datensätze rüberholen; das tut bestimmt nicht weh...oder hat jemand eine elegantere lösung

das zweite problem hängt damit zusammen, dass ich in sql nicht so wirklich fit bin..sobald der user sich über den letzten oder ersten datensatz hinausbewegen will, müsste man einen select-query abschicken, der eben auch wieder nur so 50 datensätze holt und zwar ab dem letzten vorhandenen datensatz aufwärts; wenn ich bsp-weise 100 datensätze hab, mit ID 1 - 100 und sich in meinem datenset gerade die datensätze 1-50 befinden und der user sich grad auf datensatz 50 bewegt, müsste der sql-befehl etwa so aussehen

[pseudo-sql]select * from die nächsten 50 datensätze
where id > :ID_letzterVorhandener[/pseudo-sql]

wie muss ich das richtig schreiben?

sehr dankend,
martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 20:31
Zitat:
1) irgendwie über den code herausbekommen, wieviele datensätze momentan im dbgrid dargestellt werden können. eine entsprechende funktion oder eigenschaft hab ich leider nicht ausfindig machen können; vielleicht gehts auch gar nicht...zur not könnte man ja pauschal so 50 datensätze rüberholen; das tut bestimmt nicht weh...oder hat jemand eine elegantere lösung
Über die Größe des Grids mit Verbindung mit der Schriftgröße, könnte man das berechnen.

zu 2.) Ich würde das nicht an der ID festmachen. Diverse DBMS bieten mit LIMIT-die Möglichkeit die Ergebnismenge zu begrenzen/ mit Offset zu arbeiten.
Markus Kinzler
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#3

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 20:38
stimmt, dass mit der größe und schriftgröße ist ne gute idee...

was den sql-query anbelangt, kannst du mir bitte mal ein beispiel geben, wie das syntaktisch in etwa aussehen müsste?

danke,

martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 20:50
DBGrid1.ScrollBy nicht gesehen ?
Gruß
Hansa
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

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

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 20:58
Schau mal nach ROWS in der IB Anleietung.
In FB würde es select * from tabelle first 50 skip 50; um die zweiten 50 Zeilen anzuzeigen, mysql select * from tabellel imit 50,50;
Markus Kinzler
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#6

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 21:40
hmmm...
hab mal bisschen gegooglet und nebenbei n bisschen ausprobiert in isql; folgendes klappt prima:

select * from dicentries where id > 280 rows 50; das gibt mir die ersten 50 records deren id größer als 280 ist

leider weiß ich nicht wie es andersrum geht, das brauch ich ja auch noch, also beispielsweise:

select * from dicentries where id < 280 last rows 50; - > klappt leider nicht

(die letzten 50 einträge, deren id kleiner als 280 ist (229-279)
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#7

Re: workaround dbgrid in client-server-anwendung

  Alt 28. Apr 2006, 22:20
falls es wen interessiert, ich habs raus

select * from dicentries where id < 350 order by id descending rows 5; die letzten 5 datensätze für die gilt id < 350...
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: workaround dbgrid in client-server-anwendung

  Alt 29. Apr 2006, 06:48
Nur mal so: Dein 'demand fetching', also Zugriff nach Anforderung ist schon die richtige Lösung, nur hast Du prinzipiell immer noch ein Problem: Wenn jetzt 100 Nutzer gleichzeitig durch eine Tabelle scrollen, ergibt das dann doch massig Rechnerei in der Datenbank sowie Netzwerktraffic. Ob das dann die richtige Lösung ist, sei dahingestellt.

Weiterhin muss die gesamte Tabelle ja nach der ID sortiert werden und DANN erst können die nächsten Zeilen für die Anzeige übermittelt werden. Das ist nur dann ohne zusätzlichen echten Sortieraufwand auf der Datenbankseite möglich, wenn die Datensätze ohnehin nach ID sortiert auf der Platte liegen. Ich kenn FB nicht, aber bei MSSQL heißt das Zauberwort 'Clustered Index'. Soetwas gibt es bestimmt auch für Firebird und Du hast bestimmt auch daran gedacht, ich wollt's nur mal anmerken: Dieser Clustered Index (einen pro Tabelle) sorgt nämlich dafür, das die Records genau so sortiert sind und dann wird ein 'ORDER BY ID' (Clustered Index auf ID) vom Optimizer wegoptimiert.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
sancho1980

Registriert seit: 7. Feb 2006
429 Beiträge
 
#9

Re: workaround dbgrid in client-server-anwendung

  Alt 29. Apr 2006, 08:58
ich weiß nicht ob ich das jetz alles richtig verstanden hab
ich hab natürlich einen unique index für das feld id in meiner db; ist das so ein clustered index, oder ist das nochmal was anderes?
wenn ich jetz 'order by id' verlange, sollte doch dieser index automatisch genutzt werden womit das doch eben keine rechnerei verursachen sollte, oder?
bin noch ziemlich neu bei delphi und interbase, bin also für verbesserungen sehr dankbar, da ich momentan ein terminologieverwaltungssystem als teil meiner diplomarbeit neu schreibe (aber nicht als informatuker sondern als dolmetscher, womit ich mich für teils mangelnde fachkenntnis entschuldigen will *g)
sers
martin
Um Rekursion zu verstehen, muss man zunächst Rekursion verstehen.
  Mit Zitat antworten Zitat
marabu

Registriert seit: 6. Apr 2005
10.109 Beiträge
 
#10

Re: workaround dbgrid in client-server-anwendung

  Alt 29. Apr 2006, 09:28
Hallo Martin,

das relationale Datenmodell nach Codd verlangt, dass jede Ordnung über ein tupel set per ORDER BY Klausel herzustellen ist. Um Abfragen zu beschleunigen lässt sich der Hersteller eines RDBMS natürlich etwas einfallen. Bei einem "normalen" Index wird die Ordnung wenn möglich über ein sortieren der Index-Einträge hergestellt. Mit dem "clustered" index hat MS die Möglichkeit geschaffen, dass die Daten einer Tabelle index-sequentiell ausgelesen werden können, wobei der Index bereits in sortierter Form gespeichert wird. Das erlaubt dem Query Optimizer die ORDER BY Klausel bei der Planerstellung einfach zu eliminieren.

Freundliche Grüße vom marabu
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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