Access - Error de compilacion no se ha definido Sub o Function

 
Vista:
sin imagen de perfil

Error de compilacion no se ha definido Sub o Function

Publicado por andres (42 intervenciones) el 28/12/2022 18:01:52
Buenas como están?, requiero la ayuda de ustedes ya que me sale este error y no puedo solucionarlo

Dejo la imagen y el código.

DAO

Private Sub Bas_Dni_BeforeUpdate(Cancel As Integer)
Dim rst As Recordset, _
Marcador As Variant

' creo un crecordset, copia del RecordsetClone del formulario
'On Error GoTo DNI_BeforeUpdate_TratamientoErrores

Set rst = Me.RecordsetClone

' verifico la existencia del código introducido
rst.FindFirst "NRODNI_N = " & Me.Bas_Dni & ""
If Not rst.NoMatch Then
' en caso de que exista deshago los cambios
Me.Undo
' y desplazo el formulario al registro existente
MsgBox "ALUMNO YA CARGADO", vbOKOnly, "ATENCIÓN"
Me.Bookmark = rst.Bookmark
End If


txtIdCliente_BeforeUpdate_Salir:
' cierro el recordset
CierraRecordsetDAO rst
On Error GoTo 0
Exit Sub

txtIdCliente_BeforeUpdate_TratamientoErrores:
MsgBox "Error " & Err & " en proc.: txtIdCliente_BeforeUpdate de Documento VBA: Form_frmClientes (" & Err.Description & ")", vbCritical + vbOKOnly, "ATENCION"
Resume txtIdCliente_BeforeUpdate_Salir

End Sub


Gracias de antemano y que tengan un buen comienzo de año.
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

Error de compilacion no se ha definido Sub o Function

Publicado por Anonimo (3312 intervenciones) el 28/12/2022 19:50:10
Para cerrar el recordset (que es tan innecesario como darle de beber agua a un pez para calmarle la sed) lo adecuado seria:

1
rst.Close

CierraRecordsetDAO rst <=== Access no sabe de donde salió esto (por eso lo pregunta)

Pregunta: ¿Para que una copia del RecordsetClone cuando se puede utilizar sin problemas?.

No hace falta declararlo, abrirlo o cerrarlo pues todo eso ya lo hace el formulario como algo natural.
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

Error de compilacion no se ha definido Sub o Function

Publicado por andres (42 intervenciones) el 29/12/2022 12:23:13
Buenas, te cuento que el código lo saque de un foro y adapté.
El código lo tengo antes de actualizar, en el campo dni para que busque el dni, si ya está cargado en la base me avise y borre el registro nuevo.
Ahora entonces borro esa linea?

CierraRecordsetDAO rst

Gracias y aguardo tu comentario.
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

Error de compilacion no se ha definido Sub o Function

Publicado por Anonimo (3312 intervenciones) el 29/12/2022 16:19:32
Copiar algo sin analizarlo para aprender es una forma de depender de otros que 'dan pescado' haciendo creer que enseñan algo y solo tratan de evitar la competencia (o saben que funciona, pero no como funciona).

Si en el original estaba esa línea, creo que no has copiado todo lo que el autor publico (o copio de otro sitio y por ello esta incompleto), pues en base a la respuesta, en ese código debería haber una Sub-función con ese nombre, que seria la encargada de cerrar el Recordset cuyo nombre se le pase como parámetro.

Para el codigo que se expuso (dimensionado, apertura y uso del recordset, lo correcto es que se utilice lo adecuado: nombre- del-recordset.Close ===>>> rst.Close para cerrarlo.

El RecorsetClone es un recordset copia fiel del origen de datos del formulario 'cuando se abre el formulario', en el formulario se pueden crear registros, manipularlos y borrarlos, al actualizarlo sus datos se sincronizan con las tablas de origen mediante su 'clone'.

Es por ello que en un formulario cuando se crea un registro, manipula o borra los cambios se actualizan al instante, pero si desde otra aplicación se crean, manipulan o borran registros, en el formulario en uso no se reflejan mientras no se vuelva a sincronizar (con [F5] o Requery o ...).

Es por ello lo de considerar absolutamente innecesario crear una copia para hacer exactamente lo mismo que se puede hacer con el original (eso si, el nombre es 'mas largo' que el que se acostumbra a utilizar en la copia ... quizás algún día aprenderán algo tan útil como 'With').
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error de compilacion no se ha definido Sub o Function

Publicado por andres (42 intervenciones) el 02/01/2023 12:37:36
Buen día! y Feliz Año.
Gracias por tu tiempo.
Entiendo lo que me decís, trato de entender el/los procedimientos no siempre tengo el tiempo para poder hacerlo, hay veces que no termino de entenderlo.
Se que salta porque no puede cerrarlo porque no se abrió.
El código ese en otra base me funciona sin problema, por eso no entiendo porque me salta eso.
Y podrás decir que otra opción se puede hacer para que chequee si un dni (campo numérico) ya está cargado.?
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

Error de compilacion no se ha definido Sub o Function

Publicado por Anonimo (3312 intervenciones) el 02/01/2023 13:45:00
En el otro funcionara, porque esta 'todo' el código, en este falta una subfunción de nombre 'CierraRecordsetDAO' a la que como parámetro se le pasa el nombre del recordset 'rst' de ello sale CierraRecordsetDAO rst.

Supongo (porque una subfunción o una función puede hacer todo lo que se le ocurra al autor) que hará mas cosas y sin verla ......

Como veo que te estas iniciado, unos tips:
Una función y una subfunción tienen el mismo poder (pueden hacer 'casi' lo mismo) las diferencias básicas son:

Una función puede devolver un dato, una subfunción no.
La función puede utilizarse (declarándola como publica) en cualquier parte (al igual que DLookup, DCount ...) una subfunción solo en VBA.

Una función debe de recibir los parámetros entre paréntesis, una subfunción no necesita los paréntesis, ejemplo:
CierraRecordsetDAO como funcion: CierraRecordsetDAO (rst)
CierraRecordsetDAO como subfuncion: CierraRecordsetDAO rst

Solo quedan dos opciones:
.- Copiar lo que falta (la subfunción, si hace algo que sea necesario)
.- Cerrar el Recodset y olvidarse de la subfunción (que posiblemente será útil en otro lugar y para otros propósitos)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error de compilacion no se ha definido Sub o Function

Publicado por andres (42 intervenciones) el 03/01/2023 13:55:26
Hola, comprendo lo que me decís, lo revisé y es así tiene declarada una función pública.
Te agradezco enormemente tu consejo y aporte.
Saludos. hasta pronto seguro ya que tengo varias dudas.
Muchas gracias!
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
Imágen de perfil de Eduardo

Error de compilacion no se ha definido Sub o Function

Publicado por Eduardo (315 intervenciones) el 02/01/2023 13:26:06
Seguro que CierraRecordsetDAO es una llamada a un procedimiento, es decir debe existir, si quiere envíeme la base de datos a [email protected] y la reviso para así no dar conceptos que lo puedan confundir. Feliz año.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo

Error de compilacion no se ha definido Sub o Function

Publicado por Eduardo (315 intervenciones) el 02/01/2023 17:31:55
Sin tanta teoría suprima la línea CierraRecordsetDAO rst y listo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error de compilacion no se ha definido Sub o Function

Publicado por Anonimo (3312 intervenciones) el 02/01/2023 18:02:11
No tiene que borrarla, tiene que sustituirla tal como antes indique:
Cambie esa línea por rst.Close, el Recordset esta abierto y hay que cerrarlo

Y preocúpate de la teoría, te ayudara a avanzar y ser creativo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Eduardo

Error de compilacion no se ha definido Sub o Function

Publicado por Eduardo (315 intervenciones) el 02/01/2023 18:30:13
No necesariamente es obligatorio cerrar el recordset clonado, este se cierra automáticamente al cerrar el formulario, pero si es recomendado cerrarlo e inclusive liberar memoria con SET rst=Nothing.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Error de compilacion no se ha definido Sub o Function

Publicado por Anonimo (3312 intervenciones) el 02/01/2023 20:30:28
Afortunadamente tanto los clonados como los no clonados se cierran al cerrar la base de datos, gracias a ello muchas aplicaciones logran arrancar en la siguiente sesión (la solución de los mediocres).
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error de compilacion no se ha definido Sub o Function

Publicado por andres (42 intervenciones) el 03/01/2023 13:56:16
Hola sí ya lo encontré.
Muchas gracias!!
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