** NORMAS DEL FORO **
Inicio del foro Inicio del foro > Access y VBA > Access y VBA
  Mensajes nuevos Mensajes nuevos RSS - Error 2766 en tiempo ejecucion
  Preguntas frecuentes Preguntas frecuentes  Buscar en el foro   Eventos   Registro Registro  Iniciar sesion Iniciar sesion

Error 2766 en tiempo ejecucion

 Responder Responder
Autor
Mensaje
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Tema: Error 2766 en tiempo ejecucion
    Enviado: 05/Noviembre/2018 a las 15:45
Hola a todos.
Me explico, tengo un formulario de pedidos, donde entro el nº de cliente, la fecha del pedido y la fecha de entrega del pedido.
Una vez entrado estos tres datos quiero comprobar si ese cliente tiene ya un pedido para esa fecha de entrega, si es así, seguir entrando productos al pedido y de lo contrario seguir con un pedido nuevo. El hecho es que tengo el siguiente códogo en el envento después de actualizar la fecha de entrega del pedido y una vez entrada la fecha me sale el siguiente mensaje de error:
Error 2766 en tiempo de ejecución. El objeto no contiene el objeto de automatización '!'.
Y el depurador se detiene en la línea que está en rojo.
Alguien me puede decir por qué me sale este error.
informo [COMANDA] es campo autonumérico.

Dim rst As Recordset
Dim NUMCOMANDA As Variant
Dim CLIENT As Integer
Dim SERVEI As String
CLIENT = Me.CODCLICOM
SERVEI = Me.DATASERVCOM
NUMCOMANDA = DLookup("[COMANDA]", "COMANDES", "[CODCLICOM] = " & CLIENT & " AND [DATASERVCOM] = '" & SERVEI & "'")
'Creo un recorserd copia del recordsetclone del formulario
    Set rst = Me.RecordsetClone
'Verifico la existencia de la comanda introducida
    rst.FindFirst "COMANDA = " & NUMCOMANDA & ""
    If Not rst.NoMatch Then
'En el caso que exista deshago los cambios
    Me.Undo
'y desplazo el formulario al registro existente
    Me.Bookmark = rst.Bookmark
Else
End If
DATASERVCOM_BeforeUpdate_Salir:
   ' cierro el recordset
   CierraRecordsetDAO rst
   Exit Sub


Apstoni
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4702
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 16:46
Hola apstoni

Recuerda, si es número:
rst.FindFirst "COMANDA = " & NUMCOMANDA 

Y si es Texto:
rst.FindFirst "COMANDA = '" & NUMCOMANDA & "'"

Saludos.

Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 18:22
Ok. No me había dado cuenta, modificado ya que es número. Pero ahora me da el mismo error pero en la línea:

Me.Bookmark = rst.Bookmark
Apstoni
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11636
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 19:44
Por probar...
¿Y que ocurre si no obtienes ningun NUMCOMANDA? O sea, que el DLookup devuelva nulo. 

Podría ser un error derivado de que el FindFirst no trabaja con datos válidos.

Xavi, un minyó de Terrassa

Mi web
Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 20:13
Si no encuentra ningun NUMCOMANDA entonces continuo la entrada del pedido. O sea primero verifico que exista pedido para continuar entrando más productos y si no existes entro uno nuevo.
Apstoni
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11636
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 20:27
Vale, ahora lo he leido un pelín mejor y me parece que todo el error podría venir dado de que DATASERVCOM parece ser una fecha por lo que el criterio del DLookup está mal construido. Debe ser en formato americano y delimitado por #

Prueba corrigiendo eso a ver que tal.

En cualquier caso supongo que ya has ejecutado paso a paso evaluando el valor de las variables en cada momento.


Editado por xavi - 05/Noviembre/2018 a las 20:28
Xavi, un minyó de Terrassa

Mi web
Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 21:11
Me sigue dando el mismo error.
NUMCOMANDA = DLookup("[COMANDA]", "COMANDES", "[CODCLICOM] = " & CLIENT & " AND [DATASERVCOM] = # " & SERVEI & "#")
Apstoni
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11636
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 22:43
Revisa que CODCLICOM no sea de tipo texto y formatea SERVEI en formato americano: mm/dd/yyyy


Xavi, un minyó de Terrassa

Mi web
Arriba
emiliove Ver desplegable
Moderador
Moderador


Unido: 16/Junio/2009
Localización: Mexico
Estado: Sin conexión
Puntos: 4702
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita emiliove Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 05/Noviembre/2018 a las 23:03
Pero el formato sencillamente nos daría otra fecha y si no esta pues seguiría en el mismo registro, tambien podría poner:

rst.FindFirst "COMANDA = 120" 'en lugar del 120 un numero de comanda que exista

Un numero de comanda conocido a ver si hace lo que debe, pues lo primero que dijo Xavi que revises el DBusqueda es lo que me parecer que esta, mas lógico que falle.

Saludos.


Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 06/Noviembre/2018 a las 13:54
Hasta aquí todo va bien. Encuentra el pedido.
Dim NUMCOMANDA As Variant
Dim CLIENT As Integer
Dim SERVEI As String
Dim NOMCLIENT As String
CLIENT = Me.CODCLICOM
SERVEI = Me.DATASERVCOM
NOMCLIENT = Me.NOMCLICOM
NUMCOMANDA = DLookup("[COMANDA]", "COMANDES", "[CODCLICOM] = " & CLIENT & " AND [DATASERVCOM] = '" & SERVEI & "'")
If DLookup("[COMANDA]", "COMANDES", "[COMANDA] = " & NUMCOMANDA) Then
    MsgBox (NOMCLIENT & " PER AQUEST DIA JA TE LA COMANDA  Nº " & NUMCOMANDA & " VOLS AFEGIR-LI MES PRODUCTES?")

Apstoni
Arriba
xavi Ver desplegable
Administrador
Administrador
Avatar
Terrassa-BCN

Unido: 10/Mayo/2005
Localización: Catalunya ||||
Estado: en línea
Puntos: 11636
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita xavi Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 06/Noviembre/2018 a las 14:04
Primer mensaje: "Me explico, tengo un formulario de pedidos, donde entro el nº de cliente, la fecha del pedido y la fecha de entrega del pedido. "

Hablas de Nº cliente y FECHAS. Después aparece el concepto SERVEI que lo tratas como String cuando en ningun momento lo estas mencionando.

Hay algo que no me encaja porque me sorprende que encuentre el pedido ...

Obviamente tu estas viendo los datos pero nosotros no vemos nada.

Xavi, un minyó de Terrassa

Mi web
Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 06/Noviembre/2018 a las 14:11
El problema me viene ahora, ya que una vez encontrado, si digo que sí quiero entrar mas productos, debería deshacer los cambios entrados y mostrar el pedido encontrado. No sé si el problema es porque el campo  [COMANDA] es autonumérico y antes de comprobar si ya hay un pedido, primero entro el numero de cliente, acto seguido ya me da el numero de [COMANDA] y después entro la fecha de pedido y la fecha de servicio.
Apstoni
Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 06/Noviembre/2018 a las 14:20
Xavi SERVEI lo trato como fecha porque es un campo texto. Ya que la fecha la construyo de la siguiente manera:

Dim miFecha$, dia&, mes&, fecha As Date
  miFecha = left(Me.DATASERVCOM, 4)
  Select Case Len(miFecha)
    Case 1, 2
      dia = Val(miFecha)
      mes = Month(Date)
      If dia > Day(DateSerial(Year(Date), Month(Date) + 1, 1) - 1) Then
        mes = right(dia, 1)
        dia = left(dia, 1)
      End If
    Case 3, 4
      dia = left(miFecha, 2)
      mes = Mid(miFecha, 3, 2)
      If dia > Day(DateSerial(Year(Date), mes + 1, 1) - 1) Then
        dia = left(miFecha, 1)
        mes = Mid(miFecha, 2, 2)
      End If
      If mes > 12 Then mes = left(mes, 1)
  End Select
      Me.DATASERVCOM = DateSerial(Year(Date), mes, dia)
Apstoni
Arriba
apstoni Ver desplegable
Asiduo
Asiduo
Avatar

Unido: 09/Octubre/2010
Localización: España
Estado: Sin conexión
Puntos: 366
Opciones de entrada Opciones de entrada   Gracias (0) Gracias(0)   Cita apstoni Cita  ResponderRespuesta Enlace directo a este mensaje Enviado: 09/Noviembre/2018 a las 15:25
Bueno al final lo he resuelto. En vez de buscar el registro con recordset, he creado una variable temporal creando una macro donde me abre el formulario con el numero de pedido que ha encontrdo.

Dim NUMCOMANDA As Variant
Dim CLIENT As Integer
Dim SERVEI As String
Dim NOMCLIENT As String
CLIENT = Me.CODCLICOM
SERVEI = Me.DATASERVCOM
NOMCLIENT = Me.NOMCLICOM
NUMCOMANDA = DLookup("[COMANDA]", "COMANDES", "[CODCLICOM] = " & CLIENT & " AND [DATASERVCOM] = '" & SERVEI & "'")
TempVars!NUMPEDIDO = NUMCOMANDA
If NUMCOMANDA > 0 Then
   If MsgBox(NOMCLIENT & "   -  PER AQUEST DIA JA TE LA COMANDA  Nº " & NUMCOMANDA & "   -  VOLS AFEGIR-LI MES PRODUCTES?", vbYesNo) = vbYes Then
      DoCmd.RunMacro "PRUEBAFORM"
      Else
      Me.COMANDA.Value = DMax("[COMANDA]", "COMANDES") + 1
    End If
End If

En la macro PRUEBAFORM tiene las siguientes sentencias:
1.- Cierra el formulario COMANDES sin guardar los cambios.
2.-Abre el formulario COMANDES condición Where = [COMANDES]![COMANDA]=[Variables temporales]![NUMPEDIDO]


Apstoni
Arriba
 Responder Responder
  Compartir tema   

Ir al foro Permisos de foro Ver desplegable