............ Foro Excel
Si no lo has hecho aún: REGISTRATE!!!

Ejecutar consultas Access con parametros.

Ver el tema anterior Ver el tema siguiente Ir abajo

Ejecutar consultas Access con parametros.

Mensaje por Simkin el Lun Mayo 03, 2010 12:14 pm

Wenas a todos,

Estoy intentando definir una macro que sea capaz de leer un par de parametros de una hoja excel y con ellos como parametros de entrada, ejecute una consulta definida en un fichero access. El tema es que mi vba no es que sea para tirar cohetes y aunque más o menos tengo la macro estructurada no consigo hacer funcionar la consulta. Por favor, ¿podriais indicarme donde me estoy colando?

Macro -->
Sub Generar_Tablas_Maestras()
'
' Generar_Tablas_Maestras Macro
'

On Error GoTo Err_Sub

'dimensiones
Dim strTabla_B, strSQL_B As String
Dim Name1 As String
Dim Dia As Date
Dim Cola As String

'Datos de Entrada
Dia = Range("Menu!E27").Value

'elegir uno de estas dos rutas al archivo Access
Dim strDB As String
strDB = ThisWorkbook.Path & "\" & "atar_CM.mdb"

'crear la conexión
Set datConnection = CreateObject("ADODB.Connection")
datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & strDB & ";"

'Ejecutar consultas globales con fecha
EjecutarConsulta("Query1", Dia, "Todas")

'consultas por empresas
strTabla_B = "T_AUX_OD_Grupos"
strSQL_B = "SELECT * FROM " & strTabla_B
Set recset1 = CreateObject("ADODB.recordset")
recset1.Open strSQL_B, datConnection

'Bucle
recset1.MoveFirst
Do While Not recset1.EOF
Cola = recset1.Fields(0).Value
'Ejecutar consultas particulares con fecha y cola
EjecutarConsulta("Query3", Dia, Cola)
Name1 = "Q3_" & Replace(Cola, " ", "")
DoCmd.CopyObject Name1, acTable, Q3
recset1.MoveNext
Loop

'desconectar
recset1.Close: Set recset1 = Nothing
datConnection.Close: Set datConnection = Nothing

'Aviso de Ejecución finalizada
Sheets("Menu").Activate
MsgBox "Tablas maestras generadas a partir de la fecha de referencia " & Dia & "."

Descargar:
On Error GoTo 0
Exit Sub

Err_Sub:
MsgBox Err.Description, vbCritical
GoTo Descargar

End Sub

Private Sub EjecutarConsulta(ByVal NombreConsulta As String, ByVal Fecha As DateTime, ByVal Cola As String)

Dim qdf As QueryDef
Dim rst As DAO.Recordset

Set qdf = strDB.QueryDefs(NombreConsulta)
qdf.Parameters("Introduzca_Fecha") = Fecha
qdf.Parameters("Introduzca_Cola") = Cola

Set rst = qdf.OpenRecordset()

Set rst = Nothing
Set qdf = Nothing
End Sub


Queries -->
PARAMETERS Introduzca_Fecha DateTime, Introduzca_Cola Text ( 255 );
SELECT Fecha, Count(Sesion) AS Sesiones
FROM OD2001_Encuestas_Total
WHERE Fecha Between (Format(DATEADD('D',-6,Introduzca_Fecha),"yyyymmdd")) And (Format(Introduzca_Fecha,"yyyymmdd")) And Cola=Introduzca_Cola
GROUP BY Fecha
ORDER BY Fecha;

Muchas gracias de antemano y un saludo.
Simkin

Simkin

Masculino Cantidad de envíos : 4
Edad : 43
Ciudad - Pais : España
Version de Excel : 2003-2007
Fecha de inscripción : 15/04/2010

Volver arriba Ir abajo

Re: Ejecutar consultas Access con parametros.

Mensaje por P@li el Lun Mayo 03, 2010 1:26 pm

No sé bien qué hace el objeto DoCmd, hasta donde pude entender el uso de las Queries parecen innecesarias. Mi propuesta es esta.

Código:

Sub Generar_Tablas_Maestras()
    '
    ' Generar_Tablas_Maestras Macro
    '
   
    On Error GoTo Err_Sub
   
    'dimensiones
    Dim strTabla_B, strSQL_B As String
    Dim Name1 As String
    Dim Dia As Date
    Dim Cola As String
   
    Dim recsec2
   
    'Datos de Entrada
    Dia = Range("Menu!E27").Value
   
    'elegir uno de estas dos rutas al archivo Access
    Dim strDB As String
    strDB = ThisWorkbook.Path & "\" & "atar_CM.mdb"
   
    'crear la conexión
    Set datConnection = CreateObject("ADODB.Connection")
    datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & strDB & ";"
   
    'Ejecutar consultas globales con fecha
    'Call EjecutarConsulta("Query1", Dia, "Todas")
   
    'consultas por empresas
    strTabla_B = "T_AUX_OD_Grupos"
    strSQL_B = "SELECT * FROM " & strTabla_B
    Set recset1 = CreateObject("ADODB.recordset")
    recset1.Open strSQL_B, datConnection
   
    'Bucle
    If Not (recset1.EOF And recset1.bof) Then  'para ver si el recordset obtuvo resultados
        Set recset2 = CreateObject("ADODB.recordset")
        recset1.MoveFirst
        Do While Not recset1.EOF
            Cola = recset1.Fields(0).Value
            'Ejecutar consultas particulares con fecha y cola
            'Call EjecutarConsulta("Query3", Dia, Cola)
            Name1 = "Q3_" & Replace(Cola, " ", "")
            'DoCmd.CopyObject Name1, acTable, Q3
           
            recset2.Open _
                "FROM OD2001_Encuestas_Total " & _
                "WHERE Fecha = " & Format(Fecha, "#") & " And Cola = '" & Cola & "'" & _
                "GROUP BY Fecha " & _
                "ORDER BY Fecha;", datConnection
           
            MsgBox recsec2.getstring
           
            recset2.Close
            recset1.MoveNext
        Loop
        Set recset2 = Nothing
    End If
    'desconectar
    recset1.Close
    Set recset1 = Nothing
    datConnection.Close
    Set datConnection = Nothing
   
    'Aviso de Ejecución finalizada
    Sheets("Menu").Activate
    MsgBox "Tablas maestras generadas a partir de la fecha de referencia " & Dia & "."
   
Descargar:
    On Error GoTo 0
    Exit Sub
   
Err_Sub:
    MsgBox Err.Description, vbCritical
    GoTo Descargar

End Sub

Private Sub EjecutarConsulta(ByVal NombreConsulta As String, ByVal Fecha As DateTime, ByVal Cola As String)
   
    Dim qdf As QueryDef
    Dim rst As DAO.Recordset
   
    Set qdf = strDB.QueryDefs(NombreConsulta)
    qdf.Parameters("Introduzca_Fecha") = Fecha
    qdf.Parameters("Introduzca_Cola") = Cola
   
    Set rst = qdf.OpenRecordset()
   
    Set rst = Nothing
    Set qdf = Nothing
End Sub

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ejecutar consultas Access con parametros.

Mensaje por Simkin el Mar Mayo 04, 2010 4:51 am

P@li escribió:No sé bien qué hace el objeto DoCmd, hasta donde pude entender el uso de las Queries parecen innecesarias. Mi propuesta es esta.

Código:

Sub Generar_Tablas_Maestras()
    '
    ' Generar_Tablas_Maestras Macro
    '
   
    On Error GoTo Err_Sub
   
    'dimensiones
    Dim strTabla_B, strSQL_B As String
    Dim Name1 As String
    Dim Dia As Date
    Dim Cola As String
   
    Dim recsec2
   
    'Datos de Entrada
    Dia = Range("Menu!E27").Value
   
    'elegir uno de estas dos rutas al archivo Access
    Dim strDB As String
    strDB = ThisWorkbook.Path & "\" & "atar_CM.mdb"
   
    'crear la conexión
    Set datConnection = CreateObject("ADODB.Connection")
    datConnection.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source =" & strDB & ";"
   
    'Ejecutar consultas globales con fecha
    'Call EjecutarConsulta("Query1", Dia, "Todas")
   
    'consultas por empresas
    strTabla_B = "T_AUX_OD_Grupos"
    strSQL_B = "SELECT * FROM " & strTabla_B
    Set recset1 = CreateObject("ADODB.recordset")
    recset1.Open strSQL_B, datConnection
   
    'Bucle
    If Not (recset1.EOF And recset1.bof) Then  'para ver si el recordset obtuvo resultados
        Set recset2 = CreateObject("ADODB.recordset")
        recset1.MoveFirst
        Do While Not recset1.EOF
            Cola = recset1.Fields(0).Value
            'Ejecutar consultas particulares con fecha y cola
            'Call EjecutarConsulta("Query3", Dia, Cola)
            Name1 = "Q3_" & Replace(Cola, " ", "")
            'DoCmd.CopyObject Name1, acTable, Q3
           
            recset2.Open _
                "FROM OD2001_Encuestas_Total " & _
                "WHERE Fecha = " & Format(Fecha, "#") & " And Cola = '" & Cola & "'" & _
                "GROUP BY Fecha " & _
                "ORDER BY Fecha;", datConnection
           
            MsgBox recsec2.getstring
           
            recset2.Close
            recset1.MoveNext
        Loop
        Set recset2 = Nothing
    End If
    'desconectar
    recset1.Close
    Set recset1 = Nothing
    datConnection.Close
    Set datConnection = Nothing
   
    'Aviso de Ejecución finalizada
    Sheets("Menu").Activate
    MsgBox "Tablas maestras generadas a partir de la fecha de referencia " & Dia & "."
   
Descargar:
    On Error GoTo 0
    Exit Sub
   
Err_Sub:
    MsgBox Err.Description, vbCritical
    GoTo Descargar

End Sub

Private Sub EjecutarConsulta(ByVal NombreConsulta As String, ByVal Fecha As DateTime, ByVal Cola As String)
   
    Dim qdf As QueryDef
    Dim rst As DAO.Recordset
   
    Set qdf = strDB.QueryDefs(NombreConsulta)
    qdf.Parameters("Introduzca_Fecha") = Fecha
    qdf.Parameters("Introduzca_Cola") = Cola
   
    Set rst = qdf.OpenRecordset()
   
    Set rst = Nothing
    Set qdf = Nothing
End Sub

Saludos,
Pablo.


Wenas Pablo,

Lo primero muchas gracias, voy a probar tu sugerencia a ver si consigo avanzar por ese camino. Te explico lo del DoCmd, es normal que no lo entendieras porque para simplificar el post simplifique un poco tanto la macro como la query, la query real a ejecutar es similar a la que publique pero su resultado es una nueva tabla, vamos algo asi:
SELECT * INTO Qn
FROM table
Where .....

Mi idea es que una vez generada esa tabla, la misma sea renombrada a Qn_Cola para que la en siguiente vuelta del bucle se pueda actualizar sin perder los datos generados anteriormente.

Gracias de nuevo, a ver si hay suerte.

Saludos,
Simkin

Simkin

Masculino Cantidad de envíos : 4
Edad : 43
Ciudad - Pais : España
Version de Excel : 2003-2007
Fecha de inscripción : 15/04/2010

Volver arriba Ir abajo

Re: Ejecutar consultas Access con parametros.

Mensaje por P@li el Mar Mayo 04, 2010 9:34 am

Buscá sobre la sintaxis de UNION en ACCESS, sirve para unir dos o más consultas (siempre que tengan la misma estructura).

Ejemplo:

SELECT "A","B","C"
UNION
SELECT "D","E","F"

Resultados:
ABC
DEF

Saludos,
Pablo.

P@li
Admin

Masculino Cantidad de envíos : 243
Edad : 34
Ciudad - Pais : Buenos Aires, Argentina
Version de Excel : Microsoft Excel 2002 (10.2614.2625)
Fecha de inscripción : 03/03/2008

Volver arriba Ir abajo

Re: Ejecutar consultas Access con parametros.

Mensaje por Contenido patrocinado


Contenido patrocinado


Volver arriba Ir abajo

Ver el tema anterior Ver el tema siguiente Volver arriba


 
Permisos de este foro:
No puedes responder a temas en este foro.