FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. Última edición por dec fecha: 31-07-2006 a las 14:35:12. |
#2
|
|||
|
|||
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:
// OnClick del Boton Grabar // Comprobamos que estoy en insercción, pues si estoy modificando un // registro y es lógico e irrefutable que ya exista ;-) if MD.tbCompra.State = dsInsert then begin cRut := Md.tbCompra.FieldByName('Rut').AsString; cTipDoc := Md.tbCompra.FieldByName('TipDoc').AsString; nDoc := Md.tbCompra.FieldByName('NumDoc').AsInteger; Md.tbBuscaCompra.Open; // abro justo antes de buscar Md.tbBuscaCompra.IndexName:='CompCom'; If MD.tbBuscaCompra.FindKey([cRut,cTipDoc,nDoc]) THEN begin ShowMessage('El registro ya existe'); end else begin MD.tbCompra.Post; ShowMessage('Registro grabado'); end; md.tbBuscaCompra.Close; end else begin MD.tbCompra.Post; // Se supone que si estamos modificando no se han modificado los // campos claves. end; |
#3
|
||||
|
||||
Saludos
Es extraño este código : Cita:
Me parece que falta otra tabla!
__________________
Van Troi De León (Not) Guía, Code vB:=Delphi-SQL, ¿Cómo? Viajar en el tiempo no es teóricamente posible, pues si lo fuera, ya estarían aqui contándonos al respecto! |
#4
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#5
|
||||
|
||||
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...
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#6
|
||||
|
||||
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.
__________________
PepeLolo El hombre el único virus que mide más de unas cuantas micras |
#7
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#8
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#9
|
||||
|
||||
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 |
#10
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#12
|
||||
|
||||
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..
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
#13
|
||||
|
||||
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.
__________________
PepeLolo El hombre el único virus que mide más de unas cuantas micras |
#14
|
||||
|
||||
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.
__________________
Solo se q nada Se, Cada dia es un aprendisaje y asi siempre sera. |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
busqueda sql | Dark Aeris | Firebird e Interbase | 10 | 06-06-2006 23:05:20 |
Busqueda Con Una Sql | salvanano | SQL | 5 | 05-05-2005 20:59:11 |
Problemas con busqueda | romansiux | Conexión con bases de datos | 3 | 30-04-2005 17:48:58 |
busqueda | alachaise | Internet | 1 | 31-03-2005 16:57:34 |
Problemas con los campos Busqueda | walace_soy | Firebird e Interbase | 5 | 24-09-2004 09:02:15 |
|