SQLite -> access en bestanden laden uit verschillende mappen

Status
Niet open voor verdere reacties.

superhoi

Gebruiker
Lid geworden
5 dec 2003
Berichten
22
Ik heb 2 vraagjes:

1. ik moet een tabel uit een sqlite database laden in access, dit gaat via een 30 dagen trial versie van sql data wizard, maar daarna is het dus dokken, weet iemand of hier een goedwerkend gratis grogramma voor is of kan ik dit ook via een vba access programma?

2. ik wil xml data inlezen in access, ik heb al een xsl hiervoor geschreven en die werkt, alleen het probleem is: de bestanden staan in wel 150 mappen in de hoofdir, en de xml bestanden hebben ook weer allemaal een andere naam ( wel dezelfde extensie bt)w, kan access deze mappen doorzoeken en vervolgens de bestanden inladen? 1 voor 1 lukt het goed met de volgende vba code:

Code:
Application.TransformXML DataSource:=JDFDLfile, _
                         Transformsource:=XMLdir & "jd-access2.xsl", _
                         Outputtarget:=XMLdir & "jd-transformed2.xml", Wellformedxmloutput:=True
                         
'nu importeren
Application.ImportXML DataSource:=XMLdir & "jd-transformed2.xml", _
                      ImportOptions:=acAppendData



Alvast bedankt voor jullie hulp!!
 
SQL databases kun je altijd via een ODBC koppeling in Access gebruiken; daar hoef je dus geen licentie voor aan te schaffen. Eventueel kun je nog SQL Server Express overwegen; dat is gratis. En je hebt uiteraard ook nog MySQL als database server.
Je tweede vraag: dat is wel te doen, al moet je dan wel door de mappen kunnen lussen. Ik zo snel niet hoe je de map en de bestandsnaam koppelt; ik vermoed dat je die in een eerder stadium gevuld hebt?
 
nee de bestanden en mappen worden door externe software aangemaakt, hier zit wel enige logica in:

bestandsnaam is ?????????xx-?????-????-??????????.xml -> vaste lengte en op de ? staan nummers en letters. Het bestand staat in map xx in de hoofdmap, dus de laatste 2 nummers/letters voor het 1e platte streepje is de bstandsnaam, verder kunnen er in 1 map meerdere bestanden staan

Ik ga eerst even zoeken hoe het zit met die odbc koppeling (nog geen ervaring mee)
 
Dus als je deze code bekijkt: DataSource:=XMLdir & "jd-transformed2.xml" dan is XMLdir geen variabele? Het is ook geen Datasource string; ik zou dan toch iets verwachten als: DataSource:="C:\Import\" & "jd-transformed2.xml". Om maar een voorbeeldje te geven.
 
de file jd-transformed is de output van de transformatie van xml en tevens de import voor access, JDFDLfile (die dus nu handmatig wordt naamgegeven) is de import file die word omgezet naa jd-transformed2
 
Maar wat is dan XMLdir? Je geeft verder geen map aan...
 
xmldir is trouwens niet zo belangrijk, JDFDLfile is de variabele bestandsnaam die eerst omgezet wordt met Application.TransformXML en daarna word de output van de transform met Application.ImportXML ingelezen.
Voor de volledigheid hier de andere variabelen die geset worden:

JDdir = "F:\Users\Beheerder\Documents\Bedrijf\RCD\EIC\"
JDFDLfile = JDdir & "Documentation\16\4fc0c216-0000-1000-4013-e1e1e118c4c0.xml"

Sorry voor de onvolledigheid ik ben maar huis-en-tuin programeur, als hetmaar werkt ben ik al tevreden.. :)
 
Ik kan dit:
xmldir is trouwens niet zo belangrijk, JDFDLfile is de variabele bestandsnaam die eerst omgezet wordt met Application.TransformXML
niet zo goed rijmen met dit:
het probleem is: de bestanden staan in wel 150 mappen in de hoofdir, en de xml bestanden hebben ook weer allemaal een andere naam ( wel dezelfde extensie bt)w
En nu geef je ook nog eens aan dat je wel degelijk een variabele vult met een locatie:
JDdir = "F:\Users\Beheerder\Documents\Bedrijf\RCD\EIC\"
JDFDLfile = JDdir & "Documentation\16\4fc0c216-0000-1000-4013-e1e1e118c4c0.xml"
Dus wat is nu precies de bedoeling? We kunnen uiteraard geen zinnige hulp geven als je niet duidelijk maakt wat er moet gebeuren.
 
Ok:

1. het basisxml bestand JDFDLfile wordt nu handmatig gevuld als variabele dit zou automatisch moeten gebeuren door access (de 150 mappen dus)
2. daarna zet access met die vba code het basisxml bestand om met behulp van een xsl file (XMLdir & "jd-access2.xsl)dit gebeurd met de code:


Code:
Application.TransformXML DataSource:=JDFDLfile, _
                         Transformsource:=XMLdir & "jd-access2.xsl", _
                         Outputtarget:=XMLdir & "jd-transformed2.xml", Wellformedxmloutput:=True

3. het bestand jd-transformed2.xml in de dirXMLdir is nu aangemaakt
4. nu moet het omgezette bestand (jd-transformed2.xml) worden ingelezen in access:

Code:
Application.ImportXML DataSource:=XMLdir & "jd-transformed2.xml", _
                      ImportOptions:=acAppendData

5. bestand is nu ingelezen

Ik zal ander de vraag nog een keer stellen vergeet de rest:

Hoe kan ik met access vba code xmlbestanden inlezen die in wel 150 submappen staan? Kan access deze mappen doorzoeken de bestandsnamen in een array? zetten en vervolgens de bestanden 1 voor 1 inladen en hoe zou dit dan moeten?

Ik hoop dat je me kunt helpen
 
Je kunt met DIR door een map(penstructuur) lopen. Hier een voorbeeldje:

Code:
    JDdir = "F:\Users\Beheerder\Documents\Bedrijf\RCD\EIC\"
    XMLdir = Dir(JDdir, vbDirectory)
    Do While XMLdir <> ""
        If XMLdir <> "." And XMLdir <> ".." Then
            If (GetAttr(JDdir & XMLdir) And vbDirectory) = vbDirectory Then
                JDFDLfile = Dir(XMLdir & "\*.xml")
                Do While JDFDLfile <> ""
                    On Error Resume Next
                    'importeren
                    JDFDLfile = Dir
                Loop
            End If
        End If
        XMLdir = Dir
    Loop

Met DIR kun je dus zowel mappen als bestanden inlezen. Ik zou zeggen: stoei er eens mee...
 
Het lukt aardig ik krijg het eerste bestand in de eerste map, maar hij loopt niet door naar de 2e map hij blijft oneindig in de eerste map hangen. Ik vroeg me daaromaf: kun je eigenlijk wel 2 verschillende dir functies aanroepen in dezelfde lus?? In begin gaat t goed, map . en map .. slaat ie over, dan gaat hij naar map 00 noemt de naam van het xml bestand in de map maar
gaat niet naar de volgende map.. :(

ik heb wel JDFDLfile = Dir(XMLdir & "\*.xml") aangepast naar JDFDLfile = Dir(JDdir & XMLdir & "\*.xml") anders deed ie t niet.
 
Je hebt nog gelijk ook; je kunt DIR blijkbaar niet meerdere keren tegelijk aanroepen. Gelukkig zitten we niet voor één gat gevangen :) Met een tussenstapje kun je alle mappen in een matrix variabele zetten, die je vervolgens als basis kunt gebruiken voor verdere verwerking. Ik heb er nu dit van gemaakt:

Code:
Option Explicit
Option Base 1
Dim XMLDir() As Variant
Dim x As Integer

Private Sub Knop0_Click()
Dim JDdir As String, XMLDir As String, JDFDLfile As String
Dim i As Integer, y As Integer
Dim tmpFile() As Variant
    
    x = 0
    GetSubDir "H:\Afbeeldingen\"
   
    For i = LBound(XMLDir) To UBound(XMLDir)
        JDFDLfile = Dir(XMLDir(i) & "\*.jpg")
        Do While JDFDLfile <> ""
            y = y + 1
            ReDim Preserve tmpFile(y)
            tmpFile(y) = XMLDir(i) & "\" & JDFDLfile
            JDFDLfile = Dir
        Loop
    Next i

End Sub

En die roept dan deze functie aan om de submappen eerst in een matrix te zetten:

Code:
Function GetSubDir(ByVal sDir)
Dim oDir, oSub
Dim oFS As Object

    Set oFS = CreateObject("Scripting.FileSystemObject")
    Set oDir = oFS.GetFolder(sDir)
    For Each oSub In oDir.SubFolders
        x = x + 1
        ReDim Preserve XMLDir(x)
        XMLDir(x) = oSub.Path
        GetSubDir oSub.Path
    Next oSub

End Function

Om het een beetje overzichtelijk te houden, zet ik bestanden uit de mappen dus in een nieuwe matrix, waarbij ik de naam van de map samenvoeg met de bestandsnaam. Die tweede matrix kun je dan gebruiken om je bestanden te importeren.
Wellicht kun je hier weer verder mee?
 
Het is al opgelost! in ieder geval al bedankt voor alle hulp, ik ga me nu concentreren op die ODBC koppeling, hier heb ik helemaal geen kaas van gegeten. Ik heb inmiddels SQL server express van micro$oft geinstalleerd, maar loop nog vast op al die instellingen... DSN, source driver.., weet je hier misscien een goede snelle handleiding voor dummys zoeals ik? heb geen zin/tijd om eerst 3 boeken door te lezen.. :) Ik moet dus lokaal een sqlite db koppelen met access via sql server express
 
Da's nou een gebied waar ik niet zoveel ervaring mee heb. Je zou hier eens kunnen kijken. Je wekt trouwens de indruk dat je zelf een oplossing hebt gevonden; daar ben ik dan wel benieuwd naar! En de overige lezers denk ik ook ;)
 
Oh ja sorry:o, had nog wat verder gezocht op internet en er stond inderdaad een functie waarmee ik het heb opgelost ik zet hieronder de link en de code: Het zal waarsch wel overeenkomen met jouw optie, maar ik heb hem al zo gebouwd..

http://www.ammara.com/access_image_faq/recursive_folder_search.html


Code:
Dim colFiles As New Collection
RecursiveDir colFiles, JDFDLdir, "*.xml", True



Code:
Public Function RecursiveDir(colFiles As Collection, _
                             strFolder As String, _
                             strFileSpec As String, _
                             bIncludeSubfolders As Boolean)

    Dim strTemp As String
    Dim colFolders As New Collection
    Dim vFolderName As Variant

    'Add files in strFolder matching strFileSpec to colFiles
    strFolder = TrailingSlash(strFolder)
    strTemp = Dir(strFolder & strFileSpec)
    Do While strTemp <> vbNullString
        colFiles.Add strFolder & strTemp
        strTemp = Dir
    Loop

    If bIncludeSubfolders Then
        'Fill colFolders with list of subdirectories of strFolder
        strTemp = Dir(strFolder, vbDirectory)
        Do While strTemp <> vbNullString
            If (strTemp <> ".") And (strTemp <> "..") Then
                If (GetAttr(strFolder & strTemp) And vbDirectory) <> 0 Then
                    colFolders.Add strTemp
                End If
            End If
            strTemp = Dir
        Loop

        'Call RecursiveDir for each subfolder in colFolders
        For Each vFolderName In colFolders
            Call RecursiveDir(colFiles, strFolder & vFolderName, strFileSpec, True)
        Next vFolderName
    End If

End Function


Public Function TrailingSlash(strFolder As String) As String
    If Len(strFolder) > 0 Then
        If Right(strFolder, 1) = "\" Then
            TrailingSlash = strFolder
        Else
            TrailingSlash = strFolder & "\"
        End If
    End If
End Function
 
Voor SQL server Express kun je wat gratis eBooks downloaden; kijk eens hier, of hier zou ik zeggen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan