Ayuda visual.NET

Muy buenas, estoy haciendo un proyecto con Bases de Datos, no tengo ni idea de hacer una cosas, haber si me podeis ayudar un poco...

- Lo que quiero es meter en los Textbox los campos de una consulta, por ejemplo, yo elijo el cliente con el DNI=1 y que me nuestre el nombre en un Textbox el apellido en otro Textbox y asi todos sus campos, como podria hacer eso???

Un saludo y Gracias
Try
            cadenaSQL = "select * from matriculas where dni='" & FrmPrincipal.dni & "'"
            comando = New OleDbCommand(cadenaSQL, conexion)
            registros = comando.ExecuteReader
            If registros.Read Then
                TxtNombre.Text = registros("nombrecompleto")
                TxtDireccion.Text = registros("direccion")
                TxtTelefono.Text = registros("telefono")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            conexion.Close()
        End Try


seria algo asi mas o menos, lo he copiado de un examen q hice, asi q no te valdra exactamente, pero te valdra como modelo
Si pudieses postear algo del código que estas desarrollando sería más facil responderte. Así sabemos que objetos de .NET puedes estar utilizando y podemos solucionarte la duda. ;)

EDIT: Creo que con la respuesta de Darxen ya tienes tu duda solucionada.
Darxen escribió:
Try
            cadenaSQL = "select * from matriculas where dni='" & FrmPrincipal.dni & "'"
            comando = New OleDbCommand(cadenaSQL, conexion)
            registros = comando.ExecuteReader
            If registros.Read Then
                TxtNombre.Text = registros("nombrecompleto")
                TxtDireccion.Text = registros("direccion")
                TxtTelefono.Text = registros("telefono")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            conexion.Close()
        End Try


seria algo asi mas o menos, lo he copiado de un examen q hice, asi q no te valdra exactamente, pero te valdra como modelo


Estoy probando tu respuesta, pero registro de que tipo es??
Tision escribió:Estoy probando tu respuesta, pero registro de que tipo es??

estas un poco perdido!
Public registros As OleDbDataReader (debes tener tu proyecto preparado para usar objetos OLEDB)
Private Sub TB()
        Try
            Dim consulta As String
            consulta = "select * from Clientes where id_cliente = " & CBid.Text & ";"
            Dim cmdInsert = New OleDbCommand(consulta, conexion)
            Dim registros As OleDbDataReader
            registros = cmdInsert.ExecuteReader
            If registros.Read Then
                TBid.Text = registros("id")
                TBnombre.Text = registros("ads")
                TBapellidos.Text = registros("ads")
                TBcalle.Text = registros("ads")
                TBtelefono.Text = registros("ads")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            conexion.Close()
        End Try
    End Sub

Haber lo tengo asi, pero no me tira, ahi donde registro("....") nose que poner
Tision escribió:
Private Sub TB()
        Try
            Dim consulta As String
            consulta = "select * from Clientes where id_cliente = " & CBid.Text & ";"
            Dim cmdInsert = New OleDbCommand(consulta, conexion)
            Dim registros As OleDbDataReader
            registros = cmdInsert.ExecuteReader
            If registros.Read Then
                TBid.Text = registros("id")
                TBnombre.Text = registros("ads")
                TBapellidos.Text = registros("ads")
                TBcalle.Text = registros("ads")
                TBtelefono.Text = registros("ads")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            conexion.Close()
        End Try
    End Sub

Haber lo tengo asi, pero no me tira, ahi donde registro("....") nose que poner

en registros("") tienes q poner el nombre del campo de la base de datos.
consulta = "select * from Clientes where id_cliente = " & CBid.Text & ";"
no hace falta q pongas ; y ojo con las comillas simples, q si en la base de datos es un string, debe llevarlas
consulta = "select * from Clientes where id_cliente = '" & CBid.Text & "'"

por cierto, "conexion" sabes lo q es?
conexion es para conectarse a la base de datos no??
Tision escribió:conexion es para conectarse a la base de datos no??

si, pero me refiero... sabes lo q lleva? como se crea y demas?
Tision escribió:
Private Sub TB()
        Try
            Dim consulta As String
            consulta = "select * from Clientes where id_cliente = " & CBid.Text & ";"
            Dim cmdInsert = New OleDbCommand(consulta, conexion)
            Dim registros As OleDbDataReader
            registros = cmdInsert.ExecuteReader
            If registros.Read Then
                TBid.Text = registros("id")
                TBnombre.Text = registros("ads")
                TBapellidos.Text = registros("ads")
                TBcalle.Text = registros("ads")
                TBtelefono.Text = registros("ads")
            End If
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
        Finally
            conexion.Close()
        End Try
    End Sub

Haber lo tengo asi, pero no me tira, ahi donde registro("....") nose que poner


Cuando he usado el objeto DataReader, para cargar los datos lo hacía escribiendo registros.Items(índice de la columna)
Así obtienes el valor de la columna cuyo índice estés poniendo ahí (del 0 en adelante).
Creo que también se puede poner directamente el nombre de la columna que quieras obtenes (registros.Item("dni"), registros.Item("calle")).

Prueba con eso, y sino, pues vuelve a preguntar :p

Edito: sobre el objeto conexión, debes indicarle el connectionString correspondiente a la base de datos (y su versión) con la que estés conectándote.

Saludos
Alber_h escribió:Cuando he usado el objeto DataReader, para cargar los datos lo hacía escribiendo registros.Items(índice de la columna)
Así obtienes el valor de la columna cuyo índice estés poniendo ahí (del 0 en adelante).
Creo que también se puede poner directamente el nombre de la columna que quieras obtenes (registros.Item("dni"), registros.Item("calle")).

Prueba con eso, y sino, pues vuelve a preguntar :p

Saludos

nunca lo he probado asi, pero tal y como lo tengo puesto yo, funciona
Darxen escribió:
Tision escribió:conexion es para conectarse a la base de datos no??

si, pero me refiero... sabes lo q lleva? como se crea y demas?


Pues la verdad esk no, porque la asignatura es de Bases de datos, y solo hacemos el programa para insertar lso datos y esas cosas

Muchisimas Gracias tio, ya me funciona, me has salvado la vida, Gracias
Tision escribió:
Darxen escribió:
Tision escribió:conexion es para conectarse a la base de datos no??

si, pero me refiero... sabes lo q lleva? como se crea y demas?


Pues la verdad esk no, porque la asignatura es de Bases de datos, y solo hacemos el programa para insertar lso datos y esas cosas

Muchisimas Gracias tio, ya me funciona, me has salvado la vida, Gracias

nada hombre, para eso estamos... si hay alguna otra duda ya sabes!

pero me interesa mas saber si te has enterado de por q funciona y de como funciona
La verdad no me enterado mucho porque no tengo ni idea de estoy, jaja

gracias de nuevo
Private Sub TB()
Try
Dim consulta As String
consulta = "select * from Clientes where id_cliente = '" & CBid.Text & "'" //aqui tienes la consulta a realizar contra la BBDD
Dim cmdInsert = New OleDbCommand(consulta, conexion) //aqui un objeto OLEDB q se encarga de realizar las consultas en la base de datos especificada en "conexion"
Dim registros As OleDbDataReader //aqui guardas los resultados de dicha consulta, algo asi como el result set de java
registros = cmdInsert.ExecuteReader //"ExecuteReader" es un metodo q ejecuta la consulta obtenida del objeto
If registros.Read Then //recorres los registros. esta funcion devuelve un booleano, true mientras pueda leer mas registros y false cuando no queden registros q leer
TBid.Text = registros("id") //aqui accedes a esos resultados especificando el nombre del campo
TBnombre.Text = registros("ads")
TBapellidos.Text = registros("ads")
TBcalle.Text = registros("ads")
TBtelefono.Text = registros("ads")
End If
Catch ex As Exception
MessageBox.Show(ex.Message, "Error", MessageBoxButtons.OK, MessageBoxIcon.Error)
Finally
conexion.Close() //cierras la conexion q has debido abrir antes. es importante hacerlo ya q si no puedes tener errores mas adelante
End Try
End Sub

algo asi a groso modo y sin profundizar mucho
Perdoname por ser tan pesao, pero tengo otra pequeña duda...

Estoy intentando actualizar con UPDATE y me da error??

Aqui te dejo el cogido, lo estoy usando con lo que me has ayudado antes

Dim consulta As String
        If ac1 = 0 Then
            consulta = "INSERT INTO Clientes(id_cliente,nombre,apellidos,calle,telefono)VALUES(" & TBid.Text & " , '" & TBnombre.Text & "' , '" & TBapellidos.Text & "' , '" & TBcalle.Text & "' , " & TBtelefono.Text & ")"
            Dim cmdInsert As New OleDbCommand(consulta, conexion)
            cmdInsert.ExecuteNonQuery()
            conexion.Close()
            MsgBox("Inserción realizada con exito")
            TBid.Text = ""
            TBnombre.Text = ""
            TBapellidos.Text = ""
            TBcalle.Text = ""
            TBtelefono.Text = ""
            GBdatos.Visible = False
            cargar_registro(DGV)
        Else
            consulta = "UPDATE Clientes SET id_cliente = " & TBid.Text & ",nombre = '" & TBnombre.Text & "',apellidos = '" & TBapellidos.Text & "',calle = '" & TBcalle.Text & "',telefono = " & TBtelefono.Text & " WHERE id_cliente=" & CBid.Text & ""
            Dim cmdInsert As New OleDbCommand(consulta, conexion)
            cmdInsert.ExecuteNonQuery()
            conexion.Close()
            MsgBox("Modificacion realizada con exito")
            TBid.Text = ""
            TBnombre.Text = ""
            TBapellidos.Text = ""
            TBcalle.Text = ""
            TBtelefono.Text = ""
            GBdatos.Visible = False
            cargar_registro(DGV)
        End If
Tision escribió:Perdoname por ser tan pesao, pero tengo otra pequeña duda...

Estoy intentando actualizar con UPDATE y me da error??

Aqui te dejo el cogido, lo estoy usando con lo que me has ayudado antes

Dim consulta As String
        If ac1 = 0 Then
            consulta = "INSERT INTO Clientes(id_cliente,nombre,apellidos,calle,telefono)VALUES(" & TBid.Text & " , '" & TBnombre.Text & "' , '" & TBapellidos.Text & "' , '" & TBcalle.Text & "' , " & TBtelefono.Text & ")"
            Dim cmdInsert As New OleDbCommand(consulta, conexion)
            cmdInsert.ExecuteNonQuery()
            conexion.Close()
            MsgBox("Inserción realizada con exito")
            TBid.Text = ""
            TBnombre.Text = ""
            TBapellidos.Text = ""
            TBcalle.Text = ""
            TBtelefono.Text = ""
            GBdatos.Visible = False
            cargar_registro(DGV)
        Else
            consulta = "UPDATE Clientes SET id_cliente = " & TBid.Text & ",nombre = '" & TBnombre.Text & "',apellidos = '" & TBapellidos.Text & "',calle = '" & TBcalle.Text & "',telefono = " & TBtelefono.Text & " WHERE id_cliente=" & CBid.Text & ""
            Dim cmdInsert As New OleDbCommand(consulta, conexion)
            cmdInsert.ExecuteNonQuery()
            conexion.Close()
            MsgBox("Modificacion realizada con exito")
            TBid.Text = ""
            TBnombre.Text = ""
            TBapellidos.Text = ""
            TBcalle.Text = ""
            TBtelefono.Text = ""
            GBdatos.Visible = False
            cargar_registro(DGV)
        End If

q error te da?
mira bien q esten todas las comillas simples donde deban estar, y q los campos q metes coinciden con el orden de la base de datos
Ya esta, era que no estaba abriendo la conexion y por eso me daba el error

Gracias
Tision escribió:Ya esta, era que no estaba abriendo la conexion y por eso me daba el error

Gracias

suele pasar, a mi me ha pasado mil veces eso :P
La verdad es que si yo me encontrara con ese código en un proyecto, mis blasfemias se oirían en toda españa.
Joder que chapuza.

Un poquito de separación de conceptos no iría nada mal la verdad.
zheo escribió:La verdad es que si yo me encontrara con ese código en un proyecto, mis blasfemias se oirían en toda españa.
Joder que chapuza.

Un poquito de separación de conceptos no iría nada mal la verdad.

¿?
Ese es el problema que veo por tu respuesta, que al parecer no se sabe ni de lo que hablo, o eso me dan a entender las interrogaciones.

Me explico; básicamente me refiero a separa conceptos dentro del código, espero que te suene el tema de aplicaciones por capas:

Presentación
--
Lógica Negocio
---
Acceso a base de datos

Por ejemplo en el primer ejemplo de código, tienes metida en una sóla función ejemplos de todas esas capas:
Acceso a bases de datos por la consulta
Lógica de negocio por la comprobación de excepciones
Presentación por el acceso a los textbox y el message form.

Vamos, todo metido ahí de cualquier manera, lo que es una señora chapuza.

A partir de ahí, cosas como el Modelo Vista Controlador, Modelo Presentación Controlador, y mil más, hay para investigar un rato.


Pero resumiendo, lo que yo haría rápidamente en este caso para que fuera menos chapuza.
En una clase metes todas las llamadas a la base de datos como métodos.
Los datos recuperados de la base de datos se usan para crear objetos de negocio con las propiedades deseadas.
Esos objetos se vinculan a los objetos en el formulario.

Algo así:
Dim clientDao as New ClientDataAccessObject( dbConnection )
Dim c as New Client( clientDao.GetClientWithID(1) )

txtNombre.Text  = c.Name
txtDNI.Text = c.DNI.ToString()
zheo escribió:Ese es el problema que veo por tu respuesta, que al parecer no se sabe ni de lo que hablo, o eso me dan a entender las interrogaciones.

Me explico; básicamente me refiero a separa conceptos dentro del código, espero que te suene el tema de aplicaciones por capas:

Presentación
--
Lógica Negocio
---
Acceso a base de datos

Por ejemplo en el primer ejemplo de código, tienes metida en una sóla función ejemplos de todas esas capas:
Acceso a bases de datos por la consulta
Lógica de negocio por la comprobación de excepciones
Presentación por el acceso a los textbox y el message form.

Vamos, todo metido ahí de cualquier manera, lo que es una señora chapuza.

A partir de ahí, cosas como el Modelo Vista Controlador, Modelo Presentación Controlador, y mil más, hay para investigar un rato.


Pero resumiendo, lo que yo haría rápidamente en este caso para que fuera menos chapuza.
En una clase metes todas las llamadas a la base de datos como métodos.
Los datos recuperados de la base de datos se usan para crear objetos de negocio con las propiedades deseadas.
Esos objetos se vinculan a los objetos en el formulario.

Algo así:
Dim clientDao as New ClientDataAccessObject( dbConnection )
Dim c as New Client( clientDao.GetClientWithID(1) )

txtNombre.Text  = c.Name
txtDNI.Text = c.DNI.ToString()

si se a lo q te refieres... pero... q esperas para un programilla normalillo de practica? todo documentado y super ordenadito? para q? si me dijeras q es un programa para un proyecto de una oficina q lo va ver mucha gente y tienen q trabajar sobre el... todavia.

y aun asi, si te crees q en el trabajo te lo van a dar todo perfectamente ordenado, lo llevas claro... si vieses la cantidad de chapuzas inentendibles q he tenido q leer para documentar codigo de gente q ni conozco...
Darxen escribió:si se a lo q te refieres... pero... q esperas para un programilla normalillo de practica? todo documentado y super ordenadito? para q? si me dijeras q es un programa para un proyecto de una oficina q lo va ver mucha gente y tienen q trabajar sobre el... todavia.

Razón de más para hacerlo bien: hay que aprender a hacer las cosas bien desde el principio y además es un programa pequeñito, donde es más que abarcable hacerlo correctamente. O sólo hay que hacer las cosas bien cuando el alcance es mayor que un límite?

y aun asi, si te crees q en el trabajo te lo van a dar todo perfectamente ordenado, lo llevas claro... si vieses la cantidad de chapuzas inentendibles q he tenido q leer para documentar codigo de gente q ni conozco...

Ahora cuéntame algo que no sepa ya. Y eso que yo he tenido mucha suerte en ese aspecto, no me puedo quejar, ni he tenido que documentar código de otros...
23 respuestas