Autor
|
Tema: Validar conjunto de datos. (Leído 7,221 veces)
|
piwi
Desconectado
Mensajes: 439
|
Hola. Me he encontrado con este manual como validar los conjuntos de datos. http://msdn.microsoft.com/es-es/library/ms171930(v=VS.80).aspx La validación la hago sobre un campo que es PK y busco si ya existe en la base de datos. Al probarlo me funciona y me muestra el mensaje de error que ya existe este valor pero al dar a guardar sigue intentando guardar los cambios y me da error de clave duplicada. Para solventarlo he hecho lo siguiente (que me parece una chapuza) en el BindingNavigatorSaveItem_Click If String.IsNullOrEmpty(ErrorProvider1.GetError(IDTextBox)) Then Me.Validate() Me.LICENCIASBindingSource.EndEdit() Me.TableAdapterManager.UpdateAll(Me.LicenciasDataSet) else msgbox("Existen errores") end if Faltaría algo de código para controlar los errores, esta como a medias, aunque me muestre el error, sigue con la grabación. La solución de arriba me funciona cuando es el boton guardar pero si le doy al nuevo o a las flechas de navegación también guarda los valores automaticamente, donde están el código que guarda los datos por ejemplo al dar al botón nuevo? Gracias de antemano.
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Dos cosas, una no se si seguiste el manual bien porque no posteas el código completo, si quieres hazlo en pastebin.com y nos pasas el link. Y segundo, que no entendí bien el problema, acuerdate siempre de explicar bien el escenario. Por ejemplo, tengo X controles, la base de datos es TAL, El tipo de conexión, la conexión no la hago a mano, sino con Controles SqlDataSources, etc.. De ésta manera es mucho más fácil para entender el problema y darle una solución.. Saludos!
|
|
|
En línea
|
|
|
|
MaLkAvIaN_NeT
Desconectado
Mensajes: 213
MaLkAvIaN_NeT
|
Amigo no se que quieres hacer pero las pk sirven precisamente para validar que no existan claves duplicadas,, no perjudiques el SGDB buscando si la clave ya existe, esas operaciones puedes hacerlas en el cliente.
|
|
|
En línea
|
a por las buenas ideas
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Casi nunca debes haces validaciones de PK, debido a que es más recomendado usar una columna Identity, si ese registro necesita un código que vaya a ser usado fuera del sistema en sí, ejemplo código de barras, serial o lo que sea, eso no es el PK, sino un valor más del registro..
Te recomiendo que sigas ésta idea,
Un saludo!
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Gracias por las respuestas. Os pongo un ejemplo. Creo una tabla llamada personas cuyos campos son dni, nombre, apellido. Como el campo DNI es único entonces lo pongo como la clave primaria. Por una lado porque haré busquedas por él y por otro lado que no puede ser nulo y nunca será duplicado. Teniendo la BD lista ahora desde el vb creo un origen de datos y lo arrastro al formulario en forma de campos sueltos (modo detalle y no datagridview). Hasta aquí no he hecho nada, y vb me ha creado los tres campos: dni, nombre y appelido enllazados a datos, un bindingsource, un tableadapter, tableadaptermanager y bindingnavigator. Además de eso utilizo un ErrorProvider para mostrar los posibles mensajes de error. Lo que me queda es realizar las validaciones para que no me salte una excepcion que que el campo dni es único y que no esté duplicado, es ahí donde he intentado realizarlo a nivel de dataset como dice aquí http://msdn.microsoft.com/es-es/library/ms171930 pero me he encontrado con el problema que pongo en el primer post. Otra duda que tengo, automáticamente me ha creado el código en en evento saveitem_click de bindingnavigator que ahí puedo realizar los chequeos pero el problema está que también está guardadondo automaticamente cuando doy a las flechas para cambiar de registro o cuando doy a un nuevo registro. En definitiva, lo que quiero hacer es chequear que el campo dni no esté vacío ni que esté duplicado, donde lo tengo que hacer, a nivel de dataset, en validación del campo?
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Sin importar si el campo DNI es único, yo, personalmente no recomiendo que lo coloques como PK, sino que además crees un ID Autonumérico (Identity en MsSql, Autoincremental en MySql), Qué pasa si creas un registro con un DNI "E123" por ejemplo, y más adelante te dicen que lo escribieron mal, muchas tablas se van a ver afectadas, y por ende tu sistema, por lo que es siempre mejor colocar Autonuméricos en la mayoría de los casos. Ahora, para validar los datos cuando usas un BindingNavigator, debes suscribirte a los eventos de los controles enlazados (a los que les haces el binding) y no al BindingNavigator ni al Source. Por ejemplo, en el caso de un DataGridView te suscribes al evento CellValidating, CellValidated, RowValidating o RowValidated, lo mismo pasa en los demás controles. Por ejemplo en un TextBox private void DNITextBox_Validating(object sender, CancelEventArgs e) { if (string.IsNullOrEmpty(taskStateNameTextBox.Text)) { personaErrorProvider.SetError(DNITextBox, "El campo DNI no puede ser vacío"); e.Cancel = true; } else { personaErrorProvider.SetError(DNITextBox, string.Empty); } }
Fíjate en la línea subrayada, el los controles de databinding son llamados a la hora de pedir los datos para ser mandardos al datasource, entonces a todos se les ejecuta el método Validating y Validated. En Validating es donde haces todas las validaciones. Un saludo, espero te funcione!
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Gracias por todo.
Lo probaré. De momento he solucionado la mayoría de mis males quitando del bindingnavigator de los botones las propiedades de movefirsitem y las demás y lo hago a mano así tengo más control. El problema que veo en el código que me has puesto es si no paso por el campo dni y le doy a guardar, me dará error ya que ni ha pasado por validating.
Un saludo
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
A qué te refieres , "si no pasas por el campo"?
|
|
|
En línea
|
|
|
|
piwi
Desconectado
Mensajes: 439
|
Me refiero que el validating de un textbox salta cuando el texbox pierde el foco.
|
|
|
En línea
|
|
|
|
[D4N93R]
Wiki
Desconectado
Mensajes: 1.646
My software never has bugs. Its just features!
|
Cuando cambias el registro actual con el BindingNavigator, se validarán el "binding Value" actual para ese control. Entonces el evento Validating debería funcionar.
Saludos!
|
|
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
¡ Conjunto de acertijos faciles !
Desafíos - Wargames
|
Garfield07
|
0
|
5,494
|
4 Enero 2011, 18:06 pm
por Garfield07
|
|
|
¿Cómo validar la entrada de un tipo de datos en C++ o C?
Programación C/C++
|
theluigy13etv
|
0
|
7,138
|
27 Junio 2011, 03:33 am
por theluigy13etv
|
|
|
Validar ingreso de datos en C Sharp
.NET (C#, VB.NET, ASP)
|
DanielPy
|
3
|
3,263
|
14 Julio 2013, 04:04 am
por DanielPy
|
|
|
Validar la entrada de datos C
Programación C/C++
|
mester
|
1
|
2,067
|
6 Octubre 2015, 20:47 pm
por ivancea96
|
|
|
¿Como validar datos?
Programación C/C++
|
Riverxz
|
2
|
2,404
|
1 Septiembre 2016, 01:16 am
por ivancea96
|
|