inhoud folder in database zetten

Status
Niet open voor verdere reacties.

JEPEDEWE

Terugkerende gebruiker
Lid geworden
14 jun 2006
Berichten
1.680
Hallo
Ik heb een folder met een 7000 tal gescande documenten.
Binnen access heb ik een tabel met oa een veld "bestandsnaam"
Ik zou nu alle bestandsnamen binnen die folder elk in een afzonderlijke record in die tabel moeten krijgen, zodat ik dus uiteindelijk 7000 records heb met elk de naam van het bestand in het correcte veld
Hoe ga ik te werk?

Bedankt
JP
 
Je kunt het command-line doen en dan in een txt wegschrijven, maar ik gebruik vaak ff een Excel tooltje ervoor.
Ik gebruik het om bij veel files een inhoudsopgave te maken.
Handig in projecten, je hoeft niet alle mappen door om te zien wat er in staat. Ik gebruik ook altijd functionele namen, dus
literatuur als: Pietje-Puk-et-al_Het onderzoek naar de familie Puk_Journal-of-Busy-Families-1999-E39-12-p111-222.docx
Patenten als: De-uitvinder-WO2018-123456789A_een-nieuwe-waterstof-motor.pdf
Als dat nodig is kan het vervolgens ook nog een een database net als jij.

De kolom met de bestandsnamen kun je zo copyen en met plakken speciaal kopieer je de waarden zo in een csv bestand of in een een kladblok bestand met extensie txt die je zo in je tabel importeren kunt. Eea hangt af hoe je jouw database georganiseerd hebt want de naam moet wel in het record komen waar het thuis hoort...
Heb je daar al over nagedacht ? Anders staat bij de 2e bestandsnaam in het record 3 terwijl die in record 2 had moeten staan of in record 7000...

Dus met alleen de namen op een rij krijgen ben je er nog niet.
Hoe ga je dat oplossen?

PS: in de excel file wordt de relatieve locatie ook opgeslagen, dus die geldt alleen in de root van de map waar je deze xls neer zet. Met plakken speciaal ben je die verwijzing kwijt en heb je de pure bestandsnaam, dus 7000 in aantal.....
Het gebruik wijst zich van zelf... lijkt me.
Ik heb er een willekeurig voorbeeld in staan, die wordt overschreven zodat je zelf de locatie invult en de macro laat werken.
Bekijk bijlage Inhoudsopgave.xls
 
Dat kun je prima gelijk in Access doen vanuit een loop met het DIR commando. Vooral niet te ingewikkelde oplossingen bedenken voor simpele problemen :).
 
't is me dan toch een raadsel hoe je dit voor mekaar krijgt hoor
JP
 
Het laatste antwoord is vergelijkbaar met hoe ik het in Excel doe
https://stackoverflow.com/a/38497629
Of je moet uitpluizen hoe Julian daar naar verwijst in https://stackoverflow.com/a/38480843 waar OctaFish waarschijnlijk ook op doelde.

@JEPEDEWE:
't is me dan toch een raadsel hoe je dit voor mekaar krijgt hoor
JP
Ik snap dat.

Bestaan die 7000 records al (wrs niet...?) en welke info staat er al in als ze wel bestaan?

Bestaan ze niet en hoef je alleen de namen en geen mapnamen in nieuw te maken record, neem mijn bestand en plak-speciaal het naar een lege excel file en sla die op als csv en importeer die in Access in het veld waarin je ze wilt hebben. De tabel met de juiste velden met de daarbij behorende definities moet je wel hebben. Dit kost je mss een paar minuten tijd...

Dus het database huis en wat je er mee wilt zou er moeten staan, das wel zo handig.
Je zou wel een kale database ermee aan kunnen maken en daarmee verder gaan bouwen, maar dat is jouw keuze.
Immers het is goed om voor het bouwen van een DB wel goed te weten wat je er later uit wilt halen en dat je dan het er ook zo instopt dat dit zo eenvoudig mogelijk kan. Aan de voorkomt simpel / gestructureerd beginnen houdt later alles veel overzichtelijker al je het aan moet passen.

https://support.office.com/nl-nl/ar...tbestand-d6973101-9547-4315-a8f8-02911b549306
 
De hint van Tardis zou misschien we de oplossing kunnen bieden (#5), alleen heb ik problemen met de sql

Code:
    Dim F As Variant, FSO As Object
    Dim sql As String
    Set FSO = CreateObject("Scripting.FileSystemObject")
    DoCmd.SetWarnings False
    For Each F In FSO.getFolder("z:/archief/werkongeval").Files
        sql = "INSERT INTO Documenten Documenten.Bestandsnaam VALUES ('" & F & "');"
        DoCmd.RunSQL sql
    Next
    DoCmd.SetWarnings True

de "insert" commandolijn is niet correct:
in oorsprong stond er:
Docmd.RunSQL "INSERT INTO table1 ('File Name') VALUES ('" & F & "');"

table1 is bij mij "Documenten"
de veldnaam is "Bestandsnaam"

Ik weet dus niet goed hoe ik die waarden in die lijn kwijt moet op een correcte manier

Verder krijg ik, als bestandsnaam "z:/archief/werkongeval/naamvanhetbestand.pdf"
Ik wil "z:/archief/werkongeval" er niet bij....
Iemand de syntax?

Bedankt
JP
 
Ik zie nog geen werkende oplossingen, dus dan zal ik er maar twee neerzetten. Kan JP kiezen. Ik gebruik de tweede variant, but who cares? ;)
Code:
Sub InvoegenBestand()
Dim f As Variant
    DoCmd.SetWarnings False
    For Each f In CreateObject("Scripting.FileSystemObject").getFolder("z:/archief/werkongeval").Files
        strSQL = "INSERT INTO Documenten (Bestandsnaam) VALUES (""" & Split(f, "\")(UBound(Split(f, "\"))) & """)"
        DoCmd.RunSQL strSQL, DbFailOnError 
    Next
    DoCmd.SetWarnings True
End Sub

Code:
Sub InvoegenBestand()
Dim rs As Recordset, tmp As String
    Set rs = CurrentDb.OpenRecordset("Documenten")
    tmp = Dir("z:\archief\werkongeval\*.*")
    With rs
        Do While Not tmp = ""
            .AddNew
            !Bestandsnaam = tmp
            .Update
            tmp = Dir
        Loop
        .Close
    End With
End Sub
 
Bedankt voor de 2° variant Michel. Ik heb wel de CurrentProject.Path opgenomen zodat het een beetje flexibeler werd.
 
Lijkt mij logisch om een ander startpad te kiezen :). Ik gebruik zelf graag de SpecialFolder MyDocuments, omdat documenten meestal niet bij de db staan. Maar alles mag :).
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan