Crear funcion |
Responder |
Autor | ||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3065 |
Tema: Crear funcion Enviado: 19/Agosto/2019 a las 09:52 |
|
Hola. Estoy intentanto modificar una rutina de Miuhra para convertirla en una funcion y poder llamarla desde cualquier parte de la aplicacion. Para que sea practica de utilizar tengo que pasarle un tercer parametro, el nombre de la tabla. Es aqui donde fallo, la he declarado como objeto, pero a la hora de llamarla por mas que pruebo me da errores. Para llamarla lo intento asi. ' '******************************* Dim varNumeroId As String RT_Modulo_Contadores "NombreFormulario",NombreTabla, varNumeroId Me.NombreCampoID = varNumeroId '********************************** Tambien he probado asi '**************************** Dim varNumeroId As String Dim varTabla as Object Set varTabla = Tabla1 'Nombre de la tabla RT_Modulo_Contadores "NombreFormulario",NombreTabla, varNumeroId Me.NombreCampoID = varNumeroId '*************************** A ver si veis el fallo....... esta relacionado con NombreTabla Aqui la funcion de Mihura '--------------------------------------------------------------------------------------------- ' Autor : JESUS MANSILLA CASTELLS -Mihura- '--------------------------------------------------------------------------------------------- Function RT_Modulo_Contadores(NombreFormulario As String, NombreTabla As Object, Numero As Variant) Dim dbExterna As Database Set dbExterna = CurrentDb Dim I As Double, NombreTabla As dao.Recordset Set NombreTabla = CurrentDb.OpenRecordset("SELECT * FROM [tbContadores] WHERE Codigo_con = '" & NombreFormulario & "'") If NombreTabla.RecordCount = 0 Then MsgBox "Error tabla contadores. Codigo : " & NombreFormulario, vbCritical, "TECSYS" Else On Error GoTo Error_rut NombreTabla.LockEdits = True NombreTabla.Edit NombreTabla("Valor_con") = NombreTabla("Valor_con") + 1 Numero = NombreTabla("Valor_con") NombreTabla.Update End If NombreTabla.Close Exit Function Error_rut: For I = 1 To 50000: Next Resume Return End Function
Editado por rokoko - 19/Agosto/2019 a las 09:53 |
||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14027 |
Enviado: 19/Agosto/2019 a las 10:19 | |
Función RT_Modulo_Contadores(Código as string) As Long
Con estos cambios (más alguno interno) ya la puedes llamar directamente desde donde quieras que te devuelva el contador. |
||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3065 |
Enviado: 19/Agosto/2019 a las 16:22 | |
Pues parece que funciona, pero no se porque....
No le hace falta a la funcion pasarle el nombre de la tabla??? Tal y como lo tengo da igual el nombre que le ponga.... los que esta en negrita es el nombre de la tabla, y es indiferente lo que le ponga, que funciona..... '--------------------------------------------------------------------------------------------- ' Autor : JESUS MANSILLA CASTELLS -Mihura- '******************************* 'Para llamarla 'Dim varId As String 'RT_Modulo_Contadores "NombreFormulario",varId 'Me.NombreCampo = varId '********************************** Function RT_Modulo_Contadores(NombreFormulario As String, Numero As Variant) As Long Dim dbExterna As Database Set dbExterna = CurrentDb Dim I As Double, Tablaxxx As dao.Recordset Set Tablaxxx = CurrentDb.OpenRecordset("SELECT * FROM [tbContadores] WHERE Codigo_con = '" & NombreFormulario & "'") If Tablaxxx.RecordCount = 0 Then MsgBox "Error tabla contadores. Codigo : " & NombreFormulario, vbCritical, "TECSYS" Else On Error GoTo Error_rut Tablaxxx.LockEdits = True Tablaxxx.Edit Tablaxxx("Valor_con") = Tablaxxx("Valor_con") + 1 Numero = Tablaxxx("Valor_con") Tablaxxx.Update End If Tablaxxx.Close Exit Function Error_rut: For I = 1 To 50000: Next Resume Return End Function Editado por rokoko - 19/Agosto/2019 a las 16:23 |
||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4832 |
Enviado: 19/Agosto/2019 a las 18:07 | |
Tablaxxx As dao.Recordset es una Variable y como tal da Igual el nombre que le pongas siempre y cuando No uses una palabra reservada de Access En..... FROM [tbContadores] .... es donde contiene el Nombre real de la Tabla que quieres atacar
|
||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3065 |
Enviado: 20/Agosto/2019 a las 09:45 | |
Pues aun me cuesta pillarlo....el codigo va en un modulo, option explicit esta puesto y yo no declarado esa variable (Tablaxxx) , a no ser que se quede como long, pero long es para numeros..... estoy un poco perdido...
Function RT_Modulo_Contadores(NombreFormulario As String, Numero As Variant) As Long
|
||
javier.mil
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Colaborador Unido: 10/Agosto/2005 Localización: España Estado: Sin conexión Puntos: 4832 |
Enviado: 20/Agosto/2019 a las 16:15 | |
Por supuesto que estas declarando la variable !! ,..... la variable Tablaxxx la estas declarando AQUI Dim I As Double, Tablaxxx As dao.Recordset Lo mismo escrito de otro modo Dim I As Double Dim Tablaxxx As DAO.Recordset La Tabla No es long tu tabla esta declarada como DAO.Recordset Otra cosa son los campos que componen esa Tabla , pero eso es ya otra historia muy distinta, pero insisto tu Tabla como tal la tienes declarada como DAO.Recordset Si quieres puedes tambien declararla como Object Dim Tablaxxx As Object Otra cosa: La Variable dbExterna No se esta usando ,...... se podria borrar....... al menos en la funcion que has escrito......... Dim dbExterna As Database '<< Se podria Borrar Editado por javier.mil - 20/Agosto/2019 a las 16:23 |
||
Mihura
Ver perfil usuario
Enviar mensaje privado
Ver los mensajes del usuario
Visite la página de los usuarios
Añadir a la lista de amigos
Administrador Unido: 06/Mayo/2005 Localización: En la dehesa Estado: Sin conexión Puntos: 14027 |
Enviado: 20/Agosto/2019 a las 17:37 | |
Veamos, que dijo un ciego ...
La función original es:
Que traducida a función queda:
Tienes un error de concepto gordo, el parámetro que se pasa no es el nombre de la tabla a cambiar, sino la clave del registro de la tabla de contadores que contiene el valor a usar. La rutina original: Rutina contadores Editado por Mihura - 20/Agosto/2019 a las 17:38 |
||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3065 |
Enviado: 20/Agosto/2019 a las 20:17 | |
Vale vale, ahora lo pillo..., yo siempre ponia el nombre de la tabla de mi base de datos en MiTabla.
Lo de Dim dbExterna As Database Set dbExterna = CurrentDb lo puse en su dia para tablas en Back end......lo dejo puesto en principio, ya que asi funciona con tablas internas como externas. Saludos Y gracias a los dos por aclararme dudas.
|
||
rokoko
Colaborador Unido: 16/Febrero/2008 Localización: Pamplona Estado: Sin conexión Puntos: 3065 |
Enviado: 01/Septiembre/2019 a las 15:40 | |
Se puede cerrar
Gracias!!!
|
||
Responder | |
Tweet
|
Ir al foro | Permisos de foro Usted No puede publicar nuevos temas en este foro Usted No puede responder a temas en este foro Usted No puede borrar sus mensajes en este foro Usted No puede editar sus mensajes en este foro Usted No puede crear encuestas en este foro Usted No puede votar en encuestas en este foro |