FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Validar registro antes de insertar
Hola a todos, estoy haciendo una aplicación para recursos humanos, trabajo con delphi 5 y sql server 2000 para la bd.
Mi pregunta es la siguiente: Quiero validar que un registro no se duplique al capturarlo , pero no se en que evento de la tabla ponerlo, ya probe con beforeinsert, beforepost, onnewrecord , pero no funciona. Este es mi código with spctblCapEmp do begin close; ParamByName('@Id_ControlCurso').Value:=tblCapEmpId_ControlCurso.value; ParamByName('@Id_Emp').Value:=tblCapEmpId_Emp.value; open; end; if not spctblCapEmp.eof then raise Exception.Create('Persona ya existe en curso') mi storeprocedure es el siguiente: CREATE PROCEDURE spctblCapEmp @Id_ControlCurso int, @id_Emp int AS BEGIN Select * from tblCapEmp where Id_ControlCurso =@Id_ControlCurso and id_Emp=@id_Emp end GO con esto trato de evitar que por un error de captura se dupliquen personas dentro del mismo curso Los campos de mi tabla son: id_capEmp llave (autonumerico) id_controlcurso (curso) id_emp (empleado) calificacion En donde puedo validarlo. Gracias a todos. |
#2
|
||||
|
||||
Yo le dejaria ese trabajo a la base de datos, simplemente declaro una clave primaria que no acepte duplicidad, y capturo las excepciones que lanzaria la bd
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#3
|
|||
|
|||
Graciasr Eduarcol,
Entonces tu me sugieres que tenga 3 llaves, mi llave primaria es id_capemp (es autonumerica y es la llave de la tabla), entonces id_curso y id_emp tambien las pongo como llaves?????? Otra pregunta cómo captura las excepciones, en general esta, pues me mandaria un mensaje de duplicidad o lago así, no?? Gracias |
#4
|
||||
|
||||
Pues sobre las llaves no te sabria decir como es el modelo de tu base de datos, aunque me asalta una duda, porq autonumerico si no quieres que se repita???
No se con el motor que tu utilizas con el BDE funciona asi
Seria cuestion de adaptarlo al motor
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#5
|
||||
|
||||
Cita:
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#6
|
|||
|
|||
Validar Edit
Yo hice algo parecido a lo que tu quieres. Lo que valide es que si la clave(ya sea empleado o curso) se repetia entonces que me mandara un mensaje de que ya existe esa clave, a mi parecer, es mejor que le crees una clave a tu empleado y a tus cursos, puesto que los nombre de empleados se repetiran y tambien de los cursos pero los que los diferenciara sera tu clave.Espero y me haya explicado.El codigo que le introduci fue el siguiente
Código:
procedure TForm3.Button1Click(Sender: TObject); begin if curso.Locate('Folio',edit1.Text,[]) then begin Edit1.Clear; mensaje:=Application.MessageBox('El numero de folio ya existe','Error de entrada') end else begin curso.Insert; curso.FieldValues['Nombre_curso']:=Edit1.Text; curso.FieldValues['Clave_CT']:=ComboBox1.Text; curso.FieldValues['Capacidad']:=ComboBox19.Text; curso.FieldValues['Tipo_curso']:=ComboBox2.Text; curso.FieldValues['Especialidad']:=Edit3.Text; curso.FieldValues['Tipo_proveedor']:=ComboBox3.Text; curso.FieldValues['Nivel_capacitacion']:=ComboBox4.Text; curso.FieldValues['Subprograma']:=ComboBox5.Text; curso.FieldValues['Proceso']:=ComboBox6.Text; curso.FieldValues['Subproceso']:=ComboBox7.Text; curso.FieldValues['Area_formacion']:=ComboBox8.Text; curso.FieldValues['Tipo_informacion']:=ComboBox9.Text; curso.FieldValues['Grupo_eventos']:=ComboBox10.Text; curso.FieldValues['Fecha_inicio']:=DateTimePicker1.Time; curso.FieldValues['Lugar_imparticion']:=ComboBox11.Text; curso.FieldValues['Duracion_dias']:=Edit4.Text; curso.FieldValues['Duracion_horas']:=Edit5.Text; curso.FieldValues['Frecuencia']:=ComboBox12.Text; curso.FieldValues['Horario']:=ComboBox13.Text; curso.FieldValues['Costo']:=Edit6.Text; curso.FieldValues['Renglon_gasto']:=ComboBox14.Text; curso.FieldValues['Concepto']:=ComboBox16.Text; curso.FieldValues['Instructor_I']:=ComboBox15.Text; curso.FieldValues['Instructor_E']:=ComboBox17.Text; curso.FieldValues['Folio']:=Edit7.Text; curso.Post; Edit1.Clear; Edit2.Clear; Edit3.Clear; Edit4.Clear; Edit5.Clear; Edit6.Clear; Edit7.Clear; ComboBox1.Clear; ComboBox2.Clear; ComboBox3.Clear; ComboBox4.Clear; ComboBox5.Clear; ComboBox6.Clear; ComboBox7.Clear; ComboBox8.Clear; ComboBox9.Clear; ComboBox10.Clear; ComboBox11.Clear; ComboBox12.Clear; ComboBox13.Clear; ComboBox14.Clear; ComboBox15.Clear; ComboBox16.Clear; ComboBox17.Clear; mensaje:=Application.MessageBox('Los datos se guardaron con éxito!','Mensaje de Confirmación'); end; end; |
#7
|
||||
|
||||
Vas bien Elite, estas aprendiendo rapido, esto lo digo porq apenas hace dias estabas liado, pero ya vas encaminado.
una simple sugerencia, realizar un locate no es recomendable si el sistema piensa ser escalable porq no hace falta recorrer los registros, solo capturar la excepcion debe ser suficiente, asi no saturamos la red
__________________
...Yo naci en esta ribera del arauca vibr@d0r Soy hermano de la espuma, de la garza, de la rosa y del sol... Viva Venezuela |
#8
|
|||
|
|||
asi lo haria
hala pana.
en estos dias tenia problemas paresidos al que planteas. y lo que hice en compañia de mis amigos fue: hacer un procedimiento igual al insertar con la mismas condicion para poder insertar, pero con otra variable. y en el bonton de insertar se pone una condicion que no permita que la insercion sea igual a la que ya este, en este caso seria el nombre. ejemplo:
sin olvidar que antes se debe hacer el procedimiento para insertar, (preferiblemente en una unidad de codigo aparte), al igual que la incersion de validad que es = solo con otra variable. saludos. Última edición por Neftali [Germán.Estévez] fecha: 30-10-2008 a las 09:50:09. Razón: Añadir TAG's de delphi |
#9
|
||||
|
||||
jefferson utiliza TAG's cuando escribas código delphi, por favor. Este se vuelve más legible.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#10
|
||||
|
||||
Como agregado, a lo que se ha dicho, a lo que apunta el compañero eduarcol es a que no es necesario un select, ni locate. Todo apunta a capturar la excepción adecuada.
Si se ha diseñado la tabla para que tenga un campo clave único, la base de datos nos puede advertir de cualquier intento de ingresar una clave repetida. ¿Para que darle el gusto de buscar si la misma base de datos nos va a saber decir si se puede o no? ¿Se entiende la idea? En vez de que viajen muchos registros por la red, sólo hacemos que viaje uno (el que deseamos insertar). Si se puede o no, ya nos dirá la base de datos. la cosa viene a ser algo así:
El ejemplo de eduarcol es más ilustrativo. Saludos, |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Eliminar Registro (Validar) | UTECYBER | OOP | 8 | 29-10-2008 18:15:13 |
cómo Insertar un registro | maximo_nashir | PHP | 1 | 14-07-2007 08:06:05 |
Insertar un registro | psll | Conexión con bases de datos | 2 | 26-10-2006 19:33:42 |
Error al insertar un registro en la BD | RiverPlate | Conexión con bases de datos | 3 | 08-12-2004 15:53:18 |
Insertar registro en tabla | jzk | Conexión con bases de datos | 15 | 26-05-2004 18:58:19 |
|