Access: Iskanje tabele

Preostalo o MS Pisarni
Odgovori
Samo
Prispevkov: 8
Pridružen: Sr Avg 24, 2005 8:40 am

Access: Iskanje tabele

Odgovor Napisal/-a Samo »

Pozdravljeni!

Imam cca. 30 Accessovih (*.mdb) datotek. Vem, da je v eni od njih tabela XX. Ali moram res po vrsti odpirati vse Accessove datoteke, da jo najdem?
Poskusil sem z iskanjem, ki ga ponujajo Okna, pa ni bilo uspeha.

lp Samo
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Pozdravljeni,

Spodaj sem vam napisal makro, ki vam bo v Excelu izpisal VSE tabele v VSEH Accessovih datotekah v izbrani mapi. Makro lahko preprosto popravite tako, da izpiše samo tabelo, ki jo iščete, ali da išče po več mapah....

POMEMBNO: Pred zagonom makra morate ustrezno popraviti pot domape, kjer se datoteke nahajajo. Ne pozabite na znak '\' na koncu niza.

Primer:

Koda: Izberi vse

    Mapa = "C:\Moji podatki\Acess" ' to je napačno!!!
    Mapa = "C:\Moji podatki\Acess\" ' to JE PRAVILNO

Koda: Izberi vse

' www.matjazev.net
' 12.9.2005
Sub DobiSeznamVsehTabel()
    Dim Povezava As ADODB.Connection
    Dim Zapis As ADODB.Recordset
    Dim PovNiz As String
    
    Dim Mapa As String
    Mapa = "C:\Test\"
    
    Dim VsehTabel As Long
    VsehTabel = 1
    
    Dim FName
    FName = Dir(Mapa & "*.mdb")
    
    Do While FName <> ""
        PovNiz = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Data Source=" & Mapa & FName & ";"
        
        Set Povezava = New ADODB.Connection
        Povezava.CursorLocation = adUseClient
        Povezava.Open PovNiz
        
        Set Zapis = Povezava.OpenSchema(adSchemaTables, Array(Empty, Empty, Empty, "Table"))
        
        List1.Cells(VsehTabel, 1).Value = "Mapa"
        List1.Cells(VsehTabel, 2).Value = "Datoteka"
        List1.Cells(VsehTabel, 3).Value = "tabela"
        VsehTabel = VsehTabel + 1

        Zapis.MoveFirst
        While (Not Zapis.EOF)
            List1.Cells(VsehTabel, 1).Value = Mapa
            List1.Cells(VsehTabel, 2).Value = FName
            List1.Cells(VsehTabel, 3).Value = Zapis("TABLE_NAME")
            VsehTabel = VsehTabel + 1
            
            Zapis.MoveNext
        Wend
        
        Zapis.Close
        Povezava.Close
        
        FName = Dir()
    Loop
End Sub
lp,
Matjaž Prtenjak
Administrator
Samo
Prispevkov: 8
Pridružen: Sr Avg 24, 2005 8:40 am

Odgovor Napisal/-a Samo »

Matjaž.
Nimam besed. "Hvala", se sliši kar preskromno, pisati neke eseje hvaležnosti pa zveni čudno.
lp Samo
Samo
Prispevkov: 8
Pridružen: Sr Avg 24, 2005 8:40 am

Odgovor Napisal/-a Samo »

Ponovno pozdravljeni.

Za nepoznavalce, ki bi želeli uporabljati makro, je potrebno zapisati, da morate vključiti ustrezno knjižnico: V VBA urejevalniku izberete Orodja/Sklicevanje in poiščete "Microsoft ActiveX Data Objects x.x Library".

Za moj primer rešitev ni najprimernejša, saj večina Accessovih datotek vsebuje "linkane" tabele. Ker jih makro odpira, moram vnesti geslo. Rešiti pa še moram "crkovanje" makroja v primerih, ko so v Accessovi datoteki zgolj "linkane" tabele.

lp Samo
admin
Site Admin
Prispevkov: 3687
Pridružen: Sr Jul 20, 2005 10:06 pm

Odgovor Napisal/-a admin »

Ja res je :(, potrebno je vključiti še omenjene ActiveX komponente (sem čisto pozabil).

Kar pa se tiče gesel pa ne morem pomagati. Če ima datoteka geslo ga je porebno vnesti, saj če želite seznam tabel je potrebno datoteko odpreti... Začaran krog.
lp,
Matjaž Prtenjak
Administrator
Odgovori