none
un botón y varias consultas ala vez RRS feed

  • Pregunta

  • hola  amigos tengo una duda  tengo varias consultas por hacer a una base access lo único que quiero es que con un solo botón me realice las consultas y me llene los texbox indicados como puedo realizar esto anidando las consultas  con un if saludos pongo mi ejemplo   saludo

    ASI LO MANEJO TENGO 2 FUNCIONES BUENO TENGO MAS PERO PARA EJEMPLIFICAR Y KE ME PUEDAN APOYAR 

    TENGO UNA FUNCIÓN LLAMADA CONSULTA PERSONAL

    Public Sub consultarpersonal(ByRef identificador As String)

            cmd.Connection = conn
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "SELECT * FROM activos WHERE status= 'ACTIVO' and  nomina=" + identificador
            Try
                dr = cmd.ExecuteReader()
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    OTRA CONSULTA MIS REFERENCIAS

       Public Sub consultaref(ByRef identificador As String)
            cmd.Connection = conn
            cmd.CommandType = CommandType.Text
            cmd.CommandText = "SELECT * FROM referencias WHERE nomina = " + identificador
            Try
                dr = cmd.ExecuteReader()
            Catch ex As Exception
                MsgBox(ex.ToString)
            End Try
        End Sub

    MI BOTON 

    Private Sub Button8_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button8.Click

            If ComNomina.Text <> "" Then
                consultarpersonal(ComNomina.Text)
                If dr.Read Then

            

     Me.TexGrado.Text = dr(1).ToString 'grado
                    Me.TexPuesto.Text = dr(2).ToString 'puesto
                    Me.TexArea.Text = dr(3).ToString 'area
                    Me.ComStatus.Text = dr(4).ToString 'status
                    Me.CombNom.Text = dr(5).ToString 'nombre
                    Me.TexCalle.Text = dr(6).ToString 'calle
                    Me.TexColonia.Text = dr(7).ToString 'colonia
                    Me.TexNointerior.Text = dr(8).ToString 'no_interior
                    Me.TexNoexterior.Text = dr(9).ToString 'no_exterior
                    Me.TexCodigopostal.Text = dr(10).ToString 'CP   

    'EN REALIDAD SON MAS DE 40 CAMPOS A CONSULTAR PERO SOLO PONDRÉ 10 PARA EJEMPLIFICAR  SALUDOS ASÍ COMO LA TENGO ME FUNCIONA

                    Else
                    MsgBox("No se encontro usuario")
                End If

       

                 dr.Close()
         End Sub

    COMO CONSULTAR LA DE REFERENCIAS   QUISIERA QUE EN UN SOLO BOTÓN ME HICIERA TODAS LAS CONSULTAS 2 O MAS CONSULTAS SALUDOS TODAS MIS CONSULTAS FUNCIONAN PERO QUISIERA QUE HUBIESE MAS DINAMISMO EN MI PEQUEÑOS SISTEMA NO ESTA PRESIONANDO TANTOS BOTONES  PARA CONSULTAR CAMPOS 

    P.D. CON EL CAMPO NOMINA ES MI PARÁMETRO PARA  REALIZAR TODAS MIS CONSULTAS

    • Cambiado Enrique M. Montejo sábado, 14 de marzo de 2015 11:37 Pregunta relacionada con el acceso a datos con Access.
    miércoles, 11 de marzo de 2015 21:43

Todas las respuestas

  • Hola,

    Ufff... podría dar un par de regaños, pero esta bien, te paso la estrategia para conseguir lo que buscas, requiere un poquito de chamba: Refactoring Strategy

    Optimiza

    1.- En la clase del formulario crea una variable privada de tipo SqlCommand, otra SqlConnection. (instancia el sqlconnection en el constructor de la clase (formulario)

    2.- Genera un método que reciba un string como parámetros y de regreso entregue un SqlDataReader; ej. ExecuteCommand(string commandText); y en este método creas un obj de SqlCommand (el de la clase con los parámetros de entrada y le asignas el SqlConnection global de la clase) Nota: Implementa el using(SqlCommand ...) { }

    Desacopla

    1.- Crea un método que consulte las referencias y otro que consulte al personal, cada uno de ellos van a reutilizar ExecuteCommand...

    Un único propósito (el evento del botón)

    2.- Crea un método que llame secuencialmente a los métodos (consulta personal->consulta ref(personalId)->metodo(referenciaId) por ejemplo.

    -----

    Comentarios personales

    La estrategia que yo seguiría sería seguir los principios GRASP, que te llevarían a hacer varias clases, donde cada una de ellas solo trabajo con los datos de referencia, o personal, o conexion a datos etc... y luego en el fomulario llamaría al servicio o clase de manera atómica.

    Esto es class Personal { //Aquí mapeo los campos de bd solo contiene propiedades }, class PersonalService { //aquí genero la conexión, genero la consulta y la lista de personal obtenido de la consulta de tipo Personal }

    Luego en el fomulario, creo una instancia de PersonalService, y cuando lo desee, entonces llamar a PerosonalService.TomaDatos()  por decir algo...

    Saludos,

    • Propuesto como respuesta Karen Malagón viernes, 13 de marzo de 2015 18:04
    miércoles, 11 de marzo de 2015 21:58
  • Hola,

    Porqué no intentas solo llamar un método al finalizar otro.

    Public Sub consultarpersonal(ByRef identificador As String) cmd.Connection = conn cmd.CommandType = CommandType.Text cmd.CommandText = "SELECT * FROM activos WHERE status= 'ACTIVO' and nomina=" + identificador Try dr = cmd.ExecuteReader() Catch ex As Exception MsgBox(ex.ToString) End Try 'Aquí llamas al método consultaref(identificador)

    consultared(identificador)

    End Sub


    Saludos

    --------------

    Norberto Rojas

    miércoles, 11 de marzo de 2015 22:13