Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Vba(access) / Sql

Iniciado por Warchief, 20 de Febrero de 2005, 12:44:13 PM

« anterior - próximo »

Warchief

 Saludos,

tengo que hacerle un favor a mi madre para su base de datos en access del trabajo. De momento es tan simple como acceder a una tabla, hacerle una consulta sql y hacer ciertos cálculos de fechas, etc.

No he trabajado nunca con Access ni con VB, así que ando un poco perdido. Hice un día una macro que te ponía lo que metías en el campo "e-correo" como un hipervínculo, pero ya ni recuerdo ni nada.

El caso es que estoy intenando acceder a la tabla para hacer la consulta y no me funcionan los componentes DAO. Lo he intentado con ADO, pero también me falla. Os cuento los fallos:


  • DAO:
    No me aparecen los componentes en autocompletar (no están), así que al ejecutar me sale error de "tipo no definido", por ejemplo para "Database", "Workspace", etc.

  • ADO:

    ...
       Dim resultado As New ADODB.Recordset
       Dim conexion As New ADODB.Connection
       
       conexion = New ADODB.Connection
       With conexion
           .Provider = "Microsoft.Jet.OLEDB.4.0"
           .ConnectionString = "origen de datos=" & CurrentDb.Name
           .Open
       End With
    ...

    Me da el error de "No se encuentra el archivo ISAM instalable"
Creo que debo instalar algo más? estoy con OfficeXP en WinXPpro.

Cualquier ayuda es bienvenida. Gracias.


Herramientas > Referencias > Microsoft DAO 3.6 Object Library
OK, lo del DAO ya está ;)

La de ActiveX es 2.1 la que está activada, es correcto?¿

Este DAO parece funcionar, continúo sobre ello si no me comentáis nada en favor de ADO.

   Dim resultado As Recordset
   Dim basedatos As Database
   
   Set basedatos = CurrentDb
   Set resultado = basedatos.OpenRecordset("SELECT * FROM TablaPrueba WHERE [DNI] = 1")

NeLo

 Utiliza ADO que es más moderno.

Prueba con:


Dim resultado As New ADODB.Recordset

resultado.Open "tabla", CurrentProject.Connection
Drowning deep in my sea of loathing

Warchief

Cita de: "NeLo"Utiliza ADO que es más moderno.

Prueba con:


Dim resultado As New ADODB.Recordset

resultado.Open "tabla", CurrentProject.Connection
Con ADO me sigue saliendo el "No se pudo encontrar el archivo ISAM instalable", por eso he tirado con DAO de momento.

NeLo

 Pues ese error no me suena.

Mira a ver si tienes todas las referencias puestas, porque parece ser algo de librerias.

Saludos.
Drowning deep in my sea of loathing

Warchief

 Sólo tengo 5 referencias (tuve que añadir la de ADO).

  • Visual Basic For Applications
  • MS Access 10.0 Object Library
  • OLE Automation
  • MS DAO 3.6 Object Library
  • MS ADO 2.1 Library

Con DAO tengo un problema, a ver si alguien tiene un rato y me mira qué le pasa a este sencillo código.

El problema viene al añadir la funcion Controlar_Mensaje (eso creo), que lo único que hace es dejar que se impriman sólo unos MsgBox (que ahora probando quiero ver unos pocos para ver si hace la cuenta, pero luego no sé como interrumpir la ejecución).

El error que me sale al final de la ejecución es:
Error de sintaxis (falta operador) en la expresión de consulta 'NIF ='
He comprobado que si pongo NIF = 3, en vez de trabajadores![NIF] en la consulta, el error no sale; sin embargo, con lo que tengo me sale bien para los N mensajes que imprimo con el MsgBox. ¿Alguien ve el problema? Gracias de antemano.

Option Compare Database
Private Function Controlar_Mensaje(Cuenta As Integer, Mensaje As String)
On Error GoTo Err_Controlar_Mensaje
   Dim MAX_MENSAJES As Integer ' Limite para MsgBox
   MAX_MENSAJES = 2
       
   If (Cuenta < MAX_MENSAJES) Then
       MsgBox Mensaje
   Else
       If (MAX_MENSAJES = Cuenta) Then
           MsgBox "Se ha llegado al limite de mensajes. No se imprimen más."
       End If
   End If

   Controlar_Mensaje = Cuenta + 1

Exit_Controlar_Mensaje:
   Exit Function

Err_Controlar_Mensaje:
   MsgBox "Fallo en Controlar_Mensaje: " & Err.Description
   Resume Exit_Controlar_Mensaje
   
End Function


Public Function Calcular_Periodos_Trabajo()
On Error GoTo Err_Calcular_Periodos_Trabajo
   Calcular_Periodos_Trabajo = 1
   
   Dim numMensajes As Integer
   numMensajes = 0
   
   Dim trabajadores As Recordset
   Dim contratos As Recordset
   Dim basedatos As Database
   Dim qryTrab As String
   
   Set basedatos = CurrentDb
   Set trabajadores = basedatos.OpenRecordset("Trabajad")
   
   While Not trabajadores.EOF
       Set contratos = basedatos.OpenRecordset("SELECT * FROM Contrats WHERE [NIF] = " & trabajadores![NIF])
       If (contratos.RecordCount() = 0) Then
           numMensajes = Controlar_Mensaje(numMensajes, "NO HAY PARA " & trabajadores![NIF])
       Else
           trabajadores.Edit
           While Not contratos.EOF
               numMensajes = Controlar_Mensaje(numMensajes, "Contrato (" & trabajadores![NIF] & ") => " & contratos![Fecha_ini] & " hasta " & contratos![Fecha_fin])
               contratos.MoveNext
           Wend
           trabajadores.Update
       End If
       
       trabajadores.MoveNext
   Wend
       
   basedatos.Close
   
Exit_Calcular_Periodos_Trabajo:
   Exit Function

Err_Calcular_Periodos_Trabajo:
   MsgBox "Fallo en Calcular_Periodos_Trabajo: " & Err.Description
   Resume Exit_Calcular_Periodos_Trabajo
   
End Function


Hay alguna cosa rara como lo del trabajadores.Edit, etc. que antes asignaba valores y lo tengo que volver a hacer después. Eso está controlao ;)

Warchief

 Uhm, ya no me deja editar.

Descubrí que el error era que faltaba un:

If (Not IsNull(trabajadores![NIF])) Then


Al parecer las tablas pueden tener NIFs nulos y eso provocaba el fallo en sintaxis en tiempo de ejecución.
(nooo)  






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.