Formulario de datos

08/08/2006 - 20:11 por Francisco Garzon | Informe spam
Hola grupo, saludos a todos.

Estoy intentando realizar mi primer programa en serio con el vb.net, he
contruido un formulario para acceder a la tabla de clientes de una base de
datos llamada GESTION. Os explico un poco como lo estoy haciendo y despues
os muestro mi problema:

Tengo el siguiente codigo en el evento Load:

strConn = "Server=(Local);DataBase=GESTION;Integrated Security=SSPI"
Dim CNN As New SqlConnection(strConn)

Dim strSQL As String = "SELECT * FROM Customers"
Dim scmd As New SqlCommand(strSQL, CNN)

sda = New SqlDataAdapter(scmd)

Dim scb As New SqlCommandBuilder(sda)
sda.InsertCommand = scb.GetInsertCommand()
sda.UpdateCommand = scb.GetUpdateCommand()
sda.DeleteCommand = scb.GetDeleteCommand()

dsPrincipal = New DataSet()
sda.Fill(dsPrincipal, "Customers")
dtPrincipal = dsPrincipal.Tables(0)

txtID.DataBindings.Add("Text", dtPrincipal, "ID")
txtApellidos.DataBindings.Add("Text", dtPrincipal, "Apellidos")
txtNombre.DataBindings.Add("Text", dtPrincipal, "Nombre")


Para moverme por los registros utilizo botones con el codigos:

Me.BindingContext(dtPrincipal).Position -= 1

ó

Me.BindingContext(dtPrincipal).Position += 1


Para actualizar:

Me.BindingContext(dtPrincipal).EndCurrentEdit()
sda.Update(dtPrincipal)

Para Cancelar:

Me.BindingContext(dtPrincipal).CancelCurrentEdit()
sda.Update(dtPrincipal)


Y todo hasta aqui bien, modifico los textbox y cuando ejecuto el boton
actualizar o cancelar me funciona perfectamente.

En cambio para crear un nuevo registro utilizo lo siguiente:

Me.BindingContext(dtPrincipal).AddNew()

se me limpian los textbox y tecleo los nuevos datos completos. Al pulsar el
boton de actualizar con el codigo que hemos visto antes me salta una
excepcion indicandome que el campo ID es obligatorio y no puede contener
null, borrandome el que yo habia tecleado.

Alguien me puede decir que estoy haciendo mal, y si existe una forma mejor
de hacer los que estoy haciendo, que no sea con el asistente para acceso a
datos, por favor que me lo diga.


Otra pregunta, ¿Para que sirven las siguientes lineas, ya que si las quito
tambien funciona?, ¿Son necesarias?

Dim scb As New SqlCommandBuilder(sda)
sda.InsertCommand = scb.GetInsertCommand()
sda.UpdateCommand = scb.GetUpdateCommand()
sda.DeleteCommand = scb.GetDeleteCommand()

Tambien me gustaria saber que debo ejecutar cuando cierre el formulario y
cerrar todos las conexiones abiertas, dataadapter, dataset, datatable, ...

Como siempre, muchisimas gracias de antemano.

Saludos
 

Leer las respuestas

#1 SoftJaén
08/08/2006 - 21:20 | Informe spam
"Francisco Garzon" escribió:

En cambio para crear un nuevo registro utilizo lo siguiente:

Me.BindingContext(dtPrincipal).AddNew()

se me limpian los textbox y tecleo los nuevos datos completos. Al pulsar
el boton de actualizar con el codigo que hemos visto antes me salta una
excepcion indicandome que el campo ID es obligatorio y no puede contener
null, borrandome el que yo habia tecleado.



Hola, Francisco:

Si el campo ID es la clave principal de la tabla, o es un campo requerido,
necesariamente tendrás que indicar un valor para dicho campo, porque de lo
contrario, obtendrás la excepción que nos has comentado.

existe una forma mejor de hacer los que estoy haciendo,
que no sea con el asistente para acceso a datos



Si deseas tener un formulario enlazado a datos, en lugar de utilizar los
Asistentes, escribe el código fuente necesario.

En el siguiente enlace te lo explico. Lo único que tienes que hacer es
cambiar los objetos del espacio de nombre OleDb, por los mismos objetos
correspondientes al espacio de nombres SqlClient:

Cómo crear un enlace de datos en tiempo de ejecución
http://mvp-access.com/softjaen/base...onet08.htm

¿Para que sirven las siguientes lineas, ya que si las quito
tambien funciona?, ¿Son necesarias?

Dim scb As New SqlCommandBuilder(sda)
sda.InsertCommand = scb.GetInsertCommand()
sda.UpdateCommand = scb.GetUpdateCommand()
sda.DeleteCommand = scb.GetDeleteCommand()



Esos comandos sirven para generar automáticamente los objetos Command
necesarios para insertar, actualizar y eliminar registros, y aunque los
elimines te funciona porque estás trabajando con una sola tabla, que
seguramente no estará relacionada con otra tabla mediante un diagrama.

Tambien me gustaria saber que debo ejecutar cuando cierre el formulario y
cerrar todos las conexiones abiertas, dataadapter, dataset, datatable, ...



Si el formulario que deseas cerrar, lo has abierto de manera «modal», puedes
llamar a su método «Dispose», si deseas que se destruya inmediatamente, cosa
ésta que se hará automáticamente cuando cierres el formulario principal y
por tanto la aplicación.

En cuanto al cierre de conexiones, lo recomendado es que la tengas abierta
el tiempo suficiente para abrir o actualizar un origen de los datos, y
establezcas su valor a «Nothing» (al igual que los restantes objetos que
comentas), cuando no los vayas a utilizar más, para que de ésta manera, se
eliminen definitivamente del montón administrado, cuando se ejecute el
recolector de elementos no utilizados.

Un saludo

Enrique Martínez
[MS MVP - VB]

Nota informativa: La información contenida en este mensaje, así como el
código fuente incluido en el mismo, se proporciona «COMO ESTÁ», sin
garantías de ninguna clase, y no otorga derecho alguno. Usted asume
cualquier riesgo al poner en práctica, utilizar o ejecutar lo recomendado o
sugerido en el presente mensaje.

Preguntas similares