Access gegevens in laten lezen

Status
Niet open voor verdere reacties.

jelleruben

Gebruiker
Lid geworden
11 nov 2006
Berichten
443
Hallo allemaal,

Is het mogelijk om door Access een directery in
te laten lezen, en te bewerken? Voorbeeld
ik heb in een map PDF bestanden staan.

Deze bestandsnamen zien erzo uit:

Ruben 123456.pdf

Nu wil ik graag (als het mogelijk is) dat
Access (met een druk op een button) de bestanden inleest
en in een tabel zet. Maar dan ook
dat de naam en het nummer in een apparte kolommen
word gezet.

Is dit te realiseren??

Met vriendelijke groet,

Jelle Ruben
 
Hoi Jelle,

Wat je wilt is zonder meer mogelijk. Ik neem aan, dat je bestandenlijst op een gestandaardiseerde manier is opgebouwd? Dus één spatie in de bestandsnaam?
Je kunt dan bijvoorbeeld een procedure maken die met het DIR commando de bestandsnamen inleest, waarna je met SPLIT de bestandsnaam splitst op basis van de spatie, (of met INSTR, LEFT etc.) de gesplitste gegevens toewijst aan een (matrix) variabele, en vervolgens met een INSERT INTO query de waarden toevoegt aan een tabel.
Deze procedure kun je dan bijvoorbeeld met een macro, of met een knop op een formulier laten draaien.
 
Okay ben blij dat het mogelijk is, maar moet dit in VB omgeving worden geschreven worden?
Of is dat ook anders mogelijk, ik heb helaas geen verstand van VB, het enige wat ik daarmee kan, is de
codes een beetje aanpassen, naar mijn smaak. Maar echt schrijven lukt me niet..
 
Ik zal een voorbeeldje voor je maken, maar dat wordt wel vanavond...
 
In dit voorbeeld zit een formulier met een knop die wel doet wat je wilt. Je kunt een map aanwijzen met PDF-jes, die vervolgens in tweeën worden gesplitst (op basis van spaties) en de eerste twee waarden worden ingelezen in een aan te maken tabel. Die wordt ook door de procedure aangemaakt overigens.
 

Bijlagen

Heel erg bedankt, ik zal eens kijken hoe dit werkt, maar vraagjes.

1.
Als ik een directory inlees. Met 380 bestanden.
Dan krijg ik wel bij elke record de vraag:

U staat op het punt 1 rij(en) toe te voegen.


En moet ik wel elke keer op Ja klikken, Is het mogelijk om dit om uit te schakelen?

2.
Als ik bij het zelfde schermpje Nee in klik krijg ik een fout melding:

Fout 2501 tijdens uitvoering:

De actie RunSQL is geannuleerd

Als ik op fout opsporing klik dan geeft hij een fout op regel 55; en DoCmd.RunSQL (strSQL) is dan geel.

3.
Stel dat ik misschien, een kolom er bij wil laten zetten (ivm andere gegevens) is dat dit stukje wat ik moet bewerken?

sArray() = Split(Left(strFile, InStr(1, strFile, ".pdf") - 1), " ")
strSQL = "INSERT INTO Bestanden (BeginTekst, EindTekst) " _
& "VALUES ('" & sArray(0) & "', '" & sArray(1) & "')"


Of moet het helemaal anders?
 
Laatst bewerkt:
Puntje 1 en 2:
Doordat je op Nee klikt, wordt het uitvoeren van de actiequery geannuleerd. Je zou dus elke keer op Ja moeten klikken. Zelf heb ik de meldingen bij actiequeries standaard uit staan, om die vraag te voorkomen. <Extra>, <Opties>, tabblad <Bewerken/Zoeken>, optie <Actiequeries> in kader <Bevestigen> uitzetten.

Je kunt ook het volgende commando boven de DO WHILE opdracht zetten:
DoCmd.SetWarnings False

En onder de LOOP zet je dan:
DoCmd.SetWarnings True

aD 3.
Stel dat ik misschien, een kolom er bij wil laten zetten (ivm andere gegevens) is dat dit stukje wat ik moet bewerken?
De code splitst de bestanden op basis van een spatie. Vervolgens worden de eerste twee waarden aan de tabel toegevoegd. Wil je een derde kolom, dan ziet de code er zo uit:
Code:
sArray() = Split(Left(strFile, InStr(1, strFile, ".pdf") - 1), " ")
strSQL = "INSERT INTO Bestanden (BeginTekst, EindTekst, DerdeKolom) " _
& "VALUES ('" & sArray(0) & "', '" & sArray(1) & "', '" & sArray(2) & "')"
 
Heel erg bedankt voor je hulp,

voor de derde kolom, moet ik dan ook deze regel aanpassen?

strSQL = "CREATE TABLE Bestanden ([BestandID] COUNTER CONSTRAINT [BestandID] PRIMARY KEY, [BeginTekst] TEXT(20), [EindTekst] TEXT(10))"
 
Ja, want daar komt dan ook een veld bij. Overigens werkt de routine ook als je hem één keer hebt uitgevoerd. In dat geval is de tabel al aangemaakt, en kun je hem vanuit het tabelontwerpscherm aanpassen.
 
Hallo ik heb even geprobeerd met de derde kolom. Maar er gaat wat fout, alleen ik zie het even niet. Weet jij zo wat hier fout is?

Code:
On Error Resume Next
strSQL = "CREATE TABLE Bestanden ([BestandID] COUNTER CONSTRAINT [BestandID] PRIMARY KEY, [BeginTekst] TEXT(20), [DerdeKolom] TEXT(20), [EindTekst] TEXT(10))"
DoCmd.RunSQL (strSQL)
On Error GoTo 0

strPath = SelectFolder("Select Folder", "")
If Len(strPath) Then
    Me.Documents = strPath
Else
    MsgBox "Cancel was pressed"
End If

strFile = Dir(strPath & "\*.pdf")
Do While strFile <> ""
    
sArray() = Split(Left(strFile, InStr(1, strFile, ".pdf") - 1), " ")
[COLOR="darkred"]strSQL = "INSERT INTO Bestanden (BeginTekst, EindTekst, DerdeKolom) " _
& "VALUES ('" & sArray(0) & "', '" & sArray(1) & "', '" & sArray(2) & "')"[/COLOR]
    
    DoCmd.RunSQL (strSQL)
    strFile = Dir
Loop

EDIT:

Ik ben erachter, in de document namen moet echt een 2de spatie aanwezig zijn. voor de derde kolom..
 
Laatst bewerkt:
Wat er fout zou kunnen gaan, (ging bij mij ook een paar keer fout) is dat er geen waarde zit in de derde variabele sArray(2). En dat komt dan weer doordat er in de bestandsnaam maar één spatie zit bijvoorbeeld. Het gaat ook fout als je helemaal geen spaties hebt in de bestandsnaam, want dan gaat het al fout bij variabele sArray(1).

Door de blauwe aanpassing te maken stel je het aantal variabelen in op het minimaal vereiste aantal (3 in dit geval)

Code:
DoCmd.SetWarnings False
Do While strFile <> ""
    sArray() = Split(Left(strFile, InStr(1, strFile, ".pdf") - 1), " ")
[B][COLOR="blue"]    If UBound(sArray) < 2 Then ReDim Preserve sArray(2)[/COLOR][/B]
    strSQL = "INSERT INTO Bestanden (BeginTekst, EindTekst, ExtraKolom) " _
        & "VALUES ('" & sArray(0) & "', '" & sArray(1) & "', '" & sArray(2) & "')"
    DoCmd.RunSQL (strSQL)
    strFile = Dir
Loop
DoCmd.SetWarnings True
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan