Estás en: Inicio >> Foros >> Informática >> Programación
Programación /

Consulta sencilla en VB

Participa en el tema Consulta sencilla en VB en el foro Programación.
hola q tal.. yo estoy progrmaando en VB una aplicacion y me he olvidado cual ...

Buscar en este tema:
1 2 3 4 5 >
 
  •  
    #1 Consulta sencilla en VB
    hola q tal.. yo estoy progrmaando en VB una aplicacion y me he olvidado cual era la opcion para hacer que X formulario, inicie la aplicacion...
    osea tengo 7 form por ej., quero saber cual era la opcion para que el form N°2 inicie
    gracias
    +
     
    0
    Me gusta
     
    http://www.psicofxp.com/forums/programacion.313/962242-consulta-sencilla-en-vb.html
    | Más
  • #2 Re: Consulta sencilla en VB

    [Menu de barra] Proyecto -> Propiedades de Proyecto .... [Sale un panel] - > "Objeto incial" y en ese combobox, seleccionas el formulario que queres que arranque tu programa.

    o en el Form1. ( que es el que carga por defecto)

    Private Sub Form_Load()

    Form7.show
    Unload Me

    End Sub
    Me gusta este mensaje
  • #3 Re: Consulta sencilla en VB

    Gracias HeavenMight ha sido de utilidad
    Me gusta este mensaje
  • #4 Re: Consulta sencilla en VB

    me ha surgido otra duda: la cosa es que quiero buscar determinado nombre en la base de datos y que me lo muestre en el DBGrid, pero no me funca fijense el codigo:
    Código:
    Private Sub CmdBuscar_Click()
      crit = InputBox("Ingrese", "Buscar")
        If Trim(crit) = "" Then
            Exit Sub
        End If
            criterio = "[nombre] like '"
            criterio = criterio & Trim(crit) & "*'"
            Data1.Recordset.FindFirst criterio
            msje = MsgBox("¿Lo encontro?", vbYesNo + vbInformation)
            '7 = no
            If vbyes = 7 Then
             'tambien probe poniendo if msje = 7
                Do Until Data1.Recordset.EOF Or vbYes = 6
                   Data1.Recordset.FindNext criterio
                Loop
            End If
        Exit Sub
    
    lo que no puedo hacer andar de ese codigo es la parte del "do until" osea que se genere un bucle hasta que en el msgbox pongan que si encontraron el que querian... gracias again
    Editado por rmc08 - 29.09.2009 23:54 hs.
    Me gusta este mensaje
  • #5 Re: Consulta sencilla en VB

    Originalmente publicado por rmc08 Ver mensaje
    me ha surgido otra duda: la cosa es que quiero buscar determinado nombre en la base de datos y que me lo muestre en el DBGrid, pero no me funca fijense el codigo:
    Código:
    Private Sub CmdBuscar_Click()
      crit = InputBox("Ingrese", "Buscar")
        If Trim(crit) = "" Then
            Exit Sub
        End If
            criterio = "[nombre] like '"
            criterio = criterio & Trim(crit) & "*'"
            Data1.Recordset.FindFirst criterio
            msje = MsgBox("¿Lo encontro?", vbYesNo + vbInformation)
            '7 = no
            If vbyes = 7 Then
             'tambien probe poniendo if msje = 7
                Do Until Data1.Recordset.EOF Or vbYes = 6
                   Data1.Recordset.FindNext criterio
                Loop
            End If
        Exit Sub
    
    lo que no puedo hacer andar de ese codigo es la parte del "do until" osea que se genere un bucle hasta que en el msgbox pongan que si encontraron el que querian... gracias again
    Código:
    Private Sub CmdBuscar_Click()
      crit = InputBox("Ingrese", "Buscar")
        If Not Trim(crit) = Empty Then
            criterio = "[nombre] like '"  & Trim(crit) & "*'"
            Data1.Recordset.FindFirst criterio
            Do While Not Data1.Recordset.EOF
                   If MsgBox("¿Lo encontro?", vbYesNo + vbInformation) = vbNo Then  
                        Data1.Recordset.FindNext criterio
                   Else
                        'No se a que variable le asignaras los resultados encotrados hacelo aca
                        Data1.Recordset.EOF = True
                   End If
                Loop
            End If
    End Sub 
    Acostumbrate a poner If Not
    En vez de poner 2 bloques del if, con Not te ahorras: Vos haces asi
    Código:
     If Text.text = "" Then
                   Exit sub
          Else
                  DoEvents
          End If 
    Es mejor asi
    Código:
     If NotText.text = Empty Then
                  DoEvents
           End If 
    Asi te evitas usar el ELSE. Ademas "Empty" reemplaza al "", porque aveces por ejemplo.
    Cuando guardas valores a una consulta o base de datos desde un textbox con Multiline.

    Si el usuario apreta ENTER; queda el CHAR de 13. Cuando lo veas en la base de datos se ve como un Cuadradito que parece como si feura una letra en Japones y no tuvieras el paquete de idiomas, ese "Char" es algo es decir no es ""
    En cambio el Empty, no reconoce el Enter o Dejar espacios como un caracter.

    Igualmente es recomendable usar el Trim(Objet o Variable)

    La sentencia.
    Código:
     If MsgBox("¿Lo encontro?", vbYesNo + vbInformation) = vbNo Then   
    Dice
    Código:
     SI MSBOX = NO ENTONCES 
            ASIGNAR BUSQUEDA A VARIABLES O HACER LO QUE VOS QUERIAS
       SINO (ELSE)
            BUSCAR SIGUIENTE
            BUSQUEDA.EOF (End of File) = True
       FINALIZAR SI... 
    Cuando hace la primera busqueda, entra directo al Do While Not (Mientras que No...) EOF (End Of File / End or Fail)

    Es decir, si tu base de datos esta vacia, No entrara al Do While Not.
    En cambio si esta con algun registro, por mas que no sea el que buscamos, queire decir que no esta vacia.

    Ahora Entra al While y Pregunta con el IF. El cual explique mas arriba.

    De Ser verdadero que lo encontro, Entonces Asignas lo que buscabas y encontraste a una variable o haces lo que te guste.
    Luego si o si, debes indicarle que el Recorset esta en EOF = True.

    El EOF es una variable Boolean, es decir es True o False / 1 o 0 ... Mas opciones no tiene.
    SI esta llena o tiene algun registro entonces es 0 ( False ) es decir (Final del Archivo / Final o Falla ? No(false))

    Ahora si es True, quiere decir que ( Final del Archivo/ Final o Fall) ? SI (True)

    Entonces asignas el True al Recorset con
    Código:
          Data1.Recordset.EOF = True
     
    Luego Saldra del IF, con un END IF

    e Iria al
    Código:
             Do While Not Data1.Recordset.EOF
    
    Esta linea que ya la habiamos pasado por alto, lo que hace es Decir EOF ( Esta vacio o Fallo o es el Final?)

    Para la condicion, le agregamos Not.

    Es decir ... Hacer mientras que No Este vacio o Falle o Este al Final del archivo (base de datos).

    Para evitar redundar lo que el compilador "VE" es :
    Código:
             Do While Not Data1.Recordset.EOF  ----> If Not  Data1.Recordset.EOF = True Then 

    Debo aclarar que si. hago esto
    Código:
     If Not Data1.Recordset.EOF Then
                 A=1
           Else
                 A=0
           End If
     
    la variable A, saldra valiendo 1, si la busqueda delvolvio algo, es decir algun valor, porque el EOF tiene como valor por defecto = True.
    Por eso, mas arriba escribi el = True, Aunque, si escris en el compilador, el = True o no, Hace excatamente lo mismo. Dado que es el Valor por defecto, de escribirlo, unicamente redundamos

    Por ello, como era false, por esta lleno o no estar al final o no tirar error, en la priemera nos dejo pasar.

    Ahora Nosotros le asignamos un True

    Como Si es True, corta, sale del Do While
    Y listo
    Termina con End Sub
    Editado por -HeavenMight- - 22.09.2009 09:15 hs.
    Me gusta este mensaje
  • #6 Re: Consulta sencilla en VB

    Gracias de nuevo...lo voy a leer con tiempo.
    Salute!
    Me gusta este mensaje
  • #7 Re: Consulta sencilla en VB

    La verdad muchas gracias xD, ahora lo lei bien, esta re bien explicado, loco dedicate a ser profesor!!! jaja-
    Grosso, un saludo!.
    Me gusta este mensaje
  • #8 Re: Consulta sencilla en VB

    aprovecho el post para hacer otra pregunta...

    miren este codigo

    Código:
    rivate Function CargarGrilla()
        Dim Cade As String
        Cade = "1234567890"
            If OptCodId.Value = True Then
                If txtOpcion = "" Then
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from Personas"
                Else
                    If InStr(Cade, Right(Me.txtOpcion, 1)) <> 0 Then
                        StrSql = "Select id, Nombre, Apellido, Telefono,Direccion, Fecha de Alta from Personas" & Me.txtOpcion.Text
                    Else
                        MsgBox "El codigo de cliente solo puede ser numérico", vbInformation, "RMC Systems"
                        txtOpcion = ""
                        txtOpcion.SetFocus
                    End If
                End If
            
            If OptApe.Value = True Then
                If txtOpcion = "" Then
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from Personas"
                Else
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where apellido like '%" & txtOpcion.Text & "%'"
                    'MsgBox StrSql
                End If
            End If
            If OptNom.Value = True Then
                     StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where fechahora like '" & Fecha & "%'"
            End If
            If OptTel.Value = True Then
                     StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where Telefono like '" & txtOpcion.Text & "%'"
        End If
        End If
        'MsgBox StrSql
        rs.Open
        grilla.Clear
        grilla.Rows = 1
        grilla.FormatString = "ID     | Nombre                               |Apellido                                                          | Teléfono                                  | Direccion                                                             | Fecha de Alta       "
        Do While Not rs.EOF
            grilla.AddItem rs!id & vbTab & rs!Nombre & vbTab & rs!Apellido & vbTab & rs!Telefono & vbTab & rs!Direccion & vbTab & rs!Fecha_de_Alta
            rs.MoveNext
        Loop
        rs.Close
        
    End Function
    
    el error me lo da en la linea
    rs.Open StrSql, cn, adOpenDynamic, adLockOptimistic
    dice error 3709 en tiempo de ejecucion "the connection can no be used to perform this operation. It is either closed or invalid in this context"
    Me gusta este mensaje
  • #9 Re: Consulta sencilla en VB

    La verdad es que no entendi muy bien que es lo que queres hacer, si no me decis va a estar jodido.
    Ahora bien en tu codigo tenes
    Código:
    rs.open ......
    
    No tenes campos aunque abajo decis que tenes .

    Código:
    rs.Open StrSql, cn, adOpenDynamic, adLockOptimistic
    
    Aclaranos esto.


    Ahora bien, por lo que entendi del codigo, lo que vos tenes son varios "option" el circulito del multiple chooise.

    Bueno el codigo que tenes es muy repetitivo, ademas que usas varios objetos para un mismo trabajo.

    Lo que te recomiendo es hacer lo siguiente antes de buscar el error que te tira.

    Nº1 - Borra todos los option que tenes.

    Pone un Option1 nuevo y renombralo a "OptDatos" (Ponele el nombre que quieras, yo use ese de ejemplo).

    Luego agrega otro y ponele TAMBIEN "OptDatos", si le pusiste otro nombre al primero, ponele el mismo nombre.

    Cuando haces eso, te va a saltar un cartel diciendote que "ya existe un objeto con ese nombre ¿desea crear una matriz de cotrol?".

    Vos dale que si.
    Luego segui agregando objetos con el mismo nombre.

    Como notaras ahora tenes objetos como OptDatos(0) - OptDatos(1)-OptDatos(2)- etc...

    El (Numero) -> (0)-(1)-(2)-etc. son el Index.

    Al hacer esto vos tenes 1 OBJETO, pero VISIBLEMENTE o VISUALMENTE vemos varios.

    Cada uno de esos OBJETOS VISUALES tiene un INDEX, dado que ¿Como hago para escribirle un codigo particular a cada uno?.

    Bueno por medio del index podemos hacerlo, dado que si te das cuenta al hacerles click lo unico que ves es

    Código:
    Private Sub OptDatos(Index As Integer)
    
    End Sub 
    Bueno a este Index, que parece que nos fuera a incomodar la vida, en realidad le vamos sacar provecho y nos vamos a facilitar las cosas, tanto en codigo como en organizarnos.
    Asi no nos complicamos tanto la vida.

    Suponiendo que el
    OptCodId, lo reemplazaste por OptDatos(0)
    OptApe, lo cambiaste por OptDatos(1)
    OptNom, tambien fue cambiado por OptDatos(2)

    Y finalmente OptTel fue intercambiado por OptDatos(3)

    Podemos usar en el Boton Consultar o en la funcion "CargarGrilla" poner el siguente codigo:
    Código:
    Private Function CargarGrilla(Index As Integer)
        Dim Cade As String
        Cade = "1234567890"
        Select Case Index
            Case 0
                If txtOpcion = Empty Then
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from Personas"
                Else
                    If Not IsNumeric(Me.txtOpcion) Then
                        StrSql = "Select id, Nombre, Apellido, Telefono,Direccion, Fecha de Alta from Personas" & Me.txtOpcion.Text
                    Else
                        MsgBox "El codigo de cliente solo puede ser numérico", vbInformation, "RMC Systems"
                        txtOpcion = Empty
                        txtOpcion.SetFocus
                    End If
                End If
            Case 1
                If txtOpcion = Empty Then
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from Personas"
                Else
                    StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where apellido like '%" & txtOpcion.Text & "%'"
                End If
            Case 2
                     'StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where fechahora like '" & Fecha & "%'"
                     StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where Nombre='" & Nombre.Text & "'"
            Case 3
                     StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where Telefono ='" & txtOpcion.Text & "'"
        End Select
        rs.Open StrSql, Cn, adOpenDynamic, adLockReadOnly
        grilla.Clear
        grilla.Rows = 1
        grilla.FormatString = "ID     | Nombre                               |Apellido                                                          | Teléfono                                  | Direccion                                                             | Fecha de Alta       "
        Do While Not rs.EOF
            grilla.AddItem rs!id & vbTab & rs!Nombre & vbTab & rs!Apellido & vbTab & rs!Telefono & vbTab & rs!Direccion & vbTab & rs!Fecha_de_Alta
            rs.MoveNext
        Loop
        rs.Close
    End Function 

    Bueno, algunas respuestas antes de que preguntes porque seguro las vas a hacer.

    Código:
                    If Not IsNumeric(Me.txtOpcion) Then 
    IsNumeric(Variable) ... es una funcion de Visual basic, que retorna True o False y verifica si es numerico o no el campo o variable.

    Ejemplo. Si text1.text = "121211" o "000000" o "-214411" ---> True
    Si text1.text = "Pepe123" o "Juan2003" o "Juan morales"----> False

    Esta función, reconoce inclusive numeros negativos que tienen el ' - ' como signo negativo.

    Ahora ¿Como funciona?.
    Bueno, si ponemos
    Código:
    Dim AAA As String
    Text1.Text = "123456"
    AAA= IsNumeric(Text1)
    
    la variable AAA, va a tener "True."

    Ahora en el IF, nosotros no asiganos a ninguna variable el IsNumeric, sin embargo el Valor te lo da.
    Ese "true o false" que devuelva, esta en el IF por unos instantes, para que se haga la evaluacion

    Ahora lo que "VE" el compilador en realidad es esto.

    Código:
                    If Not IsNumeric(Me.txtOpcion) = True Then 
    Junto con el "Not", la frase en "castellano" o "logicamente" vendria a ser:

    Si NO es Numerico ENTONCES ....

    Tu codigo Original, no es muy necesario

    Código:
     If InStr(Cade, Right(Me.txtOpcion, 1)) <> 0 Then 
    Antes que nada, te recalco que el "<>" puede ser reemplazado por un "Not" adente del If y un "=" en donde pones el "<>"
    Lo que evalua es si el PRIMERO de los numeros es un numero.

    Ahora ¿Que pasaria si escribo "123pepe" ? eso funcionaria.

    En el remoto caso que tu "CodId" se componga de numeros y letras, sin incluir signos podrias usar lo siguiente

    Código:
            Cade = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
            If Not InStr(Cade, Trim(Me.txtOpcion)) = 0 Then 
    Asi de esta Manera, tu codigo solo acepta Numeros y Letras y no tolera signos o simbolos.

    Si usas codigos como "AFR-344" AGREGALE EL ' - '
    ASI;
    Cade = "1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLM NOPQRSTUVWXYZ-"

    Otra de las cuestiones. Vos agregas el ".text" al final de cada textbox.

    Los objetos tienen un "option default", esto quiere decir que cuando escribis el nombre del objeto:
    Ejmplo; "Text1"
    No es necesario escribir el "option default" para el los "texbox" como los "text1" o "txtOption" o todo lo que sea texbox (cuadro de texto) el "option default" es el ".text1".

    Por ello, escribir

    Text1.text = "pepe"
    es lo mismo que escribir
    Text1 = "pepe"

    Lo Importante.

    Como veras yo reemplace, todos los IF de los 'Option', por un Select Case Index.

    Bueno, como habiamos dicho los OptDatos o como los hayas llamado, se manejaban por un "Index".

    En el cabezal de la funcion puse un argumento que se llama "index" tambien aunque lo pude haber llamdo "pepe", "a", "VariableLoca",etc...

    A lo que me refiero a "Cabezal" y "Argumentos" es:
    Código:
    Private Function CargarGrilla(Index As Integer)
    
    Lo subrayado es "Cabezal" y lo que esta entre parentesis es "Argumento".

    Cuando llamas a la funcion, por ejemplo desde el Command1 pones
    Código:
    Private Sub Command1_Click()
         CargarGrilla 1
    End Sub 
    Cuando haces eso, llama a la funcion y automaticamente la variable "Index" en la funcion vale "1", si le hubieramos puesto "2000" en el Command1, cuando llamamos a la funcion, luego la variable Index valdria "2000".

    Lo mejorcito, que se podria hacer para que esta funcion funcione bien seria en el Comman1 o en el boton que usas o objeto que usas para llamar a la funcion poner:

    Código:
    Private Sub Command2_Click()
         Dim i As Byte
         For i = 1 To OptDatos.Count
             If OptDatos = True Then CargarGrilla i
         Next i
    End Sub 


    Una de las cosas que no entendi es porque en el "optNom" ahora llamado OptDatos(2)
    Que esta en el "Case 2", donde estaba el "If OptNom = True". pones:

    'StrSql = "Select id, Nombre, Apellido, Telefono, Direccion, Fecha de Alta from personas where fechahora like '" & Fecha & "%'"

    Si era "Nom" = "Nombre" vos pones "WHERE FECHAHORA LIKE..." ???.
    No tiene sentido que si buscan por "Nombre", la consulta se haga por "fechas".

    Ademas cuando Buscas un dato presiso, te recomiendo que pongas " WHERE NOMBRE= ' ' "
    Porque por ejemplo, con los nombres una vez tuve problemas con
    "Juan".
    "Juanicio".

    Un nombre es "Parte" de otro nombre, entonces cuando haces la consultas y buscar nombres por "Juan" te sale "Juanicio" o demas.
    Si tambien

    "Maxi" por lo general, como los campos no son de muchos caracteres, a ese nombre se hace la excepción y se lo abrevia,
    Entonces al poner "LIKE" y no usar = ' '.
    Te saldrian
    "Maximiliano"
    "Maximo"

    Sin tomar en cuenta que algunos figuran en los documentos como MAX, como nombre completo y si tenes algun MAX en la base de datos, te salen "maximiliano" y "maximo".

    Por ello usar "LIKE" para por ejemplo "Materiales de una fabrica" seria lo mas elocuenta, incluso es mejor usar LIKE que usar = ' ', en ese caso.
    Sin embargo con nombres es mejor hacer la busqueda directa con " = ' nombre ' ".

    Lo mismo para los telefonos y/o datos de una Persona.

    Con los registros de personas, te recomiendo evitar en lo posible, usar el LIKE, ahora si es para productos, para consultar las regiones de un mapa, para hacer la consulta sobre una flota de autos.
    Para la division de tareas de un sector de empresas, etc.

    Al no ser Datos de personas, si queres usa LIKE, pero con personas te recomiendo no usarlo por una cuestion de "buena gestion de consulta de datos".



    RECORDATORIO.


    Subi el proyecto y pasamelo y tambien fijate la linea del "Rs.open" que en tu codigo que nos pasaste, esta vacia.
    Me gusta este mensaje
  • #10 Re: Consulta sencilla en VB

    Bueno explico un poco... lo del rs.open lo puse mal en el codigo, en realidad era
    Código:
    rs.Open StrSql, cn, adOpenDynamic, adLockOptimistic
    
    y el proyecto es para un trabajo de la facu, es fictioso el nombre "RMC Systems", (se nota q soy estudiante no?? jaja) bue... em no tengo idea de como subir el proyecto a psicofxp, si queres te lo mando por mail.

    este codigo
    Código:
     If InStr(Cade, Right(Me.txtOpcion, 1)) <> 0 Then
    
    es para que en le vaya saliendo a medida que escribe la persona, por eso el Right (segun lo que me dijeron)

    una pregunta mas... que quiere decir el ME.txt.... osea el ME en el textbox ??


    saludos y gracias
    Me gusta este mensaje
1 2 3 4 5 >
Estás en: Inicio >> Foros >> Informática >> Programación


Estadísticas del tema
  • 43 RESPUESTAS
  • 1109 VISTAS
  • 3 USUARIOS RESPONDIERON
 
Ir arriba
Contacto | Acerca de | Ayuda | Términos Legales | privacidad | Pautas de convivencia | Mapa de los foros | TrabajÁ con nosotros
©2008 Psicofxp.com S.A. - Todos los derechos reservados
Certifica IAB