Visual Basic - definir recorset como variable global

Life is soft - evento anual de software empresarial
 
Vista:

definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 16:44:12
Hola programadores:

necesito lo siguiente y no se como hacerlo, por favor ayuda:
tengo en una funcion que llena un recodset con varios registros, pero necesito que estos registros permanezcan aun cuando se haya salido de la funcion, se me ocurrio crear una variable global del tipo recordset, y una vez hecha la consulta SQL llenar esta variable, para poder manejarla en otras funciones. pero no funciona, este el el codigo:
'DECLARACION VARIABLE GLOBAL
Dim registros As Recordset

'FUNCION
f_Inicio.dtreserva.DatabaseName = App.Path & "\siv.mdb"
f_Inicio.dtreserva.RecordSource = ("SELECT .......")
f_Inicio.dtreserva.Refresh

"LA SIGUENTE SENTENCIA VB ME DICE QUE SE ESTA OCUPANDO MAL LA PROPIEDAD Y ME DETIENE EL PROCESO":

registros = f_Inicio.dtreserva.Recordset

COMO DEBO HACERLO ENTONCES?

GRACIAS POR SU AYUDA

BUKA
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

RE:definir recorset como variable global

Publicado por Ángel (42 intervenciones) el 19/11/2003 17:49:24
Creo que lo único que debes de hacer es igualar los dos recordset, si esto no te funciona te recomiendo que en la función devuelvas el recordset y lo iguales a una variable de tipo recordset local a la función donde necesitas esos datos. Y por supuesto borrar la variable global de tipo recordset si ya no te hace falta.

Suerte, espero que te valga la idea.
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

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 18:30:37
Hola,
bien , pero como igualo los recordset?
mira aqui te envio un fragmento de mi codigo :

f_Inicio.dtreserva.DatabaseName = App.Path & "\siv.mdb"
f_Inicio.dtreserva.RecordSource = ("SELECT......")
f_Inicio.dtreserva.Refresh
Set registros = f_Inicio.dtreserva.Recordset
(registros esta declarado como un variable recordset)

si bien no VB no me tira error, creo que no me toma en cuenta la variable como un recordset.
luego utilizo:
With registros
If .Recordcount>0 Then
.......
end if
end With
Pero el Recorcount no me marca nada, cuando me posiciono sobre el en tiempo de ejecucion, es decir no me toma la variable registros como un recordset.

Entonces no se donde esta mal.

Buka


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

RE:definir recorset como variable global

Publicado por Ángel (42 intervenciones) el 19/11/2003 19:17:29
Yo lo hice con una función me ha funcionado, la asignación la hago con set. un ejemplo

Dim Rs1 as RecordSet

Set Rs1 = CopiarRecordSet

=================

Private Function CopiarRecordSet(sCadenaBuscar as string) As Recordset
Dim Rs as RecordSet
' Hacemos la consulta deseada
Set CopiarRecordSet = Rs
End Function

Espero haberme explicado ahora.

Suerte.
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

RE:definir recorset como variable global

Publicado por Fabian (501 intervenciones) el 19/11/2003 20:01:34
Mira yo hago esto:
En el Modulo escribes esto:
Global Rs as Recordset
Public Sub Cursores(ByRef RSn As Recordset, ByVal SQL As String, ByRef Cnn As Connection)
On Error GoTo errRsn
Set RSn = New Recordset
RSn.CursorLocation = adUseClient
RSn.CursorType = adOpenKeyset
RSn.LockType = adLockOptimistic
RSn.Open SQL, Cnn
Exit Sub
errRsn:
Dim strMsje$
If (Err.Number <> 0) Then
strMsje = "Error Nro:" & Str(Err.Number) & vbCrLf & _
"Originado en:" & Err.Source & vbCrLf & _
"Detalle(s):" & Err.Description & vbCrLf
MsgBox strMsje, vbCritical, "Error al Crear Cursor"
End
End If
End Sub

y luego en tu formulario solo lo llamas:
Cursores Rs,"Select * From MiTabla",Cn
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
0
Comentar

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 20:32:01
fabian,

pero en realida que hace tu función?

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

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 21:13:09
Hola fabian:
Lo estoy intentando, cree la variable de tipo connection, para pasarla como referencia, pero ni idea de como le asigno la coneccion a esta variable, serias tan amable de explicar mejor si es con un ejemplo

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

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 20:33:54
Angel

lo intentare, te comento cuando lo tenga

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

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 20:59:59
Angel,
No funciono, chekea el codigo y dime que puede estar mal:
/*****FUNCION******/
Private Sub llenacliente()
Dim registros As Recordset
Set registros = CopiarRecordSet

/*****FUNCION EN MODULO*******/
Private Function CopiarRecordSet() As Recordset
Dim Rs As Recordset
f_Inicio.dtreserva.DatabaseName = App.Path & "\siv.mdb"
f_Inicio.dtreserva.RecordSource = ("SELECT ......")
f_Inicio.dtreserva.Refresh
Set Rs = f_Inicio.dtreserva.Recordset
CopiarRecordSet = Rs
End Function
/***********************************************************/
El error que me arroja es:Se requiere un objeto, deteniendoce en Set registros = CopiarRecordSet
Ni siquiera alcanza a entrar en a la funcion CopiarRecordSet

Espero puedas ayudarme
Gracias denuevo
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

RE:definir recorset como variable global

Publicado por Fabian (501 intervenciones) el 19/11/2003 21:35:09
Mira lo que tu quieres es crear un recordet y que este activo en toda tu aplicacion vale decir que lo puedas utilizar para todos tus formularios.
Es muy sencillo abre el recordset en el formulario de inicio de tu programa y lo cierras cuando cierres tu aplicacion.
Cursores Rs,"Select * From MiTabla",Cn
Cn es la conexion a la Base de datos, esto es lo que yo hago:
En tu modulo declara esto:
Global Cn As New Connection
Global Rs As New Recordset
Public Sub ConexionBD()
Set Cn = New Connection
CONExION = App.Path & "\CompraVenta.mdb"
With Cn
.Open "Provider=Microsoft.Jet.OLEDB.4.0; " & _
"Data Source=" & CONExION
End With
end Sub
Public Sub Cursores(ByRef RSn As Recordset, ByVal SQL As String, ByRef Cnn As Connection)
On Error GoTo errRsn
Set RSn = New Recordset
RSn.CursorLocation = adUseClient
RSn.CursorType = adOpenKeyset
RSn.LockType = adLockOptimistic
RSn.Open SQL, Cnn
Exit Sub
errRsn:
Dim strMsje$
If (Err.Number <> 0) Then
strMsje = "Error Nro:" & Str(Err.Number) & vbCrLf & _
"Originado en:" & Err.Source & vbCrLf & _
"Detalle(s):" & Err.Description & vbCrLf
MsgBox strMsje, vbCritical, "Error al Crear Cursor"
End
End If
End Sub
y en tu Formulario de Inicio del Sistema logicamente tienes que Abrir tu BD, asi:
Call ConexionBD
' y ademas abres el Recordset
Cursores Rs, "Select * From MiTabla",Cn
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

RE:definir recorset como variable global

Publicado por Fabian (501 intervenciones) el 19/11/2003 21:35:45
de esta manera tendras el recordset abierto para todo tu sistema hasta que lo cierres como te dije arriba
Ojo que ya no podras utilizar la variable Rs, porque te generaRIA ERROR
POR lo que debes declaras otras variables recordset para abrir otras tablas
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

RE:definir recorset como variable global

Publicado por Buka (94 intervenciones) el 19/11/2003 22:40:10
Por fin!!!
Ya me funciono, todo OK

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