FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Validar clave unica en Paradox
Hola. Los voy a molestar con algo basico. Tengo una tabla Paradox Empleados.db con un campo "Codigo" como clave unica (o sea con * en Key).
Cuando hago Empleados.Append, la tabla se pone en estado "dsInsert", luego ingreso los datos con DBEdits, y al presionar el boton Grabar, quiero validar si existe el Codigo ingresado. Si lo busco con FindKey, el cursor de la tabla se posiciona en otro registro y graba el que esta insertando antes de moverse!! Esto es lo que quiero evitar, por que si el codigo ya existia, me va a dar Error Key Violation. Espero haber sido claro y desde ya muchas gracias. |
#2
|
||||
|
||||
TE recomiendo mejor valerte del evento OnValidate del campo Codigo. Para averiguar si ya existe, no podes hacer una operación sobre el mismo componente TTable. Podes lanzar otro TQuery para verificar si existe: algo como:
Código:
query1.sql.text := 'Select * from empleados.db where codigo = :Codigo'; query1.ParamByName('Codigo').AsInteger := Table1Codigo.AsInteger; query1.Open; try if not Query1.isEmpty Then raise EDupValueError.CreateFmt('Error: el código %d ya existe!', [Table1Codigo.AsInteger]); finally query1.close; end; Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#3
|
||||
|
||||
Cita:
// Saludos |
#4
|
||||
|
||||
Bueno, me sorprende la rapidez de las respuestas, creo que esta contestada la pregunta asi que voy a probar las soluciones enunciadas. Me inclinaría por el try-except (expuesto por Roman) para manejar errores, que nunca lo tuve en cuenta y debe ser muy util en muchas ocaciones.
Muchas gracias. |
#5
|
||||
|
||||
Entonces te recomiendo una lectura del apartado de excepciones en la ayuda de Delphi para que tengas una idea más clara de cómo funcionan. Para el caso particular de excepciones del bde te recomiendo este mensaje del compañero marcoszorrilla en donde da un ejemplo muy claro del uso del evento OnPostError y que puedes aplicar a la técnica del try-except:
Código:
try Table1.Post; except on E: EDBEngineError do case E.Errors[0].ErrorCode of eKeyViol: { maneja excepción 'Key Violation' } eRequiredFieldMisssing: { Maneja excepción 'Required Field Missing } ... etc end; end; // Saludos |
#6
|
||||
|
||||
Manejo del error Table.Post
Voy a insistir con un punto mas en este tema. Hice try-except para manejar el error cuando hago Table.Post, donde le aviso ShowMessage('El codigo ya existe'); o algo asi y funciona de maravillas, pero cuando ejecuto dentro de Delphi, la ejecucion se interrumpe y me da el error ('Key violation' en este caso) y me dice 'Run o Step to continue' etc.. Me gustaria saber si esto es normal, o sea a pesar de que yo manejo el error, Delphi interrumpe la ejecucion igual.
Cabe aclarar que si ejecuto el programa fuera de Delphi, no hay ningun, problema no se interrumpe la ejecucion y queda mi reluciente mensaje en la pantalla Desde ya muchas gracias. |
#7
|
||||
|
||||
Cita:
Puedes deshabilitar este comportamiento en el menú Tools|Debugger Options|LanguageExceptions, deshabilitando la casilla "Stop on Delphi Exceptions" // Saludos |
|
|
|