none
¿Como guardar los valores de una consulta de una base de datos en variables? RRS feed

  • Pregunta

  • Hola a todos, estoy realizando un programa en Visual Basic en el cual necesito insertar y consultar datos de una base de datos. Vale, hasta aquí todo bien, sin embargo, no sé como guardar los campos de las distintas columnas de cada consulta en variables para tener un mejor manejo de los datos dentro del programa.

    Yo he hecho el vínculo con la base de datos desde la ventana "Mostrar orígenes de datos" de Visual Studio 2010 y he creado una consulta (sentencia select) en la tabla correspondiente de dicha base de datos mediante el explorador de soluciones, dirigiéndome a la tabla correspondiente y agregando la consulta en ella.

    Por ello, ahora no sé como hacer para poder guardar los resultados que me devuelve esa consulta en distintas variables (una para cada columna). También he probado a hacer esto mediante código pero no encuentro la forma exacta. 

    Por ejemplo, si tuviera la tabla Personas con los campos Nombre, Apellidos, Edad, Domicilio, Lugar de nacimiento, etc... que me guardara cada campo en una variable distinta.

    Pd: Cabe decir que la base de datos que utilizo es una base de datos Access 2003.

    Espero haberme explicado con claridad. Muchas gracias!

    • Cambiado Enrique M. Montejo martes, 25 de noviembre de 2014 7:07 Pregunta relacionada con el acceso a datos.
    domingo, 23 de noviembre de 2014 2:36

Todas las respuestas

  • Esta desarrollando en capas supongo ?

    En la POO  se acostumbra a utilizar clases para persistir la información en la base de datos

    las variables que usted menciona son atribuidas a atributos de esa clase, con un scope determinado

     

    G. Poliovei

    domingo, 23 de noviembre de 2014 2:55
  • Hola, muchas gracias por responder. 

    Sin embargo, no entiendo a que te refieres con lo de si lo estoy desarrollando a capas. Adjunto capturas de lo que estoy haciendo para que se entienda mejor.

    Esta es mi base de datos (es un ejemplo) en la cual desde el programa insertaría, modificaría, etc...

    No me deja insertar fotos (no se porque) así que lo pongo a mano

    Nombre  ||  Apellidos ||  DNI  || Domicilio || Email (Campos)

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

    Susana   || Martín ||  65314207B ||  Av.LaMasLarga ||  Susanamartin@gmail.com (Valores)

    Los campos que querría guardar en variables serían los de las distintas columnas (Nombre, Apellidos, DNI, Domicilio, Email).

    La captura siguiente es para que se vea la conexión que he hecho con la base de datos, y la consulta select que he creado. Se pueden ver los atributos de la clase, pero el problema es que se acceder a la consulta entera (y que te la muestre en cuadrantes, como en la misma base de datos, solamente con arrastrar la tabla en cuestión) pero yo no quiero que la muestre así, sino poder guardar los valores de los distintos campos. Aquí les dejo la otra captura:

    Bueno, como sigue sin dejarme insertar fotos lo voy a intentar hacer a mano

    En el apartado "Origenes de datos" de Visual Studio 2010 me aparece la base de datos con su nombre (personasDataSet) y la tabla correspondiente que hay dentro de la misma (Personas) con todos sus campos. 

    Posteriormente, en el "Explorador de soluciones" me aparece un fichero al lado de los formularios de mi proyecto que se llama personasDataSet.xsd y si nos introducimos dentro de este me aparece la clase Personas con todos sus atributos y en la parte de métodos la sentencia Select que he creado.

    Lo que querría sería guardar cada uno de los valores anteriores en variables distintas. 

    Espero haberme explicado mejor y muchas gracias de nuevo por sus respuestas!

    domingo, 23 de noviembre de 2014 12:12
  • @Anonymous157

    Para programar en capas se tiene que entender que cada capa tiene su responsabiidad.

    Presentación : Su responsabilidad es ingresar datos y mostrar datos, no debe estar contaminada de Acceso a datos o de Lógica de Negocio.

    Logica de negocio : Su responsabilidad es como su propio nombre lo indica lógica de negocio, en esta capa se implementa las reglas del negocio y llamado a métodos, no debe estar contaminada de Acceso a datos.

    Acceso a Datos : Su responsabilidad es de la persistencia contra la base de datos, es aquí donde se implementan los métodos que persisten a la DB como INSERT, UPDATE, DELETE, SELECT, ETC(Guardar, Actualizar, eliminar, buscar, etc).

    Entidades : Su responsabilidad es el mapeo de la infraestructura de la db, o mejor dicho las tablas.

    Programar en capas facilita el mantenimiento de una aplicación, el código mas ordenado.

    Si tienes una Tabla Persona donde tus campos son PersonaId, Nombre, Direccion, Telefono. El mapeo en tu capa de Entidades debe ser de la siguiente manera.

    Public Class PersonaEntity
        Public Property PersonaId As String
        Public Property Nombre As String
        Public Property Direccion As String
        Public Property Telefono As String
    End Class


    Para poder comunicar las capa como muestro en la imagen tienes que referenciar las capas como :

    Entidades en Acceso a Datos en Logica de Negocio y en Presentación.

    Tienes que referenciar Acceso a Datos en Logica de negocio

    Tienes que referenciar Logica de Negocio en Presentación

    En tu capa de Acceso a Datos debes tener algo como esto :

    Imports System.Data
    Imports System.Data.OleDb
    Imports System.Configuration
    Public Class Conexion
        Friend Shared Function Conectar(conStr As String) As OleDbConnection
            Try
                Dim conn As String = ConfigurationManager.ConnectionStrings("default").ToString()
                Dim cn As New OleDbConnection(conn)
                cn.Open()
                Return cn
            Catch ex As Exception
                Throw New ArgumentException("Error de conexion", ex)
            End Try
        End Function
    End Class

    Persistencia

     Public Shared Sub Guardar(model As ArticulosEntity)
            Using cn As OleDbConnection = Conexion.Conectar("default")
                Using cmd As OleDbCommand = cn.CreateCommand()
                    cmd.CommandText =
                        "INSERT INTO Articulos(Id_TipoArticulo, Descripcion, Codigo_Barra, Existencia, Costo," + _
                        " Cantidad_Minima, Valor_pvp, Valor_Mayorista) " + _
                        " VALUES(@Id_TipoArticulo, @Descripcion, @Codigo_Barra, @Existencia, @Costo," + _
                        " @Cantidad_Minima, @Valor_pvp, @Valor_Mayorista)"
    
                    cmd.Parameters.AddWithValue("@Id_TipoArticulo", model.Id_TipoArticulo)
                    cmd.Parameters.AddWithValue("@Descripcion", model.Descripcion)
                    cmd.Parameters.AddWithValue("@Codigo_Barra", model.Codigo_Barra)
                    cmd.Parameters.AddWithValue("@Existencia", model.Existencia)
                    cmd.Parameters.AddWithValue("@Costo", model.Costo)
                    cmd.Parameters.AddWithValue("@Cantidad_Minima", model.Cantidad_Minima)
                    cmd.Parameters.AddWithValue("@Valor_pvp", model.Valor_pvp)
                    cmd.Parameters.AddWithValue("@Valor_Mayorista", model.Valor_Mayorista)
                    cmd.ExecuteNonQuery()
                End Using
            End Using
        End Sub

    En la Lógica algo así :

    Public Shared Sub CrearArticulo(model As ArticulosEntity)
            ArticuloRepository.Guardar(model)
        End Sub

    Presentación algo así :

    Dim model As New ArticulosEntity
    
            model.Id_TipoArticulo = txtIdArticulo.Text
            model.Descripcion = Txtdescripcion.Text
            model.Codigo_Barra = Txtcodigobarra.Text
            model.Existencia = txtExistencia.Text
            model.Costo = txtCosto.Text
            model.Cantidad_Minima = txtCanMinima.Text
            model.Valor_pvp = Txtvalorpvp.Text
            model.Valor_Mayorista = Txtvalormayorista.Text
            Articulo.CrearArticulo(model)

    Para guardar imagenes en la db tienes este excelente tutorial de Leandro Tuttini :

    [WinForms] Edición Empleados – Grabar imagen en base de datos

    Como configurar la conexion

    Archivos de Configuración - Una introducción (1/3)


    Pedro Ávila
    "El hombre sabio querrá estar siempre con quien sea mejor que él."
    Lima - Perú


    • Editado Pedro Ávila domingo, 23 de noviembre de 2014 13:51 xxxxxxxx
    domingo, 23 de noviembre de 2014 13:49
  • Hola Anonymous1587:

     Yo te preguntaría ¿como es que estas desarrollando tu aplicación?, ¿podrías proporcionarnos un fragmento de código en donde estés haciendo un Select a tu base de datos? esto antes de decirte que existe la programación en capas, bla bla bla...que entiendo con tu respuesta aun no conoces su forma de trabajar.

    Personas con los campos Nombre, Apellidos, Edad, Domicilio, Lugar de nacimiento, etc... que me guardara cada campo en una variable distinta.

    Para lograr esto debes de crear una clase a la que llamaras Persona dentro podrás propiedades publicas del tipo que corresponda al tipo declarado en la base de datos, por ejemplo:

    Public Class Persona
        Public Property PersonaId As String
        Public Property Nombre As String
        Public Property Apellidos As String
        Public Property Edad As Decimal
        Public Property Domicilio As String
        Public Property FechaNacimiento As DateTime
    End Class
     Esta clase representara la entidad Persona dentro de tu aplicación y sus propiedades las "variables" que necesitas para almacenar la información proveniente de tu consulta de selección, que antes de continuar pediría nos muestres como es que la estas creando.

    Pd: Cabe decir que la base de datos que utilizo es una base de datos Access 2003.

    Esto realmente no es de mucha importancia puesto que la carga de la información estará de lado de tu aplicación el tipo de motor de Bd que estés utilizando no es importante podría ser fácilmente Access, SqlServer, Oracle, SQlLite, etc. la forma de trabajar de lado de tu aplicación sera lo importante.


    Saludos desde Monterrey, Nuevo León, México!!!

    domingo, 23 de noviembre de 2014 14:31