Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   DBGrid y Query (https://www.clubdelphi.com/foros/showthread.php?t=640)

dvdjr 18-05-2003 17:37:27

DBGrid y Query
 
Hola a todos, a ver si me la podiais aclarar lo siguiente:

Tengo un componente DBGrid asociado a un componente DataSource y este a un Query. Tengo que aportar la funcionalidad de eliminar los registros marcados en el componente DBGrid y no se muy bien como hacerlo.

He agregado a la ficha el componente DBNavigator pero soló me aparecen activos los controles de desplazamiento. No puedo insertar ni borrar.

Creo haber leido por ahi que podia eliminar los registros con el procedimiento Delete(), pero no se muy bien cómo hacerlo.

Espero vuestra respuesta y gracias por todo.:confused:

__marcsc 18-05-2003 19:11:33

Hola,

pon a True la propiedad RequestLive del Query.

Saludos.

marcoszorrilla 18-05-2003 19:50:30

Además de lo que te dice Marc ten en cuenta la propiedad CanModify del Query, pues no todos los queryes admiten modificaciones.

Un Saludo.

dvdjr 18-05-2003 19:51:56

Tengo la propiedad RequestLive a true y sigue sin ir. Saludos

marcoszorrilla 18-05-2003 19:54:19

Tendrás que decir que tipo de tablas usas y como es la Query, para ver si tiene arreglo, o simplemente no permite borrados y habría que implementarla de otra forma.

Un Saludo.

dvdjr 18-05-2003 20:02:56

Utilizo tablas de tipo PARADOX 7 y en la query hago un select como sigue:

SELECT m.Id_articulo, m.titulo, m.Autor, m.N_cds, m.N_cop_alq_dis, c.N_cliente, c.Nombre, c.Apellidos, c.Dni, c.Direccion, c.Telefono, a.Precio_alquiler, a.Fecha_alquiler, a.Fecha_devolucion
FROM cliente AS c, alquiler_musica AS a, musica AS m
WHERE c.N_cliente = a.N_cliente
AND m.Id_articulo = a.Id_articulo
ORDER BY m.titulo

Espero vuestra respuesta, muchas gracias!!

marcoszorrilla 18-05-2003 20:33:50

Pues en el momento en que implicas más de una tabla lo mas probable es que no puedas borrar.

Por eso te decía que consultaras la propiedad CanModify.


If MiQuery.CanModify = True then
Delete;

De todas maneras, ten en cuenta que implicas tres tablas, no creo que quieras borrar el artículo, el cliente,....

Si dices que es exactamente lo que quieres borrar, quizás se podría plantear de otra forma.

Un Saludo.

dvdjr 18-05-2003 20:44:59

Hola a todos, mi intención es borrar los registros de la tabla dónde guardo los alquileres que hacen los clientes.

La tabla dónde guardo los alquileres se llama alquiler_musica y tiene los siguientes campos:

N_registro PK
N_cliente
Id_articulo
Precio_alquiler
Fecha_alquiler
Fecha_devolucion

Cómo veréis la Primary Key(PK) es el campo N_registro.
En N_cliente y Id_articulo guardo el número de registro y el número de identificativo del disco de música respectivamente.

Existen otras dos tablas dónde guardo los datos de los clientes y los datos de los discos musicales.

Saludos.

marcoszorrilla 18-05-2003 20:53:21

Entonces solamente debes de implicar esta tabla.

Si quieres borrar todos y la tabla está en uso exclusivo.

MiTabla.EmptyTable;

Si son entre fechas montas una Query que seleccione los registros entre las fechas indicadas.

Si solamente quieres presentar los alquileres e ir borrando de uno en uno con el DbNavigator, haz un Select sobre está tabla únicamente.

Un Saludo.

marcoszorrilla 18-05-2003 21:04:45

Como colofón quizás te interese este truco de "Marco Cantù", que consiste en establecer relaciones maestro-detalle entre querys.

y que consiste en definir un parametro con el mismo nombre que el campo a relacionar, esto en la tabla detalle, de esta manera podrías presentar varías tablas con esta estructura citada y solamente poner RequestLive a la que te interesa.

Un Saludo.

Ruben_Cu 19-05-2003 01:31:25

Hola, como complemento a lo que escribe marcoszorrilla en la ayuda de delphi sobre la propiedad RequestLive se lee
Cita:

Note: All multi-table queries return read-only result sets
O sea que el resultado de tu query es de solo lectura de ahí tus desgracias, aplica el query solo en la tabla que te interesa.

Además Marcos haces referencia a un truco de Cantú pero no das mas referencia, ¿pudieras brindarla?¿donde se puede ver?
Saludos

marcoszorrilla 19-05-2003 07:53:58

Hola Ruben, aquí son las 7h:49 a ver si esta tarde tengo un rato y lo explicó con más amplitud, está tomado del libro de Delphi 6 de Marco Cantù, es extraordinariamente simple y funciona.


Un Saludo.

marcoszorrilla 19-05-2003 16:03:19

El truco procede del Libro de Marco Cantù - "Delphi 6" página 587. en su versión en español. Parte III - Progamación de Bases de Datos.

Para los que no tengan el libro.

Consiste en realizar una relación maestro detalle entre dos Querys, obviamente tendrán un campo en común.

Para el ejemplo podemos utilizar el alias DbDemos que viene con Delphi para los ejemplos.

Necesitamos 2 Tquerys 2 TdataSource y 2 rejillas para comprobar que todo funciona correctamente.

Yo he utilizado para la Query1 la tabla Customer y en el Sql del Tquery he escrito:
Select * From Customer

A este Query conecto el TdataSource1 y a este la primera Rejilla.

EL CAMPO EN COMUN ES: CusTNo

En el segundo Query escribo.
Select *
from orders
Where CustNo = :CustNo

Este parámetro al llamarse igual que el campo es el que hace que funcione la relación maestro detalle.

Esto lo dice Marco Cantù, pero las tablas las he elegido yo para hacer la prueba y va perfectamente.

Ojo el DataSource del Query2 será tambien el DataSource1.

Bueno un saludo a todos.


delphi.com.ar 19-05-2003 17:32:37

Una solucióm mucho mas sencilla, puede ser utilizar un TUpdateSQL asociado a la propiedad UpdateObject del TQuery. Lo que tenés que hacer en este objeto es definir los SQL a utilizar para hacer un Delete, Update y Insert, si solo vas a hacer Deletes, con solo establecer la propiedad DeleteSql es suficiente.

Espero que te sirva, saludos!


La franja horaria es GMT +2. Ahora son las 17:02:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi