Meinews.de  


Zurück   Meinews.de > Forum > Newsgroups microsoft.public.de.* 3 Forum > Newsgroup microsoft.public.de.german.entwickler.dotnet.datenbank
Registrieren FAQ Benutzerliste Kalender Suchen Heutige Beiträge Alle Foren als gelesen markieren

Newsgroup microsoft.public.de.german.entwickler.dotnet.datenbank Forum microsoft.public.de.german.entwickler.dotnet.datenbank

Antwort
 
Themen-Optionen Ansicht
  #1  
Alt 11-06-2009, 02:44 PM
Maik T.
 
Beiträge: n/a
Standard SQL-Statement um Daten nachzuladen!?

Hallo,

ich habe eine große Datenbanktabelle (ca. 10000 Datensätze), die ich in
einem DataGrid anzeigen möchte. Nun möchte ich aber nicht alle Datensätze
sofort holen, sondern erst vielleicht 100 laden und beim runterscrollen
nachher immer wieder neue Datensätze nachladen.

Am Anfang hole ich mir z.B. so die Daten:

SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter ORDER BY Name ASC,
Vorname ASC

Nun möchte ich nachher die nächsten hundert Datensätze laden, aber wie
realisiere ich das per Statement, da ich ja nicht nur wieder 100 Datensätze
ermitteln muss, sondern das sollen ja dann die 100 sein, die nach dem
letzten Datensatz kommen?

Vielen Dank schonmal im Voraus für eure Antworten.

MfG
Maik T.


Mit Zitat antworten
Alt Today
Advertising
Google Adsense
 
This advertising will not be shown
in this way to registered members.
Register your free account today
and become a member on
Meinews.de
Standard Sponsored Links

  #2  
Alt 11-06-2009, 07:38 PM
Peter Fleischer
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

"Maik T." <doug4king*web.de> schrieb im Newsbeitrag
news:hd1cnh$e1v$1*online.de...

> ich habe eine große Datenbanktabelle (ca. 10000 Datensätze), die ich in
> einem DataGrid anzeigen möchte. Nun möchte ich aber nicht alle Datensätze
> sofort holen, sondern erst vielleicht 100 laden und beim runterscrollen
> nachher immer wieder neue Datensätze nachladen.
>
> Am Anfang hole ich mir z.B. so die Daten:
>
> SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter ORDER BY Name ASC,
> Vorname ASC
>
> Nun möchte ich nachher die nächsten hundert Datensätze laden, aber wie
> realisiere ich das per Statement, da ich ja nicht nur wieder 100
> Datensätze ermitteln muss, sondern das sollen ja dann die 100 sein, die
> nach dem letzten Datensatz kommen?


Hi Maik,
das könnte beispielswiese so aussehen:

SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter
WHERE ID NOT IN
(SELECT TOP 100 ID FROM tbl_Mitarbeiter ORDER BY Name ASC)
ORDER BY Name ASC, Vorname ASC

--
Viele Gruesse

Peter

Mit Zitat antworten
  #3  
Alt 11-06-2009, 10:28 PM
Maik T.
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Peter Fleischer schrieb:

> Hi Maik,
> das könnte beispielswiese so aussehen:
>
> SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter
> WHERE ID NOT IN
> (SELECT TOP 100 ID FROM tbl_Mitarbeiter ORDER BY Name ASC)
> ORDER BY Name ASC, Vorname ASC
>


Hi Peter,

ich steig da leider noch nicht so ganz hinter! Beim ersten Laden hole
ich mir ja ganz normal z.B. die ersten 100 Datensätze aus der Tabelle.
Wenn ich nun die nächsten haben möchte, also Records 101-200, muss ich
da nicht dann die Guid des letzten Datensatzes, sprich vom 100.
mitgeben, damit man weiß ab wo man die Datensätze holen soll?

Oder müsste ich dann einfach beim nächsten Durchlauf "SELECT Top 200"
usw. nehmen?

Vielen Dank schonmal für deine Antwort!

MfG
Maik T.
Mit Zitat antworten
  #4  
Alt 11-07-2009, 09:04 AM
Peter Götz
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hallo Maik,

> ich habe eine große Datenbanktabelle (ca. 10000 Datensätze), die ich in
> einem DataGrid anzeigen möchte. Nun möchte ich aber nicht alle Datensätze
> sofort holen, sondern erst vielleicht 100 laden und beim runterscrollen
> nachher immer wieder neue Datensätze nachladen.


Bei 10.000 Datensätzen hiesse das, dass der Benutzer den
gesuchten Datensatz im schlechtesten Fall erst nach dem
99. Nachladen finden würde.

Falls es ein Feld in Deinen Datensätzen gibt, das als
Suchkriterium dienen könnte, wäre eine Suche nach einem
bestimmten Datensatz damit möglicherweise deutlich kürzer
und effizienter. Ein Beispiel wäre z.B. eine Tabelle mit
Artikeln, die u.a. auch durch ein Feld Artikelgruppe gekennzeichnet
sind. Der Benutzer sollte dann die Möglichkeit haben, einen
Suchbegriff einzugeben (z.B. ArtikelGruppe) und dieser könnte
dann in ein SQL-Statement der Art

Select * from Tabelle Where FeldX = Suchbegriff

einfliessen.
Beschreibe doch einfach mal, wie die Datensätze in Deiner
DB-Tabelle aussehen (Felder/Felddatentypen) und
nach welchen Feldinhalten sinnvollerweise gesucht werden
könnte. Das wäre natürlich nur dann sinnvoll, wenn ein
oder mehrere Datensätze gesucht werden sollen, die
bestimmte Kriterien erfüllen. Du solltest deshalb auch
mal beschreiben, zu welchem Zweck die Daten in Deinem
Grid angezeigt werden sollen.


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


Mit Zitat antworten
  #5  
Alt 11-07-2009, 09:46 AM
Christoph Ingenhaag
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hi Maik,

wenn es sich um SQL Server handeln sollte, schau mal hier:
http://www.sqlteam.com/article/serve...ql-server-2005
falls du hierfür noch dynamische Filter benutzen willst, schau hier:
http://www.sommarskog.se/dyn-search-2005.html

Viele Grüße
Christoph

"Maik T." <doug4king*web.de> schrieb im Newsbeitrag
news:hd27ub$5vd$1*online.de...
> Peter Fleischer schrieb:
>
>> Hi Maik,
>> das könnte beispielswiese so aussehen:
>>
>> SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter
>> WHERE ID NOT IN
>> (SELECT TOP 100 ID FROM tbl_Mitarbeiter ORDER BY Name ASC)
>> ORDER BY Name ASC, Vorname ASC
>>

>
> Hi Peter,
>
> ich steig da leider noch nicht so ganz hinter! Beim ersten Laden hole ich
> mir ja ganz normal z.B. die ersten 100 Datensätze aus der Tabelle. Wenn
> ich nun die nächsten haben möchte, also Records 101-200, muss ich da nicht
> dann die Guid des letzten Datensatzes, sprich vom 100. mitgeben, damit man
> weiß ab wo man die Datensätze holen soll?
>
> Oder müsste ich dann einfach beim nächsten Durchlauf "SELECT Top 200" usw.
> nehmen?
>
> Vielen Dank schonmal für deine Antwort!
>
> MfG
> Maik T.


Mit Zitat antworten
  #6  
Alt 11-09-2009, 08:12 AM
Maik T.
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hallo,

die Daten soll man abrufen, um sie nachher bearbeiten zu können.
Filterkriterien wären z.B. der Name oder die Nr..

Ist es eigentlich auch möglich per SQL-Statement, die Datensätze 21-40 zu
ermitteln?

Sprich sowas in der Art wie......

"SELECT Top Datensätze 21-40 Name, Vorname, Nr FROM tbl_Mitarbeiter ORDER BY
Nr"


MfG
Maik T.



Mit Zitat antworten
  #7  
Alt 11-09-2009, 12:06 PM
Peter Götz
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hallo Maik,

> die Daten soll man abrufen, um sie nachher bearbeiten zu können.


Ich interpretiere das mal so, dass der Benutzer
die Daten eines ganz bestimmten Mitarbeiters
oder eine Gruppe bestimmter Mitarbeiter bearbeiten
will. Also z.B. alle Mitarbeiter die jünger als 30 Jahre
sind, oder alle Mitarbeiter die eine bestimmte
Gehaltsgruppe haben usw., usw. ...

Filterkriterium wären dann z.B. Geburtsdatum oder
die Gehaltsgruppe.

> Filterkriterien wären z.B. der Name oder die Nr..
>
> Ist es eigentlich auch möglich per SQL-Statement, die Datensätze 21-40 zu
> ermitteln?
>
> Sprich sowas in der Art wie......
>
> "SELECT Top Datensätze 21-40 Name, Vorname, Nr FROM tbl_Mitarbeiter ORDER
> BY Nr"


Wenn Du damit die Datensätze meinst, bei denen das
Feld "Nr" einen Wert im Bereich von 21 bis 40 hat, dann
wäre das am einfachsten:

"Select [Name], Vorname, Nr From tbl_Mitarbeiter " & _
" Where Nr Between 21 And 40 Order By Nr"

Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


Mit Zitat antworten
  #8  
Alt 11-09-2009, 04:01 PM
André Pönisch
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hallo Maik,

> Am Anfang hole ich mir z.B. so die Daten:
>
> SELECT Top 100 Name, Vorname, Nr FROM tbl_Mitarbeiter ORDER BY Name ASC,
> Vorname ASC
>
> Nun möchte ich nachher die nächsten hundert Datensätze laden, aber wie
> realisiere ich das per Statement, da ich ja nicht nur wieder 100 Datensätze
> ermitteln muss, sondern das sollen ja dann die 100 sein, die nach dem
> letzten Datensatz kommen?


in einem der letzten dotnet-Magazine war da mal ein Beispiel wie man sowas
machen kann. Für deinen Fall sähe das so aus:

SELECT Name, Vorname, Nr
FROM (SELECT ROW_NUMBER() OVER (ORDER BY Name ASC) AS Zeile,
Name, Vorname, Nr
FROM tbl_Mitarbeiter) AS t
WHERE Zeile BETWEEN 100 AND 200

Grüße
André
Mit Zitat antworten
  #9  
Alt 11-12-2009, 08:50 AM
Markus Gries
 
Beiträge: n/a
Standard Re: SQL-Statement um Daten nachzuladen!?

Hallo Maik!

Ich habe im Moment genau dasselbe Problem wie du! Ich beschäftige mich
mit dieser Problematik schon einige Zeit.
Ich arbeite mit Tabelle die weit über 7.000.000 Datensätze haben und
will mich auch "Seitenweise" durch diese bewegen, sprich
immer nur 100 Datensätze laden und dann ggf. nachladen. Mein Problem
ist nur das ich verschiedene DBMS unterstützen muss (Access, SQL 2000,
2005, 2008).
AB SQL 2005 wär das ja alles gar kein Problem mit dieser schönen
"ROW_Number"-Funktion, nur was mach ich mit Access und SQL 2000?

Mein 2ter Ansatz war, dass ich einen DataReader benutz und immer 100
Datensätze nachlade.
Problem ist nur, dass nur einen DataReader pro Connection zulässig
ist.
Ab SQL 2005 gibt es es die Möglichkeit auch mehrere DataReader
parallel zu öffnen. Stichwort Multiple Active ResultSets (MARS).

Mein 3ter Ansatz war, ein DataSet bzw. DataTable zu verwenden und
diese per DataAdapter.Fill zu füllen.
Eine Überladung, dieser Methode, stellt die Möglichkeit bereit, dass
man einen "StartRecord" und "MaxRecord" angeben kann.
Problem ist nur, dass diese Methode mehr als 2min benötigt um z.B. 100
Datensätze zu laden. Das ist auch nicht hinnehmbar für mich.

Mein 4ter Ansatz war eine zusätzliche Identitätsspalte in die Tabelle
einzufügen und dann mit einem BETWEEN-Statement zu arbeiten.
Nur dies funktioniert auch nicht, sobald der Benutzer nach einer
andern Spalte sortieren würde, z.B. Name.

Es muss doch eine Möglichkeit geben in VB.NET mit großen Datenmengen
umgehen zu können.
Perfekt für mich wäre es, wenn ich auch noch navigieren könnte, d.h.
Springe zum ersten/letzten Datensatz etc.

Vielleicht hate jemand noch einen anderen Ansatz für mich...

MfG
Markus Gries
Mit Zitat antworten
 
Antwort


Themen-Optionen
Ansicht

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 anzufügen
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten

vB Code ist An
Smileys sind An
[IMG] Code ist An
HTML-Code ist Aus

Ähnliche Themen
Thema Erstellt von Forum Antworten Letzter Beitrag
Mail weiterleiten ohne Bilder nachzuladen Maximilian Schenker Newsgroup microsoft.public.de.outlook 1 04-17-2009 08:24 AM
SQL-Statement Dieter Schirmer Newsgroup microsoft.public.de.access 5 11-23-2008 04:15 PM
SQL STatement Norbert Stellberg Newsgroup de.comp.lang.delphi.datenbanken 4 10-17-2008 05:42 PM
Sicherheitsabfrage SQL-Statement Ahmed Martens Newsgroup microsoft.public.de.word.vba 3 10-02-2008 07:09 AM
DISTINCT im SQL-Statement Dieter Schirmer Newsgroup microsoft.public.de.vb.datenbank 2 04-14-2008 07:33 AM


Alle Zeitangaben in WEZ. Es ist jetzt 03:28 AM Uhr.





Powered by: vBulletin Version 3.6.7 (Deutsch)
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
Forum SEO by Zoints