Avatar billede hnto Nybegynder
19. maj 2011 - 13:52 Der er 11 kommentarer og
1 løsning

importere fil til access

denne er lidt tricky...

man kan via den kendte dos kommande "re-route" gemme indholdet af en mappe som en fil. feks:

dir c:\billeder\*.jpg /s /b > c:\billeder.txt

kan man ikke på en smart måde køer et lignende script fra access der henter filens data ind i en tabel. ?
Avatar billede neoman Novice
19. maj 2011 - 15:42 #1
ved at bruge Shell for at køre et script

men ellers ved at bruge Dir til at loope inde i access over en mappe
Avatar billede hnto Nybegynder
23. maj 2011 - 07:52 #2
den skal du lige komme med et eksempel på... be om :-)
Avatar billede Slettet bruger
23. maj 2011 - 22:46 #3
Den med dir:

Følgende udtryk evaluerer til en liste som dos kommandoen:

arr2list(dosdirObOs("c:\billeder\",".jpg"),vbcrlf)

givet:

Function dosdirObOs(dirSlash, filter)
    Dim fn, subD
    fn = Dir(dirSlash & "*.*", vbDirectory)
    With CreateObject("Scripting.FileSystemObject")
        While Len(fn)
            If fn <> "." And fn <> ".." Then
                If .FolderExists(dirSlash & fn) Then
                    addS2list subD, dirSlash & fn & "\"
                Else
                    If endswith(fn, filter) Then
                        addS2list dosdirObOs, dirSlash & fn: End If: End If: End If
            fn = Dir(): Wend: End With
    If Not IsEmpty(subD) Then For Each fn In subD: addS2list dosdirObOs, dosdirObOs(fn, filter): Next
End Function

Function endswith%(str, endS)
    endswith = (Len(str) - Len(endS) + 1) = InStrRev(str, endS)
End Function

'add simple types to list
Sub addS2list(V, i)
    Dim ai
    On Error Resume Next
    If IsArray(i) Then
        For Each ai In i
            addS2list V, ai: Next
    Else
        ReDim Preserve V(UBound(V) + 1)
        If err.Number = 13 Then ReDim V(0)
        If IsObject(i) Then Set V(UBound(V)) = i Else V(UBound(V)) = i
    End If
End Sub
Avatar billede Slettet bruger
23. maj 2011 - 22:58 #4
well - hvis det skulle betyde noget er her lige den jeg glemte i #3:

Function arr2list(arr, Optional delimit = ",", Optional upper, Optional lower)
    Dim delim As New ListSep, i%
    delim.char = delimit
    If IsMissing(lower) Then
        lower = 0: End If
    If IsMissing(upper) Then
        upper = UBound(arr): End If
    For i = lower To upper
        arr2list = arr2list & delim & arr(i): Next
End Function
Avatar billede Slettet bruger
23. maj 2011 - 23:10 #5
shit - den anvender LispSep klassen som måske har en default method som måske er hacket ind fra fil (Attribute VB_UserMemId) i vba editoren

Option Compare Database
Option Explicit
Private str$
Private isFirst As Boolean
Private Sub Class_Initialize()
    isFirst = True
    str = ","
End Sub
Property Get char$()
    If isFirst Then
        char = ""
        isFirst = False
    Else
        char = str: End If
End Property

Property Let char(c$)
    str = c
End Property
Avatar billede neoman Novice
24. maj 2011 - 08:01 #6
Private Sub cmdDir_Click()
    Dim myFile As String
    myFile = Dir("C:/")
    Do While myFile <> ""
        Debug.Print myFile
        myFile = Dir()
    Loop
End Sub

for detaljer se Dir i Access Help
Avatar billede neoman Novice
24. maj 2011 - 08:02 #7
ovenstående printer ikke den sidste fil - men det ser du sikkert selv
Avatar billede neoman Novice
24. maj 2011 - 08:09 #8
og for Shell se ligeledes Shell i Access Help.

Er ikke sikker på  at DOS redirect ">" også kører fra Shell - prøv.

En lille fælde: Shell kører asynkront, så blot fordi Access-koden kører den næste linie, så er det ikke sikkert at shell-scriptet har kørt færdigt. Du kan Google efter en meget mere kompleks ShellWait, som først kommer tilbage når den er færdig.
Avatar billede hnto Nybegynder
24. maj 2011 - 08:35 #9
brugerekspert:
jeg må være ærlig og sige at jeg ikke fatter 70% af ovenstående vba scfript procedurer. derfor vil det være svært for mig at indsætte / erstatte parametre i dit script. Jeg er ikke programmør :-)

hvordan ser det samlede billede ud som jeg kan ligge på en knap i en formular hvis min sti er som anført og tabellen den skal hælde data i hedder "billeder" i databasen.?
Avatar billede Slettet bruger
25. maj 2011 - 10:16 #10
Hej hnto
Tillader mig også at bruge forumet som plads til udveksling af ideer - uden hver gang at leve op til en agenda om at hjælpe.
En enkelt løftet pegefinger: Eksperimenter og konkluder! ;)

Anyway: (gider ikke teste - indeholder 'pladsholder' navne)

dim fn
for each fn in dosdirObOs("c:\billeder\",".jpg")
  currentdb.execute "insert into tabel(fref) values('" & fn & "')"
next
Avatar billede hnto Nybegynder
24. juni 2011 - 13:15 #11
brugerekspert svare hvis point ønskes
Avatar billede hnto Nybegynder
28. januar 2012 - 12:29 #12
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester