Excel gesorteerd inlezen in ms access

  • Onderwerp starter Onderwerp starter Jedi
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

Jedi

Terugkerende gebruiker
Lid geworden
13 mrt 2008
Berichten
1.103
Het lukt me om een Excelblad in te lezen in Acces.
Echter blijken de ingelezen gegevens gesorteerd te zijn volgens een tabel in Excel.
Ik krijg dit echter niet gewijzigd.

Ook al sorteer ik Excel anders en sla het op, in Access blijft het resultaat hetzelfde.

Hoe krijg ik het voor elkaar, dat Excel ingelezen wordt van boven naar beneden, ongeacht de inhoud van de velden ?

(ik heb het excelbestand gesorteerd op achternaam ,maar na importeren blijkt het op postcode gesorteerd te staan).

Achteraf in Ms access handmatig te sorteren gaat niet, want de rijen krijgen een volgnummer in de volgorde dat ze ingelezen worden.

Ik heb dit gebruikt om Excel in te lezen:
Dim db As DAO.Database
Set db = CurrentDb
On Error Resume Next: db.TableDefs.Delete "tblImport": On Error GoTo 0
db.TableDefs.Refresh
DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadsheetType:=acSpreadsheetTypeExcel12, _
TableName:="deelnemers", _
FileName:="C:\Roeiers.xlsx", _
HasFieldNames:=True, _
Range:="deelnemers!A:Z"

db.Close: Set db = Nothing
 
Laatst bewerkt:
Achteraf in Ms access handmatig te sorteren gaat niet, want de rijen krijgen een volgnummer in de volgorde dat ze ingelezen worden.
Blijkbaar heeft het concept 'relationele database' nog weinig betekenis voor jou, want in Access is het totaal niet boeiend hoe een tabel wordt geïmporteerd. Wat maakt het uit dat ze worden ingelezen op volgorde van postcode? Of Achternaam? Of aantal lege schoenendozen? Sowieso heeft het gebruik van een importtabel als werktabel al grote nadelen, want je hebt geen enkele invloed over de veldeigenschappen, die maar zelden correct worden meegenomen. Zo worden alle numerieke velden voorzien van de veldlengte 'Dubbele precisie' waar 'Lange integer' meestal veel wenselijker is. Maar een importtabel heeft de gegevens dan wel op een bepaalde manier ingelezen, de sortering is echt wel aan te passen. En als je zelf geen Autonummerveld toevoegt (en waarom zou je? normaal gesproken importeer je de gecontroleerde importtabel vervolgens in je echte datatabel) heb je ook niks te maken met de 'regelnummers'.
Kortom: ik snap a) je probleem, en b) je werkwijze niet.
 
Ik gelukkig wel.
Stel dat ik 3 deelnemers heb.
Een Ford, een Opel en een Mazda
In Excel is de volgorde Opel, Mazda, Ford
In Access krijgen ze na inlezen automatisch een startnummer toegewezen: Opel 1, Mazda 2 en Ford 3
Als nu echter Ford als eerste bovenaan staat, dan krijgt Ford 1 ipv de Opel, die nu 3 krijgt. (sorteer op naam)
 
En dit moet je stelling verduidelijken? Een ID is niet meer dan een Identifier, heeft verder geen enkele betekenis anders dan dat je op basis daarvan weet dat Ford 1 of 3 is. Boeien... Het gaat er om wát je verder met die gegevens doet, en daar maakt het ID echt niets bij uit.
 
wie heeft het hier over het ID ? het is een veld met als naam "startnummer"

Trouwens, het ID kun je óók als rangnummer gebruiken hoor, maar ik begrijp dat ik niet bij jou moet zijn voor goed advies..........
 
Dat begrijp je dan toch verkeerd... het helpt als je wat duidelijker uitlegt wat je bedoelt, want ik snap er niet zo bar veel van. Maar als je liever wacht op antwoord van iemand anders, dan haak ik met alle plezier af. Het is namelijk jouw probleem, niet het mijne :).
 
Ik heb mij in mijn antwoord gebaseerd op deze tekst:
In Access krijgen ze na inlezen automatisch een startnummer toegewezen:
Als je een tabel importeert, neemt Access de waarden over uit die importgegevens. Er wordt nooit automatisch een extra nummer toegewezen, dat moet je echt zelf doen. Mijn gedachte was dus: je hebt een Autonummerveld toegevoegd voor die 'automatische' nummering. Ik noem dat veld ID, jij noemt het [Startnummer], maar de naam is uiteraard totaal niet interessant. Dus in het vervolg noemen we dat dan [Startnummer].

Maar van tweeën één: of je hebt, zoals ik dus vermoed, een Autonummerveld gebruikt voor de nummering (dat je [Startnummer] noemt), ofwel je hebt een eigen functie gemaakt die het veld [Startnummer] toevoegt aan de tabel, en vervolgens de startnummers genereert. In het eerste geval ben je de sjaak, want omdat Access een relationele database is, heb je weinig controle over hoe gegevens in een tabel komen te staan. Al zou Access normaal gesproken wel degelijk de volgorde moeten aanhouden van het Excel bestand, maar daar gaat het nu even niet over.
In het tweede geval waarbij je dus een functie hebt die het veld maakt en vult, heb je wel degelijk invloed op de nummers, want in die functie moet je de recordset van de import tabel openen, en daarbij kun je de sortering dus wél opgeven. Het vullen van de startnummers gebeurt dan op basis van de door jou gebruikte sortering.

De makkelijkste oplossing (en in dit geval de juiste, lijkt mij) is echter om je Excel tabel aan te passen. Zodra een veldgegeven intrinsiek bij een bepaalde record hoort, zoals bij jou de startnummers dus bij de merken horen, dan is het veel handiger om die startnummers al in Excel te genereren (al dan niet met een formule). Als je dan vervolgens de hele Excel tabel importeert, zitten de startnummers daar gewoon bij als onderdeel van de records. En heb je dus exact wat je wilt bereiken.
Velden achteraf toevoegen aan een importtabel kan dus wel, mits je daar goed over nadenkt.
 
Kijk, dát is een antwoord waar ik wat aan heb. :thumb:

Al een rangorde tabel toevoegen in Excel leek mij ook de beste oplossing. Het moet echter door iemand anders gebeuren en het is maar de vraag of die weet hoe dat te doen.
Maar goed, dat uitleggen zal misschien makkelijker zijn dan het gesorteerd importeren in Access.

Dankjewel voor deze uitleg.
 
Laat niet onverlet dat je in mijn ogen een incomplete vraag stelt, althans een vraag met veel te weinig gegevens om een goed gefundeerd antwoord te geven. Om er een paar te noemen:
1. Waarom krijg je de Excel tabel niet correct ingelezen? Ik heb daar nooit problemen mee gehad
2. Waarom importeer je de importtabel niet in een echte correct ingerichte datatabel?
3. Hoe genereer je nu dat (verkeerde) startnummer?
Een volgnummer (=startnummer in jouw geval) kun je namelijk heel simpel met een formule in een query laten genereren. Maar ik vermoed dat je die truc niet gebruikt.
Maar ik heb geen idee wat je nu precies aan het doen bent met je db, en wat je wilt bereiken. En of dat dus niet veel handiger kan dan wat je zelf aan het brouwen bent.
 
1. Waarom krijg je de Excel tabel niet correct ingelezen?

Ja dat vraag ik me dus ook af.

2. Waarom importeer je de importtabel niet in een echte correct ingerichte datatabel?

Ik heb op internet gezocht en daar hetgene gebruikt wat er als antwoord gegeven werd.
Kan het ook anders dan ?

3. Hoe genereer je nu dat (verkeerde) startnummer?

Door het aan het excelbestand toe te voegen.

°°°
Ik probeer het nog een keer simpel uit te leggen (hoop ik)
Stel, ik heb 100 mensen in een excel bestand.
De eerste 50 van excel komen in groep 1 en de tweede 50 van excel in groep 2.
Dan is het fijn als bij het overbrengen naar Access de volgorde wordt aangehouden, anders komen mensen in de verkeerde groep.
 
Nu leg je in mijn ogen weer een andere vraag voor, want het gaat er dus niet om dat elke rij in Excel (en je Access tabel) een uniek nummer moet krijgen , zoals je eerder aangaf.
In Excel is de volgorde Opel, Mazda, Ford
In Access krijgen ze na inlezen automatisch een startnummer toegewezen: Opel 1, Mazda 2 en Ford 3
Als nu echter Ford als eerste bovenaan staat, dan krijgt Ford 1 ipv de Opel, die nu 3 krijgt.
Maar het gaat dus om groepen van (blijkbaar) 50 personen die je bij elkaar wilt houden. Dus 50 mensen (of auto's?) krijgen groep 1, de volgende 50 groep 2 etc. Dat is een heel andere vraag...
Dat kan je nog steeds in Access doen overigens.

ad 2: een importtabel is prima als tussenstap, maar niet geschikt als 'werktabel' omdat de gegevenstypes van de verschillende velden vanuit de import zelden het goede zijn. Daarom maak ik altijd een vaste tabel aan die alle goede instellingen heeft, en importeer ik de importtabelrecords daar naar toe. En dan heb je ook geen problemen met de nummering meer.
 
En kan dat dan automatisch ?

handmatig lukt me wel, maar het is d ebedoeling dat het automatisch gaat.
 
Alles dat je handmatig doet, kun je automatiseren. Dus dit ook :).
 
Jawel, maar de vraag is dus: hoe.
 
Daarvoor heb ik een voorbeeldje nodig, dus de db met een Excel bestandje dat je wilt importeren. Uiteraard met dummy gegevens, want het gaat niet om de data, maar om de procedures. Want ik snap nog steeds niet wat je nu in Access met die tabel wilt doen dat je níet in Excel kan.
 
Gestuurd.

Die importfout heb ik niet in het origineel, dus negeer dat maar. ;-)

De code zal wel gruwen voor je zijn, maar voor mij werkt het.
 
En zo wacht ik nog steeds op antwoord. :confused:
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan