Problemas en busqueda
Hola nuevamente a todos y gracias por sus ayudas de ante mano.
Mi problema es el siguiente: Estoy usando FindKey para realizar una busqueda y q me diga si existe ya un registro para no repetirlo, pero como utilizo los TDBEdit para mostrar he ingresar los datos me dice que siempre existen y esto es cuando hago el Insert correspondiente.
Estoy usando bases Paradox 7 Y si uso este codigo me arroja un error de violacion.
Gracias de ante mano. |
Provocas un posteo al realizar la búsqueda.
Cuando estás añadiendo o modificando un registro de una tabla no debes provocar que el cursor se mueva del registro, que es lo que pasa cuando haces un FindKey: El registro actual que estás insertando se posteará automáticamente y siempre te dará que existe... claro, acabas de grabarlo...
Lo más rápido, sin entrar en validaciones a nivel de registros y etc, es que antes de lanzar tu MD.tbCompra.Post, hagas la búsqueda en otra tabla que contenga el mismo conjunto de datos, es decir, haz el FindKey sobre TbBuscaCompra (por ejemplo) que debe apuntar a la misma tabla de compras: Código:
|
Saludos
Es extraño este código :confused:: Cita:
Me parece que falta otra tabla! |
Siiiii
Y como verificas q la informacion no quede duplicada.
Como sabes cuando un conjundo de datos digitados esta duplicado en el momento de Agregar un registro o modificarlo. Me puedes dar alguna señal REcuerda q ingresos con TDbEdit y sus componentes. Gracias. |
Gracias Afxa
Pero creo q mi problema radica en q ocupo mucho los DBEdit y esos a su vez no me permiten la validacion de los datos q se ingresas a las tablas ya q los hace directo sobre ellas.
Creo q tendre q hacerlo a la antiguita ingresarlos a un MarkEdit o Edit y transferirlos a las tablas, claro esta despues de validar la información digitada. Es un poco largo y arcaico pero no veo otra solucion. Gracias a todos por la ayuda... |
Una manera muy simple y que siempre aplico a rajatabla es la siguiente:
a) TQuery para consultas de validación, independiente de la tabla sobre la que actuas b) Dependiendo del tipo de Control (DataWare, no DataWare) b.1) Validación en el evento OnValidate del TField, usando el TQuery indicado. b.2) En el evento "OnExit" del control, usando el TQuery indicado. Siguiendo esta simple regla, NO PROBLEM jamas.;) un saludo. |
Gracias amigo ya resolvi el problema
Buenop muchas gracias por las repuestas, y la encontre en aquellas q me hicieron recordar q al encotrar un registro existente este cambia automaticamente de posicion y eso me llevo a verificar las posiciones de un registro nuevo por el insert y verificar el registro encontrado.
De esa forma no tuve q cambiar nada de mi formulario y seguir trabajando con los TDBedit y seguir confiando en ellos. Solo tengo un detalle y es q el Tabla1.Cancel no me anula el Registro nuevo y sigue existiendo, no le he dado la instruccion de Tabla1.Post sino el Cancel, pero = me sigue guardando los datos. Alguna sujerencia a mi problema Gracias nuevamente.:D ;) |
Para PepeLolo porfis
Oye amigo primero gracias por las reglas esta buenas.
Segundo soy algo novato en esto, me puedes hacer una sujerencia en donde encontrar ejemplos en relacion a estos puntos mencionas por ti, o es su defecto podrias tu darme algunos ejemplos para realizar estas validaciones y no tener q hacerme volas con procesos algo engorrozos, (pero q me sirve), y optimizar mi programacion en Delphi. En serio desde ya muchas Gracias, eres un gran aporte.:) |
Cita:
Hasta donde veo tienes dos opciones. 1. La que ya usas que es escribir los datos en un Edit normal (por lo menos los datos de la llave de la tabla) y hacer la búsqueda. Si no hay registro con esa llave entonces puedes pasar a una segunda parte del formulario donde captures el resto de datos, ahora sí con DBEdits. 2. Olvidarte de la búsqueda y prepararte en el evento OnPostError de la tabla para avisarle al usuario que el registro está duplicado. // Saludos |
Gracias Roman
Bien ahora entiendo porq no funciona el cancel, efectivamente cambia la posicion de registro al encontrarlo.
Bien ahora solo si puedes me darias un ejemplo para el evento OnPostError, si no fuese molestia. Desde ya Gracias. |
OnPostError puede generarse por diversas razones así que debes distinguir cuál fue. Aquí tienes un ejemplo de marcoszorrilla donde se trata esto.
// Saludos |
Hola de nuevo
Sorry por mis problemas.
este es codigo q coloque... if (E is EDBEngineError) then Begin if (E as EDBEngineError).Errors[0].Errorcode = 9729 then begin ShowMessage('Documento Para Proveedor ya Existe'); Abort; End; end; Bien me lo hace pero solo una vez despues vuelvo a digitadar otros datos y no vuelve a salir el mensage y me los grava. ¿Porque en q me equivoco? Gracias nuevamente.. |
Como dice roman, puedes usar el ejemplo que te indica o esta otra forma; esto depende del metodo que quieras usar para la validación de la clave.
Este ejemplo es para cualquier tipo de validación (clave primaria, clave foranea)
Espero que te sirva. |
Fiuuuu paso volando ;)
Uffff..
Amigo viendo tu codigo, creo q me falta mucho para llegar a entender este codigo. Sorry no lo entendi, te recuerdo q soy novato y estoy haciendolo en Paradox 7, creo q no entiendo mucho la validacion en delphi, antes trabajabaz en Clipper y el control de los ingresos lo hacia yo directamente estaba acostumbrado a validarlo con comandos y mensajes propio. Sorry nuevamente por mis problemas.;) Pero quiero aprender bien por eso mi insistencia me parece q Delphi fue mi mejor opcion antes programaba en VisualFox Pro, pero los metodos de programacion es muy larga y engorroza. |
La franja horaria es GMT +2. Ahora son las 20:41:19. |
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