-
Hola. lo primero q queria consultarles es si la idea de crear un modulo es funcional, lo que pasa es que en el programa que estoy haciendo tengo que llamar la base de datos desde varios formularios y en muchas ocaciones escribir el mismo codigo una y otra vez para cada formulario, me preguntaba yo si haciendo un modulo o una clase puedo predeterminar este procedimiento para no tener que estarlo digitando en todos los formularios por que me parece muy tedioso estar digitando todos esos recordsets, si se puede como ejecuto ese procedimiento desde el formulario?, y seria una clase o seria un modulo? un modulo puede tener varios procedimientos?
la otra pregunta es que intento acceder a una base de datos pero cuando ejecuto e codigo me dice: "Invalid Outside Procedure", yo ya habia superado eso pero hacia ratico que no trabajaba con vb, alguien sabe que puede pasar? aca le dejo el codiigo
Public DBGeneral As Database
Public DBLocation As String
DBLocation = "e:\projects\barman\general.mid"
Set DBGeneral = opendatabase(DBLocation)
Plz ayudenme que estoy crudo con esto y tengo que terminarlo pronto, mil gracias a todos
Edited by: CaBL3
-
MMMM coloque el codigo en el formulario en la seccion load form y me funciono, la pregunta seria, no puedo hacer un modulo y llamarlo a ejecutarse cada vez que lo necesite? es que de verdad que es muy largo repetir esto en todos los formularios
-
Por supuesto que puedes colocar uno o mas procedimientos y/o funciones en un modulo y tenerlos disponibles desde cualquier formulario donde los necesites, sin tener que escribir el codigo una y otra vez...
Creo que ese esuno de losobjetivos de los modulos...
Lo mas facil es usar un modulo estandar (.bas) ...
Los Subs o Funciones que quieras usar desde otros puntos del proyecto deberan ser PUBLIC. Si los declaras como PRIVATE, entonces dichos Subs o Funciones seran accesibles solo para las SUBs o Funciones declarados en el mismo modulo ...
Asi que...
En un modulo estandar colocas tu codigo para abrir la base de datos ...
En este caso, una funcion que regrese como resultado una base de datos...
'''''''''''''''''''''''''''''
Public Function Abrir_MDB() as DataBase
Dim DBLocation As String
On Error GoTo Error_MDB
DBLocation = "e:\projects\barman\general.mid"
SetAbrir_Mdb = OpenDatabase(DBLocation)
Exit Function
Error_MDB:
MsgBox "No se pudo abrir " & DBLocation
End Function
'''''''''''''''''''''''''''''
Y en donde lo ocupes -en tu formulario, supongo- ...
Dim oMDB As Database
Set oMDB = Abrir_MDB
If oMDB Is Nothing Then
' Algunas acciones para en caso de error
End If
'''''''''''''''''
Es solo una idea basica, pero alli esta ...
Saludos !!
-
Otra pregunta tengo este codigo, usando el comando seek, pero cuando le doy click al boton command1 me sale: error 424 object required, mmm tal vez hable del index, pero yo cree el index y esta acttivo, sera eso? o que sera?, ayuda plzzzzz
Private Sub Command1_Click()
RSUsuarios.Seek "=", Text1.Text, Text2.Text
If RSUsuarios.NoMatch Then
MsgBox "Usuario no encontrado o contraseña invalida", vbCritical, "Atención"
Else
Load General
General.Visible = True
Unload LogIn
End If
End Sub
Private Sub Command2_Click()
MsgBox "Debe introducir un nombre de usuario y contraseña, si no los tiene consulte a un administrador", vbCritical, "Atención"
End Sub
Private Sub Command3_Click()
End
End Sub
Private Sub Form_Load()
Dim oMDB As Database
Set oMDB = Abrir_MDB
If oMDB Is Nothing Then
MsgBox "Imposible encontrar la base de datos", vbCritical, "Atención"
End If
Set RSUsuarios = Abrir_MDB.OpenRecordset("Usuarios", dbOpenTable)
RSUsuarios.Index = "UsPass"
RSUsuarios.MoveFirst
End Sub
btw, text1 y text2 son el nombre de usuario y la contraseña y uspass es
el index que esta con dos campos, el de usuario y el de contraseña,
sera por que no defino lo que hay en text1 y 2 como variables string?, mmm no se no se me ocurre que este generando el error, la idea de este formulario es que busque en una base de datos el nombre de usuario y la contraseña
Edited by: CaBL3
-
Private Sub Form_Load()
Dim oMDB As Database
Set oMDB = Abrir_MDB
If oMDB Is Nothing Then
''''''''''''''''''
Debes declarar las variables oMDB y RSUsuarios en la seccion global de la Form (arriba,antes de los procedimientos) para que puedan ser visibles para todos los SUBs y/o Funciones en la forma...
Aqui lo pusiste dentro del Form_Load y solo es visible dentro de ese SUB. Por eso te envia el error "Object Required", porque el RSUsuarios no existe en el momento de realizar la operacion del SEEK ...
Otra cosilla...
Set RSUsuarios = Abrir_MDB.OpenRecordset("Usuarios", dbOpenTable)
RSUsuarios.Index = "UsPass"
RSUsuarios.MoveFirst
''''''''''''''''''''
Dado de que ya declaraste previamente una variable oMDB As Database, usa esa variable para abrir tus recordsets, y no la funcion global Abrir_MDB....
Es decir, usa lo siguiente...
Set RSUsuarios = oMDB.OpenRecordset("Usuarios", dbOpenTable)
RSUsuarios.Index = "UsPass"
RSUsuarios.MoveFirst
''''''''''''''
Ademas ...
Al finalizar tu form (en el Form_Unload podria ser), no te olvides de cerrar las tablas y/o bases de datos que usaste y liberar la memoria asignada a estas ...
En lugar de ejecutar un simple "END" en tu Command3_Click, ejecuta un "Unload Me", y en el Form_Unload colocas lo siguiente ...
''''''''''''''''
Private Sub Form_Unload()
RSUsuarios.Close
oMDB.Close
Set oMDB = Nothing
Set RSUsuarios = Nothing
End Sub
''''''''''''''''''
De esta manera te aseguras que al descargar tu forma (y terminar en su caso la aplicacion), las bases de datos y tablas que usaste se cerraron correctamente, y evitas posibles problemas de corrupcion o de archivos abiertos cuando ya no estan en realidad ocupandose ...
Saludos !Edited by: Semper