FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problemas Con ADOquery y Tablas Relacioanadas
Hola Amigos tengo el siguiente problema
Mi BD es esta formada por 2 tablas relacionadas . AREA. - depto - rut_area - observaciones PERSONAL - rut_personal - nombre - direccion - fono utilizo los siguientes controles adoconnection ---> mi coneccion a la BD adoquery1--> sql---> Select * from personal Mi codigo es asi if key=#13 then // presiono enter y busca rut(es un codigo) begin adoquery1.Close ; with adoquery1 do begin with sql do begin clear; add('Select * from personal where rut_personal='''+edit1.Text+''''); open; end; end; adoquery1.first; if adoquery1.Eof then begin showmessage ('datos no encontrados'); end else begin edit2.Text :=adoquery1.FieldValues ['nombre']; // los despliego por pantalla edit3.Text :=adoquery1.FieldValues ['direccion']; edit4.Text :=adoquery1.FieldValues ['fono']; end; end; end; procedure TForm1.Button1Click(Sender: TObject); // boton de eliminacion begin try adoquery1.SQL.Clear ; adoquery1.sql.Add('delete from personal where rut_personal='''+edit1.Text+''''); adoquery1.ExecSQL ; showmessage ('datos eliminados'); except adoquery1.Cancel ; raise; end; end; AHORA CUANDO PRESIONO EL BOTON DE ELIMINACION DE REGISTRO ME DESPLIEGA EL SIGUIENTE ERROR: "EL REGISTRO NO SE PUEDE ELIMINAR O CAMBIAR PORQUE LA TABLA 'AREA' INCLUYE REGISTROS RELACIONADOS" ALGUIEN ME PODRIA DAR UNA MANO COMO PODER MOSTRAR ALGUN CUADRO DE MENSAJE DANDOLE EL AVISO DE QUE EL REGISTRO ESTA SIENDO UTILIZADO Y QUE NO SE PUEDE ELIMINAR O COM PODER INTERSEPTAR EL ERROR YA QUE PROBE CON TRY EXCEPT PERO NO SE COMO PRODRIA SER LA SOLUCION. LES AGRADECERIA UN EJEMPLO GRACIAS LES SALUDA KaTo |
#2
|
||||
|
||||
Si lo que quieres es que al borrar un registro maestro se eliminen todos los relacionados automáticamente, tienes que añadir desde Access a parte de la integridad referencial, tienes la posibilidad de marcar dos opciones Actualización en cascada y Eliminación en cascada, esta última te resolverá el problema.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#3
|
|||
|
|||
Cita:
Me podrias enviar algun ejemplo a traves de codigo porfa Un Saludo. |
#4
|
||||
|
||||
Algo como esto, adáptalo:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
Gracias MarcosZorilla me sirvio de harto.
Una ayuda mas, quisiera saber que me conviene mas trabajar con post con consultas tipo Insert into ....., o con Locate o Select * from ...., dbedit1.text o Edit1.text ¿ que es mas rapido ? o mejor para trabajar con SQL Server, ya que he realizado un ABM (ALtas, Bajas, Modicaciones) , pero con puras consultas Select * from Where --> es mas rapido asi o es mas lento. ya que cuando ubico un registro con locate a diferencia de SElect es mas rapido con Locate, sera a lo mejor por que es campo indice. Te agradeceria tu ayuda, gracias Master - Hice algo asi: if adoquery1.locate ('mi_campo',edit1.text,[]) then showmessage ('dato encontrado') else begin adoquery1.append; adoquery1.fieldbyname('mi_campo').asstring:=edit1.text; try adoquery1.post; except adoquery1.cancel; raise; end; end; porque me da error este codigo. Adoquery1 --- > string -->Select * from Tabla Saludos y gracias |
|
|
|