Visual Basic - Script con vbs de Conexión a Tabla de Access y ejecución de consulta

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

Script con vbs de Conexión a Tabla de Access y ejecución de consulta

Publicado por Germán (5 intervenciones) el 20/01/2016 16:04:40
Buenas tardes,

Tengo un gran problema, necesito sacar unos datos de unas BBDD de access 2003. Serían sobre 300, el problema es que se muy poco de vbs, pero creo que sería la mejor forma de automatizar un proceso en este caso.

Las bbdd estan en un directorio y a su vez cada una en su subdirectorio correspondiente.

La idea:

- Crear un script en vbs, que se conecte a una BBDD, ejecute una consulta y el resultado lo saca a una excel, se desconecta de esa BBDD y se conecta a la siguiente, y asi sucesivamente hasta hacerlo con las 300 bbdd.

Alguien me puede ayudar con esto. O indicarme cual cree que sería la mejor manera de solucionarlo.

Muchas gracias de antemano.
Un saludo
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

Script con vbs de Conexión a Tabla de Access y ejecución de consulta

Publicado por selstam (11 intervenciones) el 24/01/2016 04:05:13
Hola, lo que tendrías que hacer es:

1º Obtener todas las rutas de las base de datos con sus nombres, para ello creas un sub que partiendo del directorio inicial escanee todos los directorios y almacene los datos, si sabes que son más o menos 300 creas un array con 400 así:
1
Dim BaseDatos(400) As String

Luego según el sub vaya obteniendo los datos los almacena, BaseDatos(0) = archivo de la base de datos...
2º Una vez tengas los datos simplemente creas un bucle y repites la misma operación con cada uno de los resultados

1
2
3
For i = 0 To BaseDatos.Count - 1
    If BaseDatos(i)="" Then Exit For ' Esto lo ponemos para que en cuanto encuentre un vacío no continúe y no te de error
Next

Para lo del excel si que no te puedo ayudar porque no tengo ni idea de como se hace eso, no soy un experto, sólo un aficionado.

Algo de ejemplo:

Tienes que importar esto: (Esto se coloca en el principio del archivo, antes de cualquier clase

1
2
3
Imports System.Data
Imports System.Data.OleDb
Imports System.IO

Ahora vamos con el código para obtener todos los archivos

1
2
3
4
5
6
7
8
9
10
Dim BaseDatos(400) As String
Dim Contador As Integer = 0
Dim DirIni As New DirectoryInfo("C:\") '<<<< Aquí indica el directorio raiz de tus base de datos
For Each DirBus As DirectoryInfo In DirIni.GetDirectories
    Dim DirNue As New DirectoryInfo(DirIni.Name & DirBus.Name)
    For Each ArcBus As FileInfo In DirNue.GetFiles
        BaseDatos(Contador) = ArcBus.FullName
        Contador += 1
    Next
Next

Este código recorre todos los directorios a partir del inicial y almacena en la variable BaseDatos todos los archivos que se encuentran en los directorios.
Si en esos directorios hay otros archivos que no sean base de datos tendrás que filtrarlos para que no de errores.

Ahora pasaremos a las conexiones

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
Dim sCnn As String
Dim sSel As String
Dim dt As DataTable
Dim da As OleDbDataAdapter
Dim dr As DataRow
 
For i = 0 To BaseDatos.Count - 1
    sCnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & BaseDatos(i)
    sSel = "SELECT * FROM tu_tabla"
    da = New OleDbDataAdapter(sSel, sCnn)
    dt = New DataTable
    da.Fill(dt)
    For i2 = 0 To dt.Rows.Count - 1
        dr = dt.Rows(i2)
        Aquí pondrás el destino de los datos que estas obteniendo.
    Next
Next

De esta manera obtendrás una conexión con todas las base de datos que encuentre y sus datos.

Tienes que conocer el nombre de la tabla que quieres copiar y si están protegidas con contraseña pues igualmente tendrás que conocerlas y añadirlas en sCnn para poder conectar.

Para lo del excel, como ya te comenté, siento no poder ayudarte.

Espero que esto te guíe un poco.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Script con vbs de Conexión a Tabla de Access y ejecución de consulta

Publicado por German (5 intervenciones) el 26/01/2016 12:47:42
Muchas gracias, pero estoy demasiado verde en el tema. Me da varios errores de compilación, "se esperaba un final de instrucción" es uno de ellos. No sé como solucionar eso, que seguramente será facil, pero...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Script con vbs de Conexión a Tabla de Access y ejecución de consulta

Publicado por German (5 intervenciones) el 26/01/2016 12:49:02
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
Imports System.Data
 
Imports System.Data.OleDb
 
Imports System.IO
 
 
 
For i = 0 To BaseDatos.Count - 1
 
    If BaseDatos(i)="" Then Exit For ' Esto lo ponemos para que en cuanto encuentre un vacío no continúe y no te de error
 
Next
 
 
Imports System.Data
 
Imports System.Data.OleDb
 
Imports System.IO
 
 
 
 
 
Dim sCnn As String
 
Dim BaseDatos(400) As String
 
Dim Contador As Integer = 0
 
Dim DirIni As New DirectoryInfo("C:\Users\ue02081\Desktop\CBM087\") '<<<< Aquí indica el directorio raiz de tus base de datos
 
For Each DirBus As DirectoryInfo In DirIni.GetDirectories
 
    Dim DirNue As New DirectoryInfo(DirIni.Name & DirBus.Name)
 
    For Each ArcBus As FileInfo In DirNue.GetFiles
 
        BaseDatos(Contador) = ArcBus.FullName
 
        Contador += 1
 
    Next
 
Next
 
 
 
Dim sSel As String
 
Dim dt As DataTable
 
Dim da As OleDbDataAdapter
 
Dim dr As DataRow
 
 
 
For i = 0 To BaseDatos.Count - 1
 
    sCnn = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & BaseDatos(i)
 
    sSel = "SELECT * FROM PrestamosSELECT Prestamos.[Número lector], Prestamos.[Data empréstito] FROM Prestamos WHERE (((Prestamos.[Data empréstito]) Like "*2015"));
"
 
    da = New OleDbDataAdapter(sSel, sCnn)
 
    dt = New DataTable
 
    da.Fill(dt)
 
    For i2 = 0 To dt.Rows.Count - 1
 
        dr = dt.Rows(i2)
 
        'Aquí pondrás el destino de los datos que estas obteniendo.
 
    Next
 
Next
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar