Test Foro de elhacker.net SMF 2.1

Programación => .NET (C#, VB.NET, ASP) => Programación General => Programación Visual Basic => Mensaje iniciado por: ka0s en 23 Agosto 2009, 02:55 AM

Título: Duda Visual Basic + Access
Publicado por: ka0s en 23 Agosto 2009, 02:55 AM
Buenas gente:
Los molesto por lo siguiente. Estoy haciendo un login en VB y quiero que cuando ingrese un usuario y contraseña (que ya estan almacenadas en la base de datos creada en access) me lleve a otro formulario.

Por ahora lo único que tengo es la conexión a la base, pero lo que no tengo ni la más palida idea, es como hacer el IF que diga que si es igual al ID y al PASSWORD entonces muestre el otro formulario.

Private Sub Form_Load()
Dim cnn As ADODB.Connection
Dim sql As String
Dim rs As ADODB.Recordset
Dim ubicacion_base As String
' Crear la conexión
Set cnn = CreateObject("adodb.connection")
cnn.Errors.Clear
cnn.CursorLocation = adUseClient
ubicacion_base = App.Path & "\bdgym.mdb"
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ubicacion_base & ";Persist Security Info=False"
cnn.Open ' abre la conexión
sql = "select * from usuarios"
Set rs = New ADODB.Recordset 'genera la conexion
rs.Open sql, cnn 'accede a la bd


Les dejo el código que tengo y espero que me peudan dar una mano.

Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: MCKSys Argentina en 23 Agosto 2009, 03:01 AM
Hola!

Quizas lo que te convenga es usar la consulta que haces para averiguar si el usuario y la contraseña son válidos.

Por ej:

SELECT * FROM USUARIOS WHERE ((USUARIO = 'PEPE') AND (CLAVE = '123456'))

De esta forma, haces que el motor de bases de datos resuelva el tema por ti. Si devuelve algo, es porque el usuario y la clave existen.

Los dos valores (usuario y clave) son los que ingresa el usuario que quiere ingresar.

Saludos!


Título: Re: Duda Visual Basic + Access
Publicado por: seba123neo en 23 Agosto 2009, 03:11 AM
Cita de: ka0s en 23 Agosto 2009, 02:55 AM
Buenas gente:
Los molesto por lo siguiente. Estoy haciendo un login en VB y quiero que cuando ingrese un usuario y contraseña (que ya estan almacenadas en la base de datos creada en access) me lleve a otro formulario.

Por ahora lo único que tengo es la conexión a la base, pero lo que no tengo ni la más palida idea, es como hacer el IF que diga que si es igual al ID y al PASSWORD entonces muestre el otro formulario.

Private Sub Form_Load()
Dim cnn As ADODB.Connection
Dim sql As String
Dim rs As ADODB.Recordset
Dim ubicacion_base As String
' Crear la conexión
Set cnn = CreateObject("adodb.connection")
cnn.Errors.Clear
cnn.CursorLocation = adUseClient
ubicacion_base = App.Path & "\bdgym.mdb"
cnn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & ubicacion_base & ";Persist Security Info=False"
cnn.Open ' abre la conexión
sql = "select * from usuarios"
Set rs = New ADODB.Recordset 'genera la conexion
rs.Open sql, cnn 'accede a la bd


Les dejo el código que tengo y espero que me peudan dar una mano.

Saludos!

por favor cambia ese codigo, no podes estar creando la conexion con un objeto asi, saca el CreateObject ese...si ya la tenes declarada a la conexion...no es recomendable declarar la conexion en el load del formulario , usa un modulo y ponelo en el Main...busca por ahi codigos de ADO y fijate como lo hacen asi lo adaptas.y es muy basica la pregunta diria yo , aparte hace no muhcos post atras ya preguntaron lo mismo y se resolvio el tema...buscalo.

saludos.
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 23 Agosto 2009, 03:24 AM
Oks, ahora voy a tratar de modificarlo y buscar lo que me dijiste.
Recién estoy empezando en esto de base de datos. Busqué muchas guías pero ninguna que encontré me servía.

Voy a buscar lo que me dijiste,
cualquier cosa que sea útil diganmela por favor.

Muchas gracias!
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 23 Agosto 2009, 05:26 AM
La verdad seba123neo que no encontré cual era el que me dijiste.
Si me pudieras orientar o decirme que parte del código modificar sería útil.

Como asi también algun manual donde explique de 0 el manejo de base de datos ADO, pasandole consultas SQL sencillas como para lo que quiero hacer. Un LOGIN.

Desde ya muchas gracias

Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: SRVAM en 23 Agosto 2009, 12:26 PM
hola ka0s, mira, lo que seba te dice es que para abrir la base de datos, uses un modulo.bas y ahi te creas una funcion donde abres la base de datos.
luego en el form load o en el initialize haces la llamada a esa funcion, cuando introduzcas los datos de nomrbe de usuario y contraseña, haces un findfirst al nombre de usuario y si lo encuentra compruebas la contraseña, si la condicion es verdadera entonces cierras el formulario de login y haces un formx.show del formulario que quieras abrir ahora

saludos
Título: Re: Duda Visual Basic + Access
Publicado por: jack06 en 23 Agosto 2009, 12:34 PM
http://www.megaupload.com/?d=9QSOU62Y
Título: Re: Duda Visual Basic + Access
Publicado por: cassiani en 23 Agosto 2009, 13:34 PM
Cita de: ka0s en 23 Agosto 2009, 05:26 AM
La verdad seba123neo que no encontré cual era el que me dijiste.
Si me pudieras orientar o decirme que parte del código modificar sería útil.

Como asi también algun manual donde explique de 0 el manejo de base de datos ADO, pasandole consultas SQL sencillas como para lo que quiero hacer. Un LOGIN.

Desde ya muchas gracias

Saludos!

y donde buscaste? acá han consultado eso cantidades de veces...
Citar*http://www.elguille.info/vb/ejemplos/ADO_sin_datacontrol.htm

Citar*http://foro.elhacker.net/programacion_vb/condicional_para_elegir_formulario_con_bd-t263791.0.html;msg1286482#msg1286482
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 23 Agosto 2009, 17:14 PM
cΔssiΔnі si digo que busqué, busqué.... Encontré varios del Guille y de recursosvisualbasic pero no los entendía o no salía lo que quería hacer.

Jack06, muchas gracias!!
Era algo asi lo que buscaba.

Mil gracias a todos

Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 24 Agosto 2009, 17:25 PM
Buenas...
Vuelvo a molestar de nuevo por acá para no abrir un tema nuevo, ya que tiene que ver con lo mismo. VB y ACCESS.

Mi problema ahora es que ya pude hacer el login, pero quiero que cuando pase ese login, me lleve a otro form y en una grilla mostrar los valores que figuren en la tabla creada en ACCESS.

Tengo 2 formularios. FRMLOGIN y FORM1 (donde se encuentra la grilla)
Un módulo: Donde genero la conexión.

Pongo los sources para que me indiquen por favor que es lo que hago mal, ya que lo que pongo O ESTA MAL y me dice algo asi como que se requiere un objeto, o que esta abierto, o que esta cerrado, como también arroja a veces un ERROR donde dice que la memoria no se puede "read" y se muere mi VB.


MODULO
Código (vb) [Seleccionar]
Public CN As ADODB.Connection 'Variable para la conexion a la BDD

Sub Conectar()
    Dim RST As New ADODB.Recordset
    Set CN = New ADODB.Connection
    Set RST = New ADODB.Recordset
   
    With CN
        .ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                            App.Path & "\bdgym.mdb" & ";Persist Security Info=False"
        .CursorLocation = adUseClient
        .Open
    End With
End Sub


FRMLOGIN
Código (vb) [Seleccionar]
Dim RST As New ADODB.Recordset '\\ -- Variable de Tipo Recordset.

Private Sub cmdborrar_Click()
txtusuario.Text = ""
txtpassword.Text = ""
End Sub

Private Sub cmdlogin_Click()
'-------------LOGIN DE USUARIO-------------
'Busca en la tabla si existe el usuario.
RST.Find "id ='" & Trim(txtusuario.Text) & "'"
'Si no existe
If RST.EOF Then
    MsgBox "No existe el usuario indicado", vbExclamation, "ERROR"
Else
'Si existe, verifica los passwords y si es correcto nos lleva al formulario Principal
    If RST!Password = Trim(txtpassword.Text) Then
        Unload frmlogin
        Load Form1
        Form1.Show
    Else
        'Sino, muestra mensaje de error
        MsgBox "Clave incorrecta", vbExclamation, "ERROR"
    End If
End If
End Sub

Private Sub Form_Load()
Call GeneraConexion

End Sub

Sub GeneraConexion()
    Set RST = New Recordset
    Call Conectar
    RST.CursorLocation = adUseClient
    RST.Open ("SELECT * FROM Usuarios ORDER BY id"), CN, adOpenKeyset, adLockOptimistic
End Sub



FORM1
Código (vb) [Seleccionar]
Private Sub reload()
Set rst = New ADODB.Recordset
rst.Open sql, CN
Set grilla.Recordset = rs
grilla.Refresh
End Sub

Private Sub Form_Load()
sql = "select * from socios order by id"
Call reload
End Sub


Tengo ya creadas las 2 tablas en access, como dije el login lo pasa perfectamente.
Pero después no me muestra en la grilla la tabla SOCIOS.

Muchas gracias!

PD: Dejo una imágen del mensaje de error que hace que muera el VB

(http://img2.imageshack.us/img2/1236/erroruti.png)

Ahora si, Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: jack06 en 24 Agosto 2009, 19:43 PM
a uhmm por lo visto creo k estas cometiendo dos posibles problemas

1.- Si te fijas que en el modulo estas poniendo la conexion a la BDD, eh en el form1 no lo estas llamando, entonces el el form load ponle Call Conectar.

2.- Y si te fijas en ese Sub Reload estas declarando una nueva conexion y fijate k stas poniendo RST y fijate que tu estas poniendo asi Set grilla.Recordset = rs, te comistes la t  :xD

FORM1
Código (vb) [Seleccionar]
Private Sub reload()
Set rst = New ADODB.Recordset
rst.Open sql, CN
Set grilla.Recordset = rst '<----------Te falto la T
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar '<--------- Te Falto esa
sql = "select * from socios order by id"
Call reload
End Sub


weno creo que esos dos era el problema cualkier cosa avisa Salu2  :¬¬
Título: Re: Duda Visual Basic + Access
Publicado por: cassiani en 24 Agosto 2009, 19:46 PM
ah bueno, lo que pasa por no hacer uso del "option explicit" ...... pero ellos creen que es broma xDD
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 24 Agosto 2009, 21:39 PM
Cita de: jack06 en 24 Agosto 2009, 19:43 PM
a uhmm por lo visto creo k estas cometiendo dos posibles problemas

1.- Si te fijas que en el modulo estas poniendo la conexion a la BDD, eh en el form1 no lo estas llamando, entonces el el form load ponle Call Conectar.

2.- Y si te fijas en ese Sub Reload estas declarando una nueva conexion y fijate k stas poniendo RST y fijate que tu estas poniendo asi Set grilla.Recordset = rs, te comistes la t  :xD

FORM1
Código (vb) [Seleccionar]
Private Sub reload()
Set rst = New ADODB.Recordset
rst.Open sql, CN
Set grilla.Recordset = rst '<----------Te falto la T
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar '<--------- Te Falto esa
sql = "select * from socios order by id"
Call reload
End Sub


weno creo que esos dos era el problema cualkier cosa avisa Salu2  :¬¬


Es verdad, no me di cuenta de eso.
Arreglé como me dijiste pero seguía teniendo problemas.
El error que arrojaba ahora es:

"Runtime error '3001': Argumentos incorrectos, fuera del intervalo permitido o en conflicto con otros"

Le dí depurar y la línea que marcaba con error es la siguiente:

Código (vb) [Seleccionar]
Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open sql, CN 'ESTA LINEA ARROJABA EL ERROR!!
Set grilla.Recordset = RST
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload
End Sub

y lo que hice fue borrar la variable SQL del form_load y poner el comando directamente, y ahí si funciono y cargó la grilla completamente, así:

Código (vb) [Seleccionar]
Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open "select * from socios order by id", CN '-->LO MODIFIQUE DIRECTAMENTE
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

Private Sub Form_Load()
Call Conectar
'ACA ESTABA LA VARIABLE Y LA QUITÉ!
Call reload
End Sub




Alguien sabe porque era ese error ya que estamos?

Desde ya muchas gracias a todos por la ayuda, me lo solucionaron perfectamente!

Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: cassiani en 24 Agosto 2009, 22:32 PM
declaraste "sql" en algun lado? es una variable local o global? insisto con lo del option explicit, nunca le estas pasando parámetros a tu rutina.

lo puedes pasar como parametro:
CitarPrivate Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload(sql) <--
End Sub

Private Sub reload(Byval sql as string) <--
Set RST = New ADODB.Recordset
RST.Open sql, CN
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

o declarandolo como global dentro del formulario
Citar
dim sql as string <--
Private Sub Form_Load()
Call Conectar
sql = "Select * from socios order by id"
Call reload()
End Sub

Private Sub reload()
Set RST = New ADODB.Recordset
RST.Open sql, CN
Set grilla.Recordset = RST '
grilla.Refresh
End Sub

saludos!!
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 24 Agosto 2009, 23:23 PM
Ahora sí, no molesto más por ahora.
Muchas gracias cΔssiΔnі !!
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 26 Agosto 2009, 20:42 PM
Gente sigo escribiendo en este post para no abrir otros al pedo.
Mi duda es la siguiente:
Tengo en la grilla ya cargada varios datos, y cuando marco un campo de la grilla o sea seleccionarlo y después ir al BOTON BORRAR, lo que se me borra a mi es el REGISTRO QUE ESTA ARRIBA DE TODO y no el que seleccione.

¿Porque puede ser esto?

Les muestro el source:

Código (vb) [Seleccionar]
Private Sub grilla_Click()
'Si la grilla esta vacia
If RST.EOF = True Then
'Muestra mensaje
   MsgBox "La grilla está vacia", vbInformation, "Información"
Else
'Sino, Almacena el valor del registro
borrarregistro = RST!Id
End If
End Sub


Y acá pongo el BOTON BORRAR:

Código (vb) [Seleccionar]
Private Sub cmdborrar_Click()
'Borra el registro seleccionado
cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la función LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


O sea supuestamente el código está bien, pero PROBÉ PONIENDO
msgbox rst!id cuando clickeaba y lo que me figuraba siempre era el VALOR DE ID DEL PRIMERO DE TODOS de la grilla Y NO EL QUE MARCABA  :-\

Espero que me hayan entendido, sino trato de ser más claro.

Muchas gracias!
Título: Re: Duda Visual Basic + Access
Publicado por: ssccaann43 © en 26 Agosto 2009, 22:04 PM
Código (vb) [Seleccionar]

Private Sub cmdborrar_Click()'Borra el registro seleccionado
<->cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la funcion LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


Coloca un punto de Interrupción allí <-> y verifica que valor tiene borrarregistro.

Por otro lado, te recomiendo que en vez de borrarregistro, indiques el index donde te encuentras posicionado en la grilla.

Por ejemplo usando un listview sería. ListView1.SelectedItem.Text
Título: Re: Duda Visual Basic + Access
Publicado por: MCKSys Argentina en 26 Agosto 2009, 22:09 PM
Cita de: ssccaann43 en 26 Agosto 2009, 22:04 PM
Código (vb) [Seleccionar]

Private Sub cmdborrar_Click()'Borra el registro seleccionado
<->cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la funcion LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


El error esta en la SQL (falta el "*"). Deberia ser:

cn.Execute ("DELETE * FROM socios where id= ") & borrarregistro, cn

Saludos!
Título: Re: Duda Visual Basic + Access
Publicado por: ssccaann43 © en 26 Agosto 2009, 22:12 PM
Amigo, deberías hacer un cursito de Querys.

La instrucción DELETE no lleva "*", solo si el motor de BD es Access lo permite. Pero no se usa ya que no le dices en el query si deseas eliminar solo unos campos o todo, no tienes la potestad para hacerlo, con esa instrucción eliminas todo el registro. Espero haberme hecho entender. Y no lo tomes a mal, pero leete un manual de BD. Hay Querys que podrían soprenderte.
Título: Re: Duda Visual Basic + Access
Publicado por: MCKSys Argentina en 26 Agosto 2009, 22:19 PM
OK, pero sólo porque tú lo dices...


Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 27 Agosto 2009, 00:22 AM
Cita de: ssccaann43 en 26 Agosto 2009, 22:04 PM
Código (vb) [Seleccionar]

Private Sub cmdborrar_Click()'Borra el registro seleccionado
<->cn.Execute ("DELETE FROM socios where id= ") & borrarregistro, cn
'Llama a la funcion LOAD para que cargue la grilla nuevamente.
'Por lo tanto SE ACTUALIZA.
Call Form_Load
End Sub


Coloca un punto de Interrupción allí <-> y verifica que valor tiene borrarregistro.

Por otro lado, te recomiendo que en vez de borrarregistro, indiques el index donde te encuentras posicionado en la grilla.

Por ejemplo usando un listview sería. ListView1.SelectedItem.Text

Traté de hacer esto haciendo GRILLA.OBJECT que es lo que seleccionaría lo que marcás, pero me di cuenta que si selecciono un nombre, o una edad tiraba error. Ya que no pertenece al ID.

O sea cuando marcaba de la tabla un ID, funcionaba perfectamente, pero yo quiero que de la grilla, cuando marques cualquier campo y le des a BORRAR, te borre todo.

Por eso lo estaba haciendo con ID.

:S

Alguna otra opción? Igualmente muchas gracias!
Título: Re: Duda Visual Basic + Access
Publicado por: ssccaann43 © en 27 Agosto 2009, 00:31 AM
Pues debes ubicar el ID de lo que seleccionas. y luego de ubicarlo ejecutar la consulta.
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 27 Agosto 2009, 04:59 AM
Cita de: ssccaann43 en 27 Agosto 2009, 00:31 AM
Pues debes ubicar el ID de lo que seleccionas. y luego de ubicarlo ejecutar la consulta.

Creo que no me comprendiste. Voy a tratar de ser más claro:

En la grilla, seleccione el CAMPO que seleccione quiero que al darle BORRAR, se borre.

Pero que pasa? Al hacer lo que hice antes RST.OBJECT solamente funciona el codigo del DELETE cuando clickeo en ID.

Pero si clickeo en Nombre, edad, etc... TOMA EL NOMBRE, pero el DELETE no funciona y tira error ya que este funciona solo con ID.

Tendría que haber otra forma.
Yo tenía entendido que creando una variable y poniendo en el evento click de la grilla:

variable = RST!ID

y después en el DELETE usar esa VARIABLE, pero no funcionó como explique más atrás. :(

Espero que haya quedado más claro.
Gracias igualmente ssccaann43
Título: Re: Duda Visual Basic + Access
Publicado por: seba123neo en 27 Agosto 2009, 05:13 AM
ovbio, pues tenes que tomar el ID de la columna seleccionada, pero en la columna donde esta el ID del registro...eso de hacer Call Form_Load no es nada bueno, mejor create una funcion que te carge todos los datos en el listview y llamas siempre que quieras actualizar a esa funcion. tambein al listview ponele la propiedad FullRowSelect = True asi te selecciona toda la fila y no el primer item.

saludos.
Título: Re: Duda Visual Basic + Access
Publicado por: ka0s en 27 Agosto 2009, 05:33 AM
Cita de: seba123neo en 27 Agosto 2009, 05:13 AM
ovbio, pues tenes que tomar el ID de la columna seleccionada, pero en la columna donde esta el ID del registro...eso de hacer Call Form_Load no es nada bueno, mejor create una funcion que te carge todos los datos en el listview y llamas siempre que quieras actualizar a esa funcion. tambein al listview ponele la propiedad FullRowSelect = True asi te selecciona toda la fila y no el primer item.

saludos.

seba123neo, yo estoy usando MSFLEXGRID.
Igualmente busqué alguna propiedad parecida a lo que vos comentabas y encontré
SelectionMode = FlexSelectionByRow, entonces al poner eso me marca toda la fila
y ahora SI FUNCIONA EL PRIMER CODIGO DE TODO QUE HABÍA PUESTO.

Ya que al marcar toda la fila lo que me toma es el ID. Y quedó solucionado!! :D

Muchas gracias seba, comentando otra cosa, me ayudaste a solucionar esto.
Gracias a los demás igualmente.

Saludos!

PD: Seguiré poniendo las dudas que me sigan surgiendo por acá. Está bien? O empiezo a crear nuevos?
Título: Re: Duda Visual Basic + Access
Publicado por: ssccaann43 © en 27 Agosto 2009, 15:44 PM
Eso depende de la duda. Y si te explicaste bien, quien no comprendió fuiste tú. De igual manera estamos a la orden. Pero si te surge una duda nueva, has un nuevo post.