Discussion:
Utilizar un Recordset en una función pública.
(demasiado antiguo para responder)
Toni
2014-03-03 10:37:06 UTC
Permalink
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
2014-03-03 11:58:41 UTC
Permalink
Hola
¿Que error te da? ¿podrías poner el código para verlo?

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-03-04 08:11:48 UTC
Permalink
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
Post by José Mª Fueyo
Hola
¿Que error te da? ¿podrías poner el código para verlo?
Salu2
--
José Mª Fueyo
[MS MVP Access]
José Mª Fueyo
2014-03-04 10:08:51 UTC
Permalink
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...

Salu2
--
José Mª Fueyo
[MS MVP Access]
José Mª Fueyo
2014-03-05 10:24:28 UTC
Permalink
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)

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-03-10 13:48:58 UTC
Permalink
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
2014-03-10 17:05:31 UTC
Permalink
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

Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-03-12 10:02:38 UTC
Permalink
El error no se da en la ejecución del código.
Es de sintaxis, cuando ejecuto la depuración del còdigo:

Private Sub CmdInforme_Click()

Dim sFormName As String
Dim sReportName As String

sFormName = "OVPExp_1"
sReportName = "Historial_Pral"

ObrirInformes (sFormName,sReportName)

End Sub


Gracias
Post by José Mª Fueyo
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
Salu2
--
José Mª Fueyo
[MS MVP Access]
Toni
2014-03-13 07:22:33 UTC
Permalink
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
Post by José Mª Fueyo
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
Salu2
--
José Mª Fueyo
[MS MVP Access]
Continúe leyendo en narkive:
Loading...