Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Utilizar un Recordset en una función pública.

79 views
Skip to first unread message

Toni

unread,
Mar 3, 2014, 5:37:06 AM3/3/14
to
Buenas de nuevo,

Office 2007.

He diseñado una función pública en un formulario continuo que realiza diferentes acciones y calculos sobre tablas temporales, a partir de los registros del formulario, que captura con un recordset rst = me.recordset.

Ahora me doy cuenta que esta misma instrucción me podria servir en otras partes de la base de datos, en otros formularios.

He intentado pasar esta función pública a un mòdulo, para poder llamarla desde otros formularios, però el origen del recordset da un error.

Como puedo resolver esta duda sin tener que copiar toda la instrucción en cada formulario?

Muchas gracias


José Mª Fueyo

unread,
Mar 3, 2014, 6:58:41 AM3/3/14
to
Hola
¿Que error te da? ¿podrías poner el código para verlo?

Salu2
--
José Mª Fueyo
[MS MVP Access]

Toni

unread,
Mar 4, 2014, 3:11:48 AM3/4/14
to
El error es el siguiente:

Error de compilación. El uso de la palabra clave Me no es válido.


El código en el formulario:

Private Sub CmdInfInsp_Click()
Dim sFormName As String
sFormName = "Historial_Pral"
ObrirInformes (sFormName)
End Sub


Y el código ObrirInformes:

Public Sub ObrirInformes(sForm As String)
Dim rst As Recordset
...
Set rst = Me.Recordset
...
Set rst = Nothing
End Sub



El dilluns 3 de març de 2014 12:58:41 UTC+1, José Mª Fueyo va escriure:

José Mª Fueyo

unread,
Mar 4, 2014, 5:08:51 AM3/4/14
to
Hola
No puedes usar Me en un módulo externo. Me, si miras en la ayuda, se refiere al propio objeto contenedor (los módulos asociados al formulario son módulos de clase, usados para definir objetos).
Podrías pasar por ejemplo el nombre del formulario, y utilizar la colección forms para seleccionar el formulario desde el cual quieres usar esa función/método.

Forms(NombrePasadoComoParametro).Recordset

etc...

José Mª Fueyo

unread,
Mar 5, 2014, 5:24:28 AM3/5/14
to
Hola de nuevo
Se me ha ocurrido, que también podrías declarar un argumento de la función/procedimiento de tipo DAO.Recordset, y al llamarlo desde el formulario pasarle Me.Recordset

public Function MiPrueba(MiRS as DAO.Recordset)
...
Ene Function

Dentro del módulo del formulario:

dim MiResultado
MiResultado=MiPrueba(Me.Recordset)

Toni

unread,
Mar 10, 2014, 9:48:58 AM3/10/14
to
Gracias Jose Mª,

De nuevo una pregunta relacionada. En esa misma función quiero declarar dos variables:

Public Sub ObrirInformes(sFormRecordset As String, sReport As String)


Para poder abrir diferentees informes con los datos de diferentes formularios.

Però me da un error de compilación en la linea de la rutina que llama a la función:

Private Sub CmdInfInsp_Click()
Dim sFormName, sReportName As String
sFormName = "OVPLocalitzador"
sReportName = "Historial_Pral"

ObrirInformes (sFormName, sReportName)
End Sub


El error és 'de compilación. Se esperaba: = '

Porqué no puedo llamar a esta función con dos variables?

Gracias

José Mª Fueyo

unread,
Mar 10, 2014, 1:05:31 PM3/10/14
to
Hola
¿En que linea te da el error? por otra parte, sí no defines explicitamente el tipo, es como si lo declararas como variant. Convierte

Dim sFormName, sReportName As String

a

Dim sFormName as String, sReportName As String
Message has been deleted

Toni

unread,
Mar 13, 2014, 3:22:33 AM3/13/14
to
El error no se da en la ejecución del código. Es de sintaxis, cuando entro la linea que llama a la función ObrirInformes, y también cuando ejecuto la depuración del còdigo.

Si modifico la función pública ObrirInformes a una sola variable, y la ejecuto desde la función privada - ObrirInformes (sFormName) -, entonces funciona:


Private Sub CmdInforme_Click()

Dim sFormName As String
Dim sReportName As String

sFormName = "OVPExp_1"
sReportName = "Historial_Pral"

ObrirInformes (sFormName,sReportName)

End Sub


Gracias




El dilluns 10 de març de 2014 18:05:31 UTC+1, José Mª Fueyo va escriure:
0 new messages