Access - CAMBIAR DE DAO A ADO

 
Vista:
sin imagen de perfil
Val: 4
Ha aumentado su posición en 4 puestos en Access (en relación al último mes)
Gráfica de Access

CAMBIAR DE DAO A ADO

Publicado por AMADO (6 intervenciones) el 21/06/2019 02:27:25
ENCONTRE EN LA WEB ESTE CODIGO PERO NO ME FUNCIONA POR QUE UTILIZO ADO Y NO DAO ALGUIN ME PODRIA AYUDAR PARA CAMBIAR LAS SENTENCIAS QUE NO RECONOCE

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
Private Sub Comando5_Click()
Dim dbs As DAO.Database
Dim Qdf As DAO.QueryDef
Dim StrSQL As String
Dim StrQry As String
 
Dim RutaExport As String, NombExcel As String, NombFichero As String
StrSQL = Me.Lista0.RowSource  'Nombre de la Consulta capturada como RowSorce del Cuadro de Lista. En éste caso el ListBox se llama Lista0
StrQry = "QryTemporal"      'Nombre de la Consulta que se crea con el CreateQry de abajo
RutaExport = CurrentProject.Path & "\Export\"          'Export será una carpeta que cuelga de la que está la BBD (Se puede cambiar)
NombExcel = "ExcelTemp" & Format(Now(), "yymmddhhnn")  'ExcelTem es el comienzo del Nombre del FicheroExcel que obtendremos. y el Format...para detectar Fecha y hora
NombFichero = RutaExport & NombExcel & ".xlsx"         'NombFichero es la Ruta completa que se necesita. Aquí por ejemplo Obtenemos >> "C:\DirectorisBBDS\Export\ExcelTemp1904301524.xlsx"
'Sondeo si por alguna maniobra se ha quedado creada y sin Borrar la Consulta >> "QryTemporal" -----
ObjetoDestino = "QryTemporal"
Call ExisteObjeto(ObjetoDestino)
If Existe = True And EsConsulta = True Then  'En principio no debe existir porque se borra al Exportar, pero por si acaso
        DoCmd.DeleteObject acQuery, StrQry
Else
        Set dbs = CurrentDb
        Set Qdf = dbs.CreateQueryDef(StrQry, StrSQL)
        'Aegurar que la Consulta tiene Registros
    If Nz(DCount("*", "QryTemporal"), 0) > 0 Then 'Si la Consulta tiene Registros seguimos el Proceso
                DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, StrQry, NombFichero, True
                MsgBox "El Fichero de Excel generado es: " & NombFichero, vbInformation, "EXCEL GENERADO"
        Else
                MsgBox "La lista de valores no puede estar vacía. Asegura que tiene valores", vbCritical, "FALTAN DATOS"
        End If
        DoCmd.DeleteObject acQuery, StrQry 'Elimino la Consulta Temporal
        Set dbs = Nothing
        Set Qdf = Nothing
End If
End Sub
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

CAMBIAR DE DAO A ADO

Publicado por Anonimo (3316 intervenciones) el 21/06/2019 11:03:08
Nota 1: Escribir en letras capitales (mayúsculas) se considera gritar y no mejora la lectura del mensaje (mas bien se tienden a ignorar)

Nota 2: En una aplicación Access el conflicto DAO/ADO no debería darse si esta correctamente programado y ambos pueden coexistir sin generar problemas (además el DAO es el nativo de Access y debería funcionar sin problemas y de forma mas eficiente), ADO solo comienza a tener sentido en un entorno de Access + ????

Nota 3: Que no funcione puede depender del entorno y cada entorno es un mundo, seria un paso imprescindible indicar 'que sentencias no reconoce', informar también de que versión (de Access) se esta utilizando seria una referencia interesante.
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

CAMBIAR DE DAO A ADO

Publicado por Disculpa y aclaraciones (6 intervenciones) el 21/06/2019 13:37:28
Antes que nada una disculpa por lo de la letra.
Te comento que el mensaje que sale es el siguiente :
No se ha definido el tipo definido por el usuario.
Y cuando trato de incorporar la biblioteca de DAO, me dice:
Error al cargar biblioteca DLL

Gracias por tu tiempo
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

CAMBIAR DE DAO A ADO

Publicado por Anonimo (3316 intervenciones) el 22/06/2019 01:01:16
Según la versión de Access (creo que a partir de la A'2010) la biblioteca de DAO esta integrada bajo otro nombre, dado que se modifico de forma interna para poder crear un nuevo tipo de RecordSet, el 'Recordset2' por lo que no es preciso añadirla, en versiones anteriores la que se añade es la de ADO.

Ese error hará que el código (o la compilación de ese código) se detenga en la línea que considere errónea y esta se resaltara en amarillo o el color que se le indique si se personaliza el entorno.

El código expuesto (al menos el publicado) esta numerado línea a línea, ¿en que numero de línea se para?.... porque si no señala ninguna de esas líneas, el error esta en otra parte (incluso puede causarlo alguna incompatibilidad de lo copiado al interferir con lo que se tenia).
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

CAMBIAR DE DAO A ADO

Publicado por Jacinto Trillo (2 intervenciones) el 24/06/2019 12:23:48
En principio ese código hace una llamada a un Procedimiento que no se cita.
Call ExisteObjeto(ObjetoDestino)
Al igual que lo escrito por Anonimo, no veo por qué pasar a ADO.
La Referencia actual de DAO es >> Microsoft Office xx.0 Access Database Engine Object Library
Siendo evidentemente xx dependiente de la Versión de Access.
El Procedimiento que falta es >>
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
'Para poner en un Modulo Estandar. Váldrá en otros usos de ver si existe una Consulta o Tabla
'Declarar éstas variables Publicas
Public Existe As Boolean
Public EsConsulta As Boolean
Public EsTabla As Boolean
 
Function ExisteObjeto(NombreObjeto)
Existe = False
EsConsulta = False
EsTabla = False
For Each Objeto In CurrentDb.QueryDefs
        If NombreObjeto = LCase(Objeto.Name) Then
                Existe = True
                EsConsulta = True
                Exit For
        End If
Next
If Not Existe Then
        EsConsulta = False
        For Each Objeto In CurrentDb.TableDefs
                If NombreObjeto = LCase(Objeto.Name) Then
                        Existe = True
                        EsTabla = True
                        Exit For
                End If
        Next
End If
End Function ' ExisteObjeto
Espero sea de utilidad
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