VBiB/ACCB.net - Visual Basic in België | .net Ineta User Group  
Hoofdmenu

Advertenties

Het Computer Winkeltje HCW


Evenementen

Forum

Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
Auteur Bericht
The_VicarOffline
Onderwerp: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 14:12
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hallo,

Met "DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9" exporteer ik een tabel naar excel.

Het probleem is dat die tabel 300000 records bevat, en er op deze manier slechts +/- 64000 records max kunnen geëxporteerd worden. Dat zal wel zijn redenen hebben, maar is er een manier om grotere tabellen te exporteren?

ALvast bedankt voor een antwoord.
Vic.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
JennyOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 15:15
Professional Developer


Geregistreerd op: 01-feb-2007
Berichten: 363

Status: Offline
tja,excel 2003 beperkt het aantal rijen in een sheet tot +-65.000
in excel 2007 zal het vermoedelijk wel gaan (een sheet kan +-1.000.000 rijen bevatten)
wat je zou kunnen doen is die tabel over 6 tabellen verdelen van elk 50.000 records(query generator-make table query)
en die 1 voor 1 naar excel transfereren
dan wordt elke tabel in een ander sheet gezet,sheet met de naam van die tabel
ik heb geen idee of dit onderhevig is aan geheugen beperking
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 15:23
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hey,

bedankt voor je antwoord. ja, ondertussen ook nog wat verder op het net gezocht, en bij volgende uitgekomen: de export naar excel is beperkt tot 65000 rijen (zelfs nu met 2007, waar ik mee werk, die tot 1M kan gaan), maar blijkbaar heeft access2007 nog steeds de beperking van excel2003 als het op exporteren aan komt.

dat met die 50000 lijnen ben ik nu aan het testen, maar ben het veel te ingewikkeld aan't maken denk ik. wat bedoel je precies met query generator?

Groeten.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
JennyOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 15:57
Professional Developer


Geregistreerd op: 01-feb-2007
Berichten: 363

Status: Offline
in access kan je query's aanmaken
maak een nieuwe query
kies de tabel die je in meerdere tebellen wil splitsen
en specifieer dat het een make-table query moet zijn
kies alle velden
en bepaal dan de selectie criteria

een voorbeeldje in SQL:
SELECT Tabel1.* INTO Tabel2 FROM Tabel1 WHERE (((Tabel1.ID) Between 7 And 12));

dit doe je dan 6 maal:
INTO Tabel2
INTO Tabel3
INTO Tabel4
INTO Tabel5
INTO Tabel6
INTO Tabel7
en je hebt Tabel1 dan gesplits in Tabel2/3/4/5/6/7
dat veranderd niets aan de originele tabel hoor

ps:
in het draadje 'constant uur opzoeken'
ben je er ondertussen al achter gekomen dat je definitie van 'stabiele verzameling' wel eens totaal niet het verwachte resultaat kan opleveren ?
met die definitie kan de temperatuur van bv 50 graden oplopen tot bv 200 graden
en toch zal elke deelverzameling 'stabiel' zijn,als de temperatuur maar langzaam genoeg oploopt
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 16:04
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hey bedankt... maandag uitproberen, vanaf nu is het verlengd weekend voor mij. Smile

ivm stabiel uur, nee hier ben ik nog niet uit, ik kom regelmatig problemen tegen als ik het wil opzetten.
Probleem is dat ik niet rechtstreeks kan zeggen "ga naar record 5632", 't is altijd met movenext en moveback... of kan dat wel?

nogmaals bedankt!

Groeten
V.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
JennyOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 25 mrt 2010 - 17:43
Professional Developer


Geregistreerd op: 01-feb-2007
Berichten: 363

Status: Offline
tja,een tabel in een relationele db is nu eenmaal een ongeordende verzameling records
maw:
je kan nooit met zekerheid weten op welke fysieke positie in de tabel een record opgeslagen wordt
het dbms heeft de volledige vrijheid om dat te bepalen
er bestaat dus niet zoiets als een 'eerste','tweede'...enz record in een tabel
maar wat ik denk dat je wil (naar een bepaald record gaan)is wel mogelijk
voorwaarde is dat er in je tabel een numeriek veld is (autonummer is ideaal) en dat er op dat veld een (liefst unieke) index staat
je moet dan specifieeren dat die index gebruikt moet worden,en dan kan je 'seek'-en op die index
ik maak tegen maandag wel een voorbeeldje
er zijn nog wel andere methodes om naar een bepaald record te gaan maar die zijn niet 100% betrouwbaar
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 29 mrt 2010 - 07:46
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hey Jenny,

Een voorbeeldje zou fantastisch zijn, dankuwel hiervoor!
Als ik al op record zou kunnen zoeken (met die index), kom ik er wel uit.

Groetjes,
V.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
JennyOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 29 mrt 2010 - 15:37
Professional Developer


Geregistreerd op: 01-feb-2007
Berichten: 363

Status: Offline
om direct naar de positie van eender welk record te springen
voorwaarde is uiteraard dat er een veld is dat voor elk record per 1 oploopt
en dat het veld uniek geindexeerd is, en dat die index de aktieve index is
in onderstaand voorbeeld is dat veld een long met naam 'ID' en de naam van de tabel is "Klant"
Visual Basic code:

Sub Doehet()
    Dim db As DAO.Database
    Dim rs As DAO.Recordset
    Set db = CurrentDb
    Set rs = db.OpenRecordset("Klant", dbOpenTable)
    rs.Index = "ID"
    rs.Seek "=", 610
    'altijd checken of het record gevonden is
    'wordt een record niet gevonden, dan is de positie van de record-pointer onbepaald
    'als dat een probleem moest zijn, kunt u altijd de record-pointer terug naar een gekende positie brengen
    'met movefirst of movelast of seek naar een bekende positie
    If rs.NoMatch Then
       Debug.Print "Niet gevonden"
       rs.MoveFirst
    Else
       Debug.Print rs!id, rs!naam
    End If
    rs.Close
    Set rs = Nothing
    db.Close
    Set db = Nothing
End Sub

 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 29 mrt 2010 - 15:47
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hey Jenny,

Dat is, en niet overdreven gesteld, fantastisch! wist niet dat het zo simpel was.
Kga er morgen mee aan de slag!

tx!

Groeten,
V.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 30 mrt 2010 - 08:17
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Hey,

met die auto-ID lukt toch niet. Probeer deze toe te voegen, gewoon met de hand via design-view van de tabel, maar lukt niet... "File sharing lock count exceeded. Increase MaxLocksPerFile registry entry" is de boodschap die erop komt.

Maar zou dit rechtstreeks in VBA met SQL willen doen. Dat heb ik al helemaal, tabel wordt gemaakt, maar weet jij hoe ik in SQL dan een autoID-kolom kan creëren?

tx,
V.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
The_VicarOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 30 mrt 2010 - 08:36
Senior Developer


Geregistreerd op: 28-apr-2008
Berichten: 106

Status: Offline
Ondertussel lukt het wel met de autonummer. Heb een functie op't net gevonden waar dit mee lukt.

Nu nog opsplitsen, maar dat gaat geen probleem zijn. Smile

tx!

V.
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
JennyOffline
Onderwerp: Re: transferspreadsheet GROTE tabel  BerichtGeplaatst: 30 mrt 2010 - 11:22
Professional Developer


Geregistreerd op: 01-feb-2007
Berichten: 363

Status: Offline
tja,je moet altijd in gedachte houden dat een tabel een ongeordende set records is
het systeem van een autonummer aan de tabel geven, zal enkel goed werken als dat autonummer aangemaakt is VOOR de tabel met data gevuld is, en er nooit records in die tabel verwijderd werden, en er nooit een addnew gedaan is zonder een update
een autonummer toevoegen aan een reeds gevulde tabel, geeft geen enkele garantie dat opeenvolgende autonummers overeenkomen met de volgorde waarin records aan de tabel toegevoegd werden
als je achteraf autonummers toevoegd, en als er in die tabel nooit records verwijderd werden, zal dat WAARSCHIJNLIJK wel overeenkomen, maar zekerheid is er nooit
als je zekerheid wil hebben om naar een positioneel bepaald record te gaan, dan zal je die recordset moeten ordenen met sql 'order by'
en dan kan je naar een positioneel bepaald record gaan
stel je ordend je recordset op datum,en je wil nu naar het positioneel 50ste record gaan:
a)je gaat naar het eerste record: recordset.movefirst
b)je gaat naar het 50ste record: recordset.move 49
en je hebt het positioneel 50ste record te pakken
eventueel kan je ook de absoluteposition eigenschap van een recordset gebruiken
in dat geval kan ik je aanraden van snapshot-type recordsets te gebruiken en geen dynaset-type
info:
http://msdn.microsoft.com/en-us/library/bb221051.aspx
http://msdn.microsoft.com/en-us/library/bb221121.aspx
http://msdn.microsoft.com/en-us/library/bb243792.aspx
 
 Bekijk gebruikers profiel Stuur privé bericht  
Reageer met quote Naar boven
Berichten van afgelopen:     
Ga naar:  
Tijden zijn in GMT + 1 uur
Plaats nieuw bericht   Plaats Reactie
Vorige onderwerp Printervriendelijke versie Log in om je privé berichten te bekijken Volgende onderwerp
PNphpBB2 © 2003-2007 
 

 
Postnuke - ADODB Database - PHP 4/5 - pnPhpBB2 - Hosting bij Openminds
Met dank aan Jürgen voor de jarenlange inzet van visualbasic.be (anno 21-12-2000)
vbib.be gestart op 1/03/06 (extra vanaf 1/09: vbnet.be en vbdotnet.be)
VBiB is gerelateerd met wintips.be

Nieuwsbrief RSS Feed: backend.php