[VB/SQL] Aantal records limiteren voor het ophalen

Pagina: 1
Acties:

  • Wuursj
  • Registratie: Maart 2001
  • Laatst online: 12:24

Wuursj

want worst is al bezet

Topicstarter
Hallo,

Ik ben een programma aan het schrijvan dat allerlei Oracle tabellen kan bewerken. Het programma krijgt de naam van de tabel door en bouwt hier zelf dynamisch een scherm voor op met een grid, in een detailscherm kan dan de rij aangpast of een toegevoegd worden. Tot zover werkt alles.

Nu is alleen het probleem dat er ook tabellen met grote hoeveelheden rijen opgehaald moeten worden (miljoenen rijen zelfs in principe), zoveel dat normaliter het systeem zich ophangt bij het openen van deze tabbellen. Het is nu wenselijk dat er een bepaald aantal records eerst wordt opgehaald (zeg 50.000 ofzo) en dan met een druk op de knop de volgende 50.000 opgehaald kunnen worden. Is er een manier om dit te doen met het SQL of een mogenlijkheid binnen VB zelf? Ik kan wel een maxRecord op de recordset zetten en dan is het probleem opgelost maar dan kom ik niet meer bij de records die na de ingeladen records komen.

De grid is uit de OCX "Infragistcs datatable" dat los is aangeschaft door het bedrijf en kan normaal best wel wat records aan, ook is de connectie met de database niet gelegd met eens standaard ADO Data Control maar een handmatige connectie met een door het bedrijf zelf geschreven component. Het intern geheugen van de PC is de beperkende factor en die loopt vol naar x miljoen records...

Ik hoop dat jullie me kunnen helpen, als het niet lukt moet ik maar een filter gaan opzetten mbv SQL maar dat is nogal vervelend, ook voor de gebruiker straks.

droogworst - rookworst - leverworst - salamiworst - knakworst - bokworst - boterhammenworst


Verwijderd

Je DB administrator zal blij zijn als er continu 50.000 records opgehaald worden...
8)7

Maar goed... een aantal aandachtspunten:
1. Zorg dat er een view (met index) op de tabel komt. Werkt sneller
2. Is er een Id aanwezig die steeds met één opgehoogd wordt?? Zo ja... wat dacht je dan van:
code:
1
Select * from tableA where id Between 50000 AND 100000

Verwijderd

Of:

code:
1
2
3
4
5
select * from table where ROWNUM between 0 and 50000
---
select * from table where ROWNUM between 51000 and 100000
---
etc

Verwijderd

Als toevoeging op mijn vorige post wil ik aanraden om de view aan te roepen in een stored procedure waarbij je de ondergrens en boven grens aangeeft.
De stored procedure geef je dan door dmv:
code:
1
DisplayRecords 50001, 100000

Op deze manier hoef je maar 1 view te maken en deze view wordt gefilterd op de onder en bovengrens...

  • Wuursj
  • Registratie: Maart 2001
  • Laatst online: 12:24

Wuursj

want worst is al bezet

Topicstarter
Verwijderd schreef op 28 November 2002 @ 14:44:
Je DB administrator zal blij zijn als er continu 50.000 records opgehaald worden...
8)7
Tja, de afdeling die er gebruik van gaat maken wil dat nu eenmaal... Ze hebben nu een soortgelijk programma draaie dat dit ook doet dus het zal wel geen probleem zijn. Die 50.000 kan ook bijvoorbeeld 5000 of instelbaar worden, is maar een voorbeeld. Er zullen niet zo veel van die grote tabellen ingeladen worden maar het moet wel mogelijk zijn.
2. Is er een Id aanwezig die steeds met één opgehoogd wordt?? Zo ja... wat dacht je dan van:
code:
1
Select * from tableA where id Between 50000 AND 100000
Dat is helaas niet toepasbaar. Iedere Oracle table moet ingeladen kunnen worden dus ook met bijv. een Varchar als key.

Die iedeën van die views met of zonder procedure is een goed idee, ik ben nog niet zo'n held met SQL dus daar had ik nog niet aan gedacht.
Verwijderd schreef op 28 November 2002 @ 15:10:
Of:

code:
1
2
3
4
5
select * from table where ROWNUM between 0 and 50000
---
select * from table where ROWNUM between 51000 and 100000
---
etc
Hmm, dat ziet er wel erg simpel uit :)
Heeft elke tabel zo'n ROWNUM? Want dan ben ik zo klaar :)

Morgen eerst eens hawk_eye's idee proberen en anders eens gaan werken met een view.
Thx mensen!

droogworst - rookworst - leverworst - salamiworst - knakworst - bokworst - boterhammenworst


Verwijderd

Dan nog een laatste van mij
Als dat met rownum werkt....pas dat dan toe in een storedprocedure :+
Pagina: 1