Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

2 preguntitas...

Estas en el tema de 2 preguntitas... en el foro de Visual Basic clásico en Foros del Web. hola! Estoy empesando a hacer un programita que se conecta con una base de datos de Access 200, pero tuve que aprender primero a hacer ...
  #1 (permalink)  
Antiguo 12/11/2005, 17:30
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
2 preguntitas...

hola!
Estoy empesando a hacer un programita que se conecta con una base de datos de Access 200, pero tuve que aprender primero a hacer la coneccion ADO sin datacontrol (lo que me consto un huevo :P), por ahoras solo voy haciendo la pantalla inicial donde tenes que poner el usuario y la contraseña, y tengo un problema. Cuando el usuario no existe, me tira un error de que el EOF y el BOF del Recordset son iguales a true y se me cierra (Error '3021' en tiempo de ejecucion). Como puedo hacer que rire un cartelito de que el usuario no existe. Pongo el codigo:
Código:
    Dim Data As New ADODB.Connection
    Dim Clave As New ADODB.Recordset
Private Sub Command1_Click()
    With Clave
    .ActiveConnection = Data
    .Open ("SELECT * FROM Users WHERE User='" & Text1 & "'")
    End With
    If Clave!Clave = Passwd Then
        MsgBox "Contraseña Correcta!"
    ElseIf (Clave.BOF = True) And (Clave.EOF = True) Then
        MsgBox "Usuario Inexitente"
    Else
        MsgBox "Contraseña Incorrecta"
    End If
    Clave.Close
End Sub

Private Sub Form_Load()
    Data.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
      App.Path & "\" & "prueba.mdb;Persist Security Info=False;JET OLEDB:DATABASE PASSWORD=ado"
    Data.Open
End Sub
probe haciendo ese if, pero no funcionó, me sigue tirando un error que me cierra el programa.

la segunda pregunta es: ¿Como puedo hacer para que al escribir la contraseña no se vea lo que se esta escribiendo? osea, que se vea algo tipo "*******"


Gracias!
  #2 (permalink)  
Antiguo 12/11/2005, 21:38
 
Fecha de Ingreso: septiembre-2005
Mensajes: 76
Antigüedad: 18 años, 7 meses
Puntos: 0
aca tenes tus respuestas

Private Sub Command1_Click()
With Clave
.ActiveConnection = Data
.Open ("SELECT * FROM Users WHERE User='" & Text1 & "'")
End With
If Clave.RecordCount = -1 Then ' Si la tabla no tiene registros
MsgBox "Usuario Inexitente"
Else
If Clave!Clave = Passwd Then ' si tiene me fijo si la clave es correcta
MsgBox "Contraseña Correcta!"
Else
MsgBox "Contraseña Incorrecta"
End If
End If
Clave.Close
End Sub


EN los controles txtbox existe un propiedad "Passwordchar" ponele cualquier valor con que quieras que se remplazen las letras *,#,$,%, o el que vos quieras...
__________________
Buby Systems
  #3 (permalink)  
Antiguo 12/11/2005, 21:45
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
Muchas Gracias por esas repuestas...
hago una preguntita mas...
como pongo una sentencia SQL de UPDATE en el vb... no encuentro la forma, va, encontre info muy buena en la web de microsoft, pero esta en ingles, y estoy en lo de un amigo y la voy a leer cuando vuelva a casa...
si alguien me ahorra esa tarea desde ya muchas gracias
  #4 (permalink)  
Antiguo 12/11/2005, 21:55
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
La sintaxis de UPDATE es la siguiente:
Código:
UPDATE tabla SET campo1='valor1', campo2='valor2', campo3='valor3', ...., campoN='valorN' WHERE condicion
Para mas informacion de SQL lee, este pequeño articulo:
Una Aproximacion a SQL
Y para profundizar aun mas lee este tutorial:
¿Que es SQL?

Saludos
  #5 (permalink)  
Antiguo 12/11/2005, 22:04
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
Cita:
Iniciado por jc_moty
La sintaxis de UPDATE es la siguiente:
Código:
UPDATE tabla SET campo1='valor1', campo2='valor2', campo3='valor3', ...., campoN='valorN' WHERE condicion
Para mas informacion de SQL lee, este pequeño articulo:
Una Aproximacion a SQL
Y para profundizar aun mas lee este tutorial:
¿Que es SQL?

Saludos
Muchas garcias che... pero la sintaxis la sé, ya habia leido casi todo el segundo tutorial que pusiste.
Lo que yo preguntoe es como haer que funcione en vb6. Así como para hacer un select hago esto:
Código:
Clave.Open ("SELECT * FROM Users WHERE User='" & Text1 & "'")
¿que tengo que hacer para hacer un UPDATE?
  #6 (permalink)  
Antiguo 12/11/2005, 22:13
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Cita:
If Clave.RecordCount = -1 Then ' Si la tabla no tiene registros
Ojo con esto del RecordCount, yo he intentado usarlo y aunque el RecordSet tenga registros la propiedad siempre devuelve -1.
Lo que podes hacer es lo siguiente:
Código:
If Clave.BOF And Clave.EOF Then
    MsgBox "El Usuario no Existe"
Else
    If Clave!Clave = Passwd Then
        MsgBox "Contraseña Correcta"
    Else
        MsgBox "Contraseña Incorrecta"
    End If
End If
Espero te sirva
Saludos

Última edición por jc_moty; 12/11/2005 a las 22:20
  #7 (permalink)  
Antiguo 12/11/2005, 22:17
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Cita:
Muchas garcias che... pero la sintaxis la sé, ya habia leido casi todo el segundo tutorial que pusiste. Lo que yo preguntoe es como hacer que funcione en vb6.
¿que tengo que hacer para hacer un UPDATE?
Haberlo dicho antes.
Bueno como usas ADO, lo podes hacer asi:
Código:
 Data.Execute "UPDATE tabla SET campo1='valor1', campo2='valor2' WHERE condicion"
Yo asi lo hago y funciona de maravilla.

Última edición por jc_moty; 13/11/2005 a las 09:09
  #8 (permalink)  
Antiguo 13/11/2005, 00:12
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
lo de UPDATE y lo de la contraseña me andubo perfecto, pero lo otro lo probe de todas formas y me sigue tirando el error ese que me cierra el programa.
  #9 (permalink)  
Antiguo 13/11/2005, 02:04
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
bueno, de nuevo acá.
pude solucionar el problema así:
Código:
    On Error Resume Next
    With Usuario
        .ActiveConnection = Data
        .Open ("SELECT * FROM Users WHERE User like'" & Text1 & "'")
    End With
    If Check1.Value = 1 Then
        Data.Execute "UPDATE Users SET Recordar=False"
        Data.Execute ("UPDATE Users Set Recordar=True WHERE User like'" & Text1 & "'")
    Else
        Data.Execute "UPDATE Users SET Recordar=False"
    End If
    If (Usuario.BOF = True) And (Usuario.EOF = True) Then
        MsgBox "Usuario Inexistente"
    Else
        If Usuario!Clave = Passwd Then
            MsgBox "Contraseña Correcta!"
        Else
            MsgBox "Contraseña Incorrecta"
        End If
    End If
    Usuario.Close
agregue ese "On Error Resume Next Arriba del todo"
funciona perfecto. y me di cuenta de una cosa... eso error solo lo tira cuando se quiere "leer" uno de los campos del recordset. en otra parte lo use solo para saber si existia un registro con x condicion, y como no puse en nigun momento RECORDSER!CAMPO no me tira error...

bueno, y ahora me trabe en otra parte... :P pongo esto
Código:
    If cambio = True Then
        With nuevoU
            .ActiveConnection = Data
            .Open ("Select * from users where user like'" & Usuar & "'")
        End With
        If (nuevoU.EOF = True) And (nuevoU.BOF = True) Then
            If Contr = Contr2 Then
                Data.Execute ("Insert Into Users ('User', 'Clave', 'Recordar') VALUES ('" & Usuar & "', '" & Contr & "', 'False')")
            Else
                MsgBox "Las Contraseñas no coinciden"
            End If
        Else
            MsgBox "Ya existe el usuario"
            End If
    Else
        MsgBox "Debes introduir un nuevo usuario y contraseña"
    End If
y cuando pruebo de crear un nuevo usuario me tira el siguiente error: "Run-Time error '-2147217900 (8004e14)':
La instruccion INSERT INTO contiene el siguiento nombre de campo desconicido: "User"."

pero ese campo existe!!! y en la tabla donde yo puse!
alguna idea de que puede ser? :S
  #10 (permalink)  
Antiguo 13/11/2005, 09:04
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Bien, en la instruccion:
Código:
Data.Execute ("Insert Into Users ('User', 'Clave', 'Recordar') VALUES ('" & Usuar & "', '" & Contr & "', 'False')")
simplemente quita las comillas simples en los nombres de los campos; asi:
Código:
Data.Execute ("Insert Into Users (User, Clave, Recordar) VALUES ('" & Usuar & "', '" & Contr & "', 'False')")
Cita:
agregue ese "On Error Resume Next Arriba del todo"
funciona perfecto. y me di cuenta de una cosa... eso error solo lo tira cuando se quiere "leer" uno de los campos del recordset. en otra parte lo use solo para saber si existia un registro con x condicion, y como no puse en nigun momento RECORDSER!CAMPO no me tira error...
Aunque yo no uso RECORDSET!CAMPO, se supone que deberia de funcionar sin problema alguno, porque he visto aplicaciones que hacen uso de eso, y funcionan bien...lo que yo hago para "leer" un campo es esto:
Código:
RecordSet.Fields("campo")
' o bien
RecordSet.Fields(indice_del_campo)
Y jamas me ha dado problemas.

Saludos
  #11 (permalink)  
Antiguo 13/11/2005, 22:24
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
gracias de nuevo, me andubo lo de 'RecordSet.Fields("campo")' perfecto sin tener que poner 'On error resume next'...
lo que ahora me pasa es que cuando quiero crear un nuevo usuario me tira un error de que esta mal la sintaxis del INSRT INTO, y mira que prove hasta ahciendo copy and paste del que pusiste vos :S no sé que pasa...

otras preguntita2 más (:P)

1º)Alguien tiene idea de como ahcer para que un form del programa se vea en el Systray (creo que se llama así el cosito donde aparece la hora), y que si le das doblde click se abra, y con click\click derecho aparesca un menu...???
2º)No saben como se pueden hacer POP-UPs estilo MSN Messenger... que si les doy click me abran un form, y con click derecho se cierren???
  #12 (permalink)  
Antiguo 14/11/2005, 08:11
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Cita:
lo que ahora me pasa es que cuando quiero crear un nuevo usuario me tira un error de que esta mal la sintaxis del INSRT INTO, y mira que prove hasta ahciendo copy and paste del que pusiste vos :S no sé que pasa...
Y, ya probaste quitando el parentesis al llamar al metodo:
Código:
' En lugar de:
Data.Execute("Insert Into Users (User, Clave, Recordar) VALUES ('" & Usuar & "',"  & Contr & ", 'False')")
' Proba asi:
Data.Execute "Insert Into Users (User, Clave, Recordar) VALUES ('" & Usuar & "',"  & Contr & ", 'False')"
Cita:
1º)Alguien tiene idea de como ahcer para que un form del programa se vea en el Systray (creo que se llama así el cosito donde aparece la hora), y que si le das doblde click se abra, y con click\click derecho aparesca un menu...???
Fijate que yo tengo un ejemplo que hace esto; aqui dejo las instrucciones y el codigo fuente:
En el form debes pegar un PictureBox y en la propiedad Picture debes poner un Icono; tambien debes de crear un menu (mnuEmergente) con el Editor de Menus y la propiedad Visible de este menu debe ser False, el menu debe incluir 3 Opciones: Mostrar, Ocultar y Salir.
Código:
' En un modulo:
Public Const VER_ICONO As Long = &H0&
Public Const OCULTAR_ICONO As Long = &H2&
Public Const CLICKDERECHO As Long = &H205
Public Const DOBLECLICK = &H203
Type ConfigurarIcono
    Tamaño As Long
    hWnd As Long
    Id As Long
    Bandera As Long
    Mensaje As Long
    Icono As Long
    strTip As String * 10
End Type
Public config As ConfigurarIcono
Global cancelar As Boolean
Declare Function Shell_NotifyIconA Lib "SHELL32" (ByVal dwMessage As Long, lpData As ConfigurarIcono) As Long

Public Sub sysTrayIcon(imagen As PictureBox, visibilidad As Long, cadena As String)
' Procedimiento para colocar el Icono en el SysTray de Windows
config.Tamaño = Len(config)
config.hWnd = imagen.hWnd
config.Id = 1
config.Bandera = &H1 Or &H2 Or &H4
config.Mensaje = &H200
config.Icono = imagen.Picture
config.strTip = cadena & Chr$(0)
Shell_NotifyIconA visibilidad, config
End Sub

' En el evento Load del Form
Private Sub Form_Load()
' Para que la Aplicacion se ejecute solo una vez
If App.PrevInstance Then End: Exit Sub
' Colocamos el icono en el SysTray
sysTrayIcon Picture1, VER_ICONO, "Mi aplicacion"
cancelar = True
End Sub

' En el Unload
Private Sub Form_Unload(Cancel As Integer)
Cancel = cancelar
Visible = False
If Cancel = False Then sysTrayIcon Picture1, OCULTAR_ICONO, "Mi aplicacion"
End Sub

'En el MouseMove del Picture
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
' Mostramos el Formulario desde el icono en el SysTray
Select Case (X / Screen.TwipsPerPixelX)
Case DOBLECLICK
    ' Usamos este evento para mostrar el formulario
    Visible = True
    SetFocus
Case CLICKDERECHO
    ' Usamos este evento para mostrar un Menu Emergente
    PopupMenu mnuEmergente
End Select
End Sub

' El menu Mostrar
Private Sub mnuShow_Click()
Visible = True
SetFocus
End Sub

' El menu Ocultar
Private Sub mnuHide_Click()
Visible = False
End Sub

' El menu Salir
Private Sub mnuExit_Click()
cancelar = False
Unload Me
End Sub
Para descargar este ejemplo hace clic aqui

Espero te sirva

Última edición por jc_moty; 14/11/2005 a las 18:07
  #13 (permalink)  
Antiguo 14/11/2005, 20:14
Avatar de (Pato)²  
Fecha de Ingreso: noviembre-2005
Mensajes: 130
Antigüedad: 18 años, 5 meses
Puntos: 1
hola, muchas gracias por lo del Systray, todavia no lo puse, pero graicias =... lo del crear el usuario no sé que carajo tiene, pero anda... cada vez que lo pruebo me dan ganas de romper todo :P

bueno, ultima cosita que pido (creo)...
¿alguien tiene idea dde como ahcer esto?


esto que hago anda bien:

Código:
Dim may As Boolean

Private Sub Form_Load()
    may = False
End Sub

Private Sub Passwd_GotFocus()
    may = True
End Sub

Private Sub Passwd_LostFocus()
    may = False
End Sub

Private Sub Timer1_Timer()
    If (may = True) And (GetKeyState(vbKeyCapital)) Then
        'acá tiene que ir el "globito" ese de la foto
    Else
        'acá tiene que ir algo que lo saque al "globito"
    End If
End Sub
lo que me falta es saber como hacer que aparesca ese cuadrito de texto, globito, o como se llame :P

Saludos!

Última edición por (Pato)²; 14/11/2005 a las 20:21
  #14 (permalink)  
Antiguo 14/11/2005, 20:39
Avatar de jc_moty  
Fecha de Ingreso: septiembre-2005
Ubicación: Usulután, El Salvador
Mensajes: 477
Antigüedad: 18 años, 7 meses
Puntos: 1
Hace algun tiempo hice eso del "globito", el proyecto completo lo podes descargar aqui, aunque claro no funciona con un TextBox, sino con unos CommandButton, pero en escencia es lo mismo.
Cualquier duda que tengas con el codigo no dudes en preguntar.

Saludos

Última edición por jc_moty; 14/11/2005 a las 20:45
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 19:34.