FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Evitar que se cierre la aplicación al introducir un dato repetido
Buenas tardes, tengo una pregunta..
Estoy usando delphi y sql para crear una aplicación en la cual tengo dos tablas (una de instituciones y otra de alumnos), relacionadas con FK. Con delphi estoy usando un dbnavigator para poder agregar,editar,eliminar y moverme, despues todos los datos los muestros en un dbgrid. Ahora mi problema surge en un solo campo.. cuando quiero agregar por ejemplo un dni (en la tabla de sql aclare que es unique) en la tabla de alumnos y ese dni existe se me cierra el programa, trate de usar "dbgrid1.datasource.setdata.locate" pero no tuve resultados.. queria saber como podria hacer el control (en codigo delphi) para que cuando ingrese un dato repetido no se cierre la aplicacion y me muestre un showmessage por ejemplo que diga 'Ese dni ya existe'. |
#2
|
||||
|
||||
Es la primera vez que escucho que se cierra el programa.
Lo mas probable que tengas es una excepcion Estas seguro de que el problema es el dni duplicado? Como escribiste el locate que te dio problemas? De que tipo es el campo dni? |
#3
|
|||
|
|||
Dni es de tipo int not null unique.. y saque el locate porque no me funcionaba, el error que me tira es el siguiente:
s2.subirimagenes.com /otros/previo/thump_9574199error.jpg (entre com y la / hay un espacio xq no me deja subir enlaces ni imagenes el foro) |
#4
|
||||
|
||||
Como escribiste el metodo locate? En donde lo pusiste? Que componentes de acceso a datos estas usando?
|
#5
|
|||
|
|||
Cita:
Los componentes de datos que uso son: Adoconnection, adotable, dbgrid y para agregar,modificar,etc uso el dbnavigator.. cree 3 botones nuevos para que quede mas claro que hace cada uno y puse el dbnavigator como invisible, y los botones son agregar, guardar, eliminar y cada boton solo tiene asignado "Dbnavigator1.BtnClick(Nbinsert);" (nbedit,nbpost y nbdelete) lo que me faltaria saber es como tendria que ser el control y si me conviene ponerlo en el guardar para verificar que "X" dni no existe y si existe que me muestre un cartel diciendo "tal dni ya existe" |
#6
|
||||
|
||||
Buenas.
Yo no utilizo SQL, utilizo Firebird e IBX, pero imagino que lo podras adaptar, yo hago la consulta dentro del DataModule lanzando una query accesoria en el OnChange del campo a comprobar.
Consulta accesoria
Espero te ayude Saludos |
#7
|
||||
|
||||
Yo diría que en términos generales hay dos maneras de lidiar con claves repetidas: prevención y atención. Prevención es la que intentaste primero y la que te expone jafera. Creo yo que si esa forma es la que deseas, es la que deberías seguir en lugar de simplemente decir "no me funcionó". Pon el código que tenías y ta podremos ayudar en ver porqué no te funciona.
De todas formas, no está de más conocer la segunda forma tratar las claves repetidas: atención. Los componentes DataSet (como el ADOTable) tienen el evento OnPostError que se lanza cuando la modificacíon o inserción de un registro produce un error en la base de datos. En ese evento tú decides qué hacer: corregir y reintentar o simplemente dar un aviso al usuario. LineComment Saludos |
#8
|
|||
|
|||
Cita:
Gracias con este lo pude solucionar y ya funciona |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Evitar cierre del formulario. | Tonio | Varios | 3 | 16-09-2005 23:47:39 |
Evitar que se cierre conexion Ftp | D@byt | Internet | 2 | 07-06-2005 20:59:05 |
Como evitar que el usuario cierre la form! | Waldo | API de Windows | 2 | 20-11-2003 18:46:47 |
Como presento una vez un dato repetido en Rave o Qreport | lanysoft | Impresión | 2 | 12-05-2003 15:59:56 |
Evitar introducir caracteres en un campo numérico de un TRxdbGrid | setry2 | OOP | 2 | 07-05-2003 12:07:32 |
|