Flatfile inlezen in Access

Status
Niet open voor verdere reacties.

Mark Boerkamp

Gebruiker
Lid geworden
13 mrt 2010
Berichten
70
Hoi,

Ik heb het volgende probleem, ik krijg dagelijks een file binnen die wordt ingelezen in de database (Oracle), dit is een update file die automatisch de prijzen van artikelen aanpast, historisch wordt deze data maar 5 dagen bewaard.

Wat ik zou willen is dat ik over een langere periode wil terugzoeken wat de prijs is geweest, ik wil daarom de file inlezen in een Access database.

De file is opgebouwd uit een aantal regels:

7140 ITEM
7140 CODE ==> deze regel komt niet altijd voor
5118 PRIJS
6314 999 ==> deze regel sluit het blok (waarna het volgende item komt)

In de Excel file geef ik een voorbeeld zoals de file eruit ziet, vertaald naar een Access dayabase tabel, ik zou graag willen weten of het mogelijk is om de file in te lezen in Access tabel zonder handmatige actie (het gaat om enkele duizenden items per dag), de file wordt aangeleverd als .DAT bestand maar die kan ik zonder problemen importeren in Access.

Ik hoop dat het een beetje duidelijk is en ben benieuwd of iemand me in de richting van een oplossing kan helpen.

Alvast bedankt !

Groet, Mark

Bekijk bijlage HM vb 1.xls
 
Dat is wel te doen. Je zult in een procedure eerst het databestand moeten inlezen. Daarvoor zou ik een matrix gebruiken, zodat je na het inlezen al een tabelvorm hebt ingelezen. Vervolgens zou ik deze matrix weer uitlezen in een recordset, en toevoegen aan je historietabel. Mijn vraag is nog of je het CODE ved nog ingelezen wilt hebben of niet. In je Excel voorbeeld heb je 'm er niet bijzitten.
 
Hoi Michel, dank voor je antwoord.

Als ik het goed begrijp wil je de file compleet inlezen in een tabel, daarna middels een recordset toevoegen aan de historytabel, klinkt logisch alleen weet ik niet precies hoe het werkt met een recordset.

Ik weet niet precies wat je bedoeld met het CODE veld, ik heb in sheet 2 een voorbeeld toegevoegd van een originele file waar alle waardes in staan, maakt het voor jouw hopelijk wat duidelijker.

Groet,
Mark.

Bekijk bijlage HM vb 2.xls
 
Je hebt 'm (geloof ik) bijna begrepen... Het idee is om de excel gegevens rij voor rij in te lezen, en in een tijdelijke matrixvariabele op te slaan. Hierbij worden de gegevens a.h.w. van verticaal naar horizontaal vertaald. Dit gebeurt op basis van het veld [6314] dat de waarde 999 heeft. Daarbij kun je nog bepalen of je de records eindigt op basis van de veldnaam (6314) of de waarde ervan (999). Vervolgens wordt die matrix, die de vorm van een record heeft, toegevoegd aan je tabel.
Je geeft een veld aan met de naam 7140 CODE; deze komt niet altijd voor zeg je. Vandaar mijn vraag: wil je die wel of niet inlezen?
 
Nee, laat die kunnen we eigenlijk wel achterwege laten, het gaat me alleen om het item en de prijs.

Groet, Mark
 
Ik zal er een voorbeeldje van maken.
 
Ik begrijp 'm nu niet meer; in je eerste voorbeeldje had je een paar rijen, met daarin je velden en je sluitcode. Nu heb je een bestand met 125 rijen, waar maar 3 keer een sluitcode [6314 999] in is te vinden. Betekent dit dat je in het voorbeeld maar 3 records hebt, met zo'n 40 velden? En zo ja, welke velden wil je dan in de db hebben?
 
Hoi Michel,

In het eerste voorbeeld had ik alle overbodige velden weggelaten, het 2e voorbeeld laat het oorspronkelijke volledige bericht zien.

Mijn idee was om het bericht handmatig te manipuleren zodat er een file overblijft met de volgende regels, dan zou het als een bericht 3 items bevat (zoals in het voorbeeld) als volg uitzien:

7140 ITEM
7140 CODE
5118 PRIJS
6314 999
7140 ITEM
7140 CODE
5118 PRIJS
6314 999
7140 ITEM
5118 PRIJS
6314 999

Letop, in de 3e blok zit maar 1 keer de waarde 7140 (alleen de prijs, geen code), in het oorspronkelijke bericht welke 1000 "blokken" kan bevatten komt de waarde
7140 CODE soms wel en soms niet voor, ik hoop niet dat dit een probleem is.

Wat ik in de DB wil zien is 7140 ITEM, 5118 PRIJS, Filenaam en Datum/tijd wanneer de file is gegenereerd (als de 2 laatste waarde's een probleem is kan ik deze handmatig toevoegen)

Mocht het niet duidelijk zijn dan laat het maar weten.

Groet,

Mark
 
En de laatste twee gegevens staan in de kolommen F en G? En van de cellen met code 7140 wil je dus de cellen zien waar de tekst <> "7140 CODE" is?
 
Hoi Michel,

We laten de Oracle database aanpassen zodat historische data wordt vastgelegd, (wederom) bedankt voor je hulp !

Groet,
Mark
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan