PDA

Ver la Versión Completa : Eliminar registros en tablas enlazadas


vhirginia
29-04-2004, 12:35:27
Buenos días a todos:
Me gustaría que me ayudarais en una duda, Tengo dos tablas paradox :una con información sobre edificios y otre de pisos(de esos edificios).Están enlazadas por un campo llamado edificio, que representa al nombre.Entonces cuando elimino un edificio de la tabla edificios, se deberían eliminar todos los pisos de la tabla pisos cuyo campo edificio coincida con el edificio eliminado.¿No se debería hacer automáticamente?Y si no, he pensado que habría que utilizar un filtro,verdad?
Espero que me podáis ayudar.
Muchísimas gracias.

__cadetill
29-04-2004, 12:39:40
Paradox no tiene eliminación en cascada, por lo que has de controlar el evento BeforeDelete del TTable de edificios y, allí, borrar primero los pisos


delete from pisos where edificio = XXXX


o bien con un simple bucle (suponiendo que están en relación master/detail)


while not TPisos.Eof do
TPisos.Delete;

vhirginia
29-04-2004, 16:55:12
Perdona cadetill,
¿Qué quieres decir con lo de código SQL?¿Lo podemos utilizar aunque nuestras tablas sean paradox?
Gracias por tu ayuda.

delphi.com.ar
29-04-2004, 16:58:33
Perdona cadetill,
¿Qué quieres decir con lo de código SQL?¿Lo podemos utilizar aunque nuestras tablas sean paradox?
Si lo puedes utilizar... Prueba poner un TQuery y verás

Saludos!

vhirginia
29-04-2004, 17:24:34
Gracias,pero es que ahora nos surge una duda :¿Cómo podemos establecer la relación master/detail?Es que ya tenemos las tablas hechas y para modificarlas con el form wizard nos obliga a que aparezca en un form y no queremos eso.
¿Cómo podríamos hacerlo?
A ver si nos puedes echar una mano
Besines

__cadetill
29-04-2004, 18:14:47
Establecer una relación master/detail es sencillo

1.- Selecciona la tabla detalle
2.- en su propiedad MasterSource pon el DataSource de la tabla master
3.- haz clic el botón que aparece en la propiedad MasterFields para idicar qué campos se une de una tabla con la otra

Con esto ya tienes tu relación master/detail en marcha

vhirginia
29-04-2004, 18:29:56
Gracias cadetill.
pero tenemos un problema:al intentar poner en el mastersource de la tabla detalle el datasource de la tabla que queremos que sea master, no nos aparece nada que seleccionar en la combobox mastersource.
Hemos añadido la unidad de la tabla master, para poder utilizar su datasource.
Perdón por las molestias

__cadetill
29-04-2004, 18:35:46
Hemos añadido la unidad de la tabla master, para poder utilizar su datasource.

Esto significa que has añadido en la clausula uses del form donde está el detalle la unit del maestro? si es así, es correcto

Por otro lado, el TTable maestro tiene Datasource? está en la misma Unit? Si es así, debería de salirte. No onstante, puedes escribirlo tu misma poniendo nombre de fromulario + nombre de datasource

vhirginia
29-04-2004, 18:57:19
Muchas gracias, Ya hemos arreglado lode master/detail, pero con el código de antes para eliminar los registros de la tabla detalle, no nos elimina los del edificio que seleccionamos sino todos los existentes en la tabla de pisos.
Hemos usado lo que tu nos dijiste:

while not TPisos.Eof do
TPisos.Delete;

marcoszorrilla
29-04-2004, 19:52:32
while not TPisos.Eof do
TPisos.Delete;

Si borras todo quiere decir que no tienes establecida
correctamente la relación maestro-detalle.

Un Saludo.

vhirginia
29-04-2004, 21:47:02
Creo que si la tenemos bien, al menos hemos puesto todo lo que cadetill nos dijo lo de poner el el MasterSource de la tabla detalle el DataSource de la tabla master y el campo por el que se enlazan en el MasterField.
una pregunta: Cuando hacemos 2 DBLookUpComboBox en el ListSource ponemos la tabla y en el campo el ListField del primero el campo clave que es el que enlaza las dos tablas, pero también hay una propiedad que se llama KeyField a la cual también le damos el valor del campo clave. Ahora, y aquí es donde tenemos una duda, en el DBLookUpComboBox 2 hacemos lo mismo, poner el ListSource y el ListField correspondientes, pero el KeyField ponemos el ListField también, pero no es clave, simplemente es un campo más de búsqueda ¿deberíamos rellenar ese KeyField? y ¿si lo tenemos que rellenar con que campo, el realmente clave o el que corresponde a ese segundo DBLookUpComboBox?
Espero haberme explicado.
Muchas gracias y perdón por robaros tiempo.

jachguate
29-04-2004, 22:28:51
Use KeyField to link the ListSource of the lookup control to the DataSource. Although the name of the field specified as the KeyField does not have to be the same as the name of the field specified as the DataField, the two fields must have the same values.

After specifying the ListField, choose which field the lookup control will actually display with the ListField property.

If the DataField field is a lookup field, don't specify anything for KeyField or ListField; lookup controls automatically use the data field's LookupKeyFields property for KeyField.

Este tipo de ayuda contextual de delphi podes obtenerla poniendote en la propiedad donde te interesa en el Object Inspector, y presionando F1.

Si no tenes mucha habilidad con el Ingles, podes auxiliarte de algun diccionario o traductor. Incluso tenes en línea varios, por ejemplo el de google (que te permite traducir cualquier trozo de texto):

http://www.google.com/language_tools?hl=es

Veo que no han seguido mi recomendación de leer un libro... :(

Hasta luego.

;)

jachguate
29-04-2004, 22:35:08
ah... olvide mencionarlo. A muchos nos pasa que la ayuda, de un tema desconocido, nos deja con muchas dudas... entonces yo al menos, habitualmente comienzo a hacer pruebas para terminar de entender el comportamiento de las cosas. Cuando después de esto aún tengo dudas, entonces acudo a mis buenos amigos del club por ayuda.

Hasta luego.

;)