FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Ayuda para modificar valores de un dbgrid
Hola que tal??
Yo tengo un Dbgrid y modifico un par de valores desde el Dbgrid, pero tengo que tener cuidado porque modifico tambien la clave primaria, entonces tengo que hacer un evento en el dbgrid "OnChange" para capturar cada cambio y hacer un try o algo por el estilo para controlar si existe esa clave primaria. Mi problema es que no se como preguntar por una columna en especial, es decir preguntar si la columna seleccionada es la 1 por ejemplo. Muchas gracias por su ayuda. Francisco |
#2
|
||||
|
||||
La propiedad SelectedIndex del DBGrid te dice cuál es la columna actual y la propiedad SelectedField te da un acceso directo al campo correspondiente.
// Saludos |
#3
|
|||
|
|||
Muchas gracias Roman, me sirvio lo q me dijiste, si el SelectField ya lo estaba usando, pero no me acordaba lo de la columna porque hace bocha q no programo.
Nos vemos. Francisco |
#4
|
||||
|
||||
Oye, y para lo qe estás haciendo me parece que te serviría mejor usar el evento OnBeforePost del DataSet asociado al DBGrid.
// Saludos |
#5
|
|||
|
|||
Hola de nuevo, y eso para que es. Porque capaz q me sierve, porque me estoy complicando, porque lo que hice es hacer el evento onKeyPress pero no es bueno porque porque si yo quiero poner 22 por ejemplo como clave primaria, me va a ir al evento cuando ingreso el primer 2 y si 2 existe en la base me lo va a encontrar y lo voy a anular.
No se si entendes, hice un evento OnDblClick para guardar el valor anterior en una variable global. Luego hice un evento OnKeyPress donde obtengo el valor q ingreso yhago una consulta SQL preguntando por el Key presionado, si existe, lo cambio por el valor viejo q tengo en la variable global, entendes mas o menos. Si tenes otra forma de solucionarmelo te lo agradeceria, muchas gracias roman Francisco |
#6
|
||||
|
||||
Pues yo creo que sí te estás complicando la vida.
Para empezar sería recomendable no modificar campos llave. Para mi lo mejor es usar un campo autoincremental como llave principal y evitar que el usuario vea este campo, que sea de uso interno exclusivamente. Ten en cuenta que la llave principal de una tabla será frecuente que se use para relacionar con otras tablas. Modificar esta llave por tanto, conlleva el tener que modificar todos los regsitros de otras tablas que hagan referencia a ella. Por otra parte, normalmente las validaciones de campos o registros no se deben hacer directamente en los controles de edición. Estos controles sólo tienen dos funciones en la vida: mostrar datos al usuario y recibir datos de él. En una validación de datos lo que estás validando es el valor del campo, no el valor del control de edición. Esto puede parecer un poco bobo pero el punto es que puedes tener varios controles de edición para un mismo campo y es mucho mejor centralizar la validación en un sólo punto que hacerla en cada control. Este punto central puede ser el evento OnValidate del campo. Para codificar este evento debes agregar tus campos al dataset (doble click sobre la componente) y escoger dicho evento para el campo en cuestión. El evento se generará siempre que el valor del campo vaya a escribirse en el registro actual (o mejor dicho, la copia del registro que se mantiene en memoria), por ejemplo, cuando cambias el foco a otro campo. Otra forma de validar datos es a nivel de registro. Puedes usar el evento OnBeforePost del dataset. El evento se generará cada vez que el registro (la copia en memoria) esté a punto de grabarse en la base de datos. Aquí puedes checar el valor de uno o más campos y si algo no está bien cancelar el grabado. También, algunas "validaciones" se hacen después de grabados los datos. Pongo entrecomillado porque en realidad me refiero a las ocasiones en que un registro no puede grabarse en la base de datos debido a alguna restricción de ésta. Por ejemplo, si intentas insertar un nuevo registro con una llave principal que coincida con la de un registro ya existente, el manejador de la base te lo impedirá y generará un error. Este tipo de errores los puedes detectar con el evento OnPostError. En fin, el tema es amplio y yo te recomiendo que dediques un rato a estudiar un poco para embeberte en el tema. Si requieres bibliografía te puedo recomendar el libro "La cara oculta de Delphi 4" de Ian Marteens que puedes bajar gratuitamente. Aunque es para la versión 4 de Delphi, te servirá perfectamente para entender más a fondo el tema de las bases de datos. // Saludos |
|
|
|