Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 28-08-2004
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #3  
Antiguo 28-08-2004
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
  #5  
Antiguo 28-08-2004
fmonte fmonte is offline
Miembro
 
Registrado: ago 2004
Ubicación: Tandil
Posts: 67
Poder: 20
fmonte Va por buen camino
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
Responder Con Cita
  #6  
Antiguo 28-08-2004
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
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
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 11:40:39.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi