Martes, 05 de Abril de 2005

Nuevo ejemplo.

Este nuevo ejemplo incluye algunas novedades sobre el anterior:

- Nueva clase TQuery.
- Ejemplo anterior desarrollado con la clase.
- Nuevo ejemplo "agenda" usando dos tablas relacionadas y un sistema cabecera/detalle.

Estoy seguro que vais a aprender mucho con este nuevo ejemplo.

Espero vuestros comentarios.

Dercargalo aqui.

La agenda es un ejemplo de lo que puede ser un sistema que recoja multiples telefonos y direcciones de e-mail para cada cliente. Se ha pensado en marcar uno o varios registros de la tabla telefono como principal para que aparezcan en el primer browse, así si se marcan varios el mismo cliente aparecera varias veces en el listado y se se marca uno, pues solo una vez. Si el cliente no tiene recogidos estos datos o no tiene ningun telefono principal, tambien debe salir en la lista.

Esta es la consulta que muestra el primer browse:

SELECT cliente.id, cliente.apellidos, cliente.nombre, telefono.telefono, cliente.f_alta
FROM cliente
LEFT JOIN telefono ON cliente.id = telefono.id_cli AND telefono.ppal = 1
ORDER BY apellidos

A la hora de establecer el mantenimiento, hay que observar lo siguiente:

Nuevo cliente:

Se recogen datos personales y de sus telefonos. Se pulsa "Guardar" y se guardan todo los datos. Primero la cabecera, despues se obtiene el ID del cliente asignado por el servidor para terminar grabando cada una de las filas de los telefonos.

Modificar cliente:

Cuando se modifican los datos de un cliente, si se hacen operaciones en el detalle hay que recoger esos datos en la tabla de telefonos al mismo tiempo que se actualiza el browse. Se pueden producir insercciones de nuevas lineas, modificaciones de las existentes o eliminación de alguna. Si se producen cambios en los datos de la cabecera se grabarán al pulsar "Guardar".

Browse principal

Si desde el browse principal se efectúa el borrado de una linea, automaticamente hay que eliminar las lineas de la tabla de telefonos relacionadas. Si hubiesemos usado tablas INNODb en vez de MyISAM podriamos haber definido la integridad referencial y ahorrarnos este paso.

Consejo

En el programa no he realizado bloqueos y aconsejo hacerlos cada vez que se vaya a insertar datos en las tablas para evitar que si dos terminales estan añadiendo datos a la vez, al recuperar el ultimo autoincremental generado en la base de datos sea de otra fila y se rompa la relación.

Jose A. Suárez   |  Comentarios [1]   |  TrackBack (0)

Comentarios

Buen ejemplo J alfonso, asi si se aprende a programar con mysql. Felicidades

Pablo

Comentado por Pablo Herranz a Martes, 05 de Abril de 2005