Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > SQL
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 22-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Antes de nada te recomiendo un manual de sql, avanzarás más rápido, éste es uno de tantos, pero busca un poco, los hay de todo tipo.

Lo de borrar un producto y que se borren las tarifas, se llama integridad referencial, en el caso de mysql no sé la respuesta, pero básicamente hay que decirle a la base de datos que el campo CodProductos de la tabla tarifas es una clave ajena (foreign key) de la tabla productos, y en caso de borrado de un producto, se borre todos las filas de ese producto en la tabla tarifas (ON DELETE CASCADE). Aqui viene

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #2  
Antiguo 22-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Gracias Lepe y si, si tengo un manual de SQL a mano siempre que necesito algo.. pero como esto de integridad referenciál no sabía osea que no tenía idea de como buscar.. gracias por darte la molestia de ponerme los link .. en este momento estoy en el trabajo, cuando llegue a casa lo probaré y luego comento que pasó y seguro que tendré otro problema..

gracias

salud!!
Responder Con Cita
  #3  
Antiguo 22-03-2007
Avatar de sierraja
sierraja sierraja is offline
Miembro
 
Registrado: sep 2004
Posts: 281
Poder: 22
sierraja Va por buen camino
Saludos, creo que mi intervencion es un poco tardia, pero si te sirve de algo, yo estoy desarrollando un sistema de facturacion y ya pase por la parte de ventas, y si efectivamente maneje solo tres precios y el detalle de la lista de productos coloque una tabla temporal donde agregaba, eliminaba y modificaba cualquier producto, tambien al momento de agregar cada producto tiene la posibilidad de escoger el precio que quieras para ese producto solamente y me ha funcionado muy bien. Tambien observe que estas utilizando Bs. quiere decir que estas en Venezuela. De todas maneras podriamos intercambiar informacion ya que yo manejo la misma moneda. Saludos.
Responder Con Cita
  #4  
Antiguo 22-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Pues que información podríamos intercambiar ?? Si tu ya lo tienes todo listo, además no soy de Venezuela , soy de Bolivia como dice en la parte superior-izquierda de cada mensaje en el foro
y por lo que me dices veo que usas un DBGrid para eso verdad ??
o estás usando un stringGrid ? si sería eso podrías pastear tu código ??
ya que no quisiera repetir las mas de 1000 líneas que puse en los anteriores post, con los que te darás cuenta de cual es mi problema.

saludos.

PD lo siento pero soy nuevo en esto y no creo que pueda servirte de mucha ayuda y tu si a mi jiji
Responder Con Cita
  #5  
Antiguo 22-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
Hola Lepe he estado leyendo http://www.mysql-hispano.org/page.php?id=27&pag=9

le entendí todo y es inetresante la forma como manejan las tablas de esa forma.. ya había leido antes sobre eso, pero algo superficial y ahora entendí mejor y comprendí todo, ahora me parece un poco mas complicado hacer todo eso de

Código SQL [-]
mysql> ALTER TABLE venta DROP FOREIGN KEY 0_26;
Query OK, 2 rows affected (0.22 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> ALTER TABLE venta ADD FOREIGN KEY(id_cliente)
    -> REFERENCES cliente(id_cliente) ON DELETE RESTRICT ON UPDATE CASCADE;
Query OK, 2 rows affected (0.22 sec)
Records: 2  Duplicates: 0  Warnings: 0

es un ejemplo.

hacer eso cada ves que quiero UPDATEAR o EDITAR un precio..
Bueno no es que es difícil.. pero no sería una mejor idea de mantener una sola tabla PRODCUTOS como la tenía en mi primer post, y de ahi leer los valores de los precios correspondientes ???

Bueno solo pienso eso.. por que no lo se hacer
Si es que es mejor de esta forma pues seguiré adelante de esta forma aunque me cueste un hue**

Si sería de mantener mi anterior tabla PRODUCTOS con los campos ahí mismo como sería para poder actualizar un StringGrid con una lista de precios seleccionada por el usuario en en ComboBox ??

Creo que solo sería cambiar en este código algo no ??

Código Delphi [-]
    DM.ZQActualizaListaPrecio.Close;
    DM.ZQActualizaListaPrecio.SQL.Clear;
    DM.ZQActualizaListaPrecio.SQL.Add('SELECT precio FROM Tarifas');
    DM.ZQActualizaListaPrecio.SQL.Add('Where CodProducto = :codigo');
    DM.ZQActualizaListaPrecio.SQL.Add('and Tipo_Tarifa = :Tarifa');
    DM.ZQActualizaListaPrecio.prepare;

with DM.ZQActualizaListaPrecio DO
For i:=0 to  SGListaProductos.RowCount-1 Do
Begin
  ParamByName('codigo').AsInteger  := StrToInt(SGListaProductos.Cells[3,i]);
  ParamByName('Tarifa').AsString = combobox1.items[combobox1.Itemindex];
  Open; // abrimos la consulta
   if not IsEmpty then

      SGListaProductos.Cells[7,i] := Fieldbyname('Precio').AsString; 
  //solo debería existir un registro para esta tarifa y este producto.
   else
   begin
     ShowMessage('No existe El tipo de tarifa para el producto' + StrToInt(SGListaProductos.Cells[3,i]));
     SGListaProductos.Cells[7,i] := '<< Error >>';
  end;  
  Close; // cerramos la consulta para la próxima iteración del bucle.   
End;

Bueno creo que cambiando esta parte :

Código Delphi [-]
    DM.ZQActualizaListaPrecio.Close;
    DM.ZQActualizaListaPrecio.SQL.Clear;
    DM.ZQActualizaListaPrecio.SQL.Add('SELECT precio FROM Tarifas');
    DM.ZQActualizaListaPrecio.SQL.Add('Where CodProducto = :codigo');
    DM.ZQActualizaListaPrecio.SQL.Add('and Tipo_Tarifa = :Tarifa');
    DM.ZQActualizaListaPrecio.prepare;

se podría leer de mi tabla PRODUCTOS donde tengo los las tarifas ??

Bueno si no es posible o se complicaría mas aún.. seguiré tu consejo, lo que acabo de poner es solo una idea mia

salud!!
Responder Con Cita
  #6  
Antiguo 23-03-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Código SQL [-]
ALTER TABLE venta ADD FOREIGN KEY(id_cliente)
    -> REFERENCES cliente(id_cliente) ON DELETE RESTRICT ON UPDATE CASCADE;

No hombre no....

Si en lugar de ON DELETE RESTRICT pones ON DELETE CASCADE, cuando borras un cliente, automáticamente se borrarán todas las ventas que tenga ese cliente en la base de datos, TODAS.

El hecho de poner ALTER TABLE (alterar la estructura de la tabla), es para indicar que MySql tenga este tipo de comportamiento. Lo defines una sola vez, y servirá para todos los registros.

Aplicándolo a la tabla productos y tarifas: Si borras un producto, porque no lo vas a utilizar más, MySql borraría todas las tarifas que existiesen de ese producto:
Código SQL [-]
ALTER TABLE tarifas ADD FOREIGN KEY(Codproducto)
    -> REFERENCES Productos(CodProducto) ON DELETE CASCADE ON UPDATE CASCADE;

Ahora piensa "a lo grande": Tienes un proveedor, ese proveedor te da muchos productos, productos que a su vez estarán en facturas que vendes a tus Clientes, clientes con sus datos personales. Bien definido el sistema, podrías hacer que al borrar un proveedor, se borraran todos los registros asociados, es decir, productos, facturas, clientes, etc. Todo con un simple borrado de un registro en la tabla proveedores.

¿Peligroso? puede, por eso mismo tienes que pararte a pensar si poner ON DELETE CASCADE o bien ON DELETE NULL o bien ON DELETE RESTRICT

¿Potente? por supuesto, puedes desencadenar el borrado en 10, 20 o 100 tablas con solo borrar 1 registro ¡¡ sin escribir ni una sola línea de código delphi!!

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.

Última edición por Lepe fecha: 23-03-2007 a las 00:22:06.
Responder Con Cita
  #7  
Antiguo 23-03-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 20
BlackDaemon Va por buen camino
ahhhhhhh bueno Lepe ahora si entendí bién.. y tienes toda la razón en esos puntos del final de tu post, en eso de peligroso, potente
Es la verdad.. creo que aprenderé a usar así mis tablas de ahora en adelante ya que creo que te libra de muchos problemas

Bueno Lepe muchas gracias por la info, he estado todo el día sentado a ver si alguien respondía el tema jeje y ahora que ya lo sé y lo tengo mas claro lo pondré a la práctica, mañana tendré algunos resultados malos o buenos, eso ya se verá en la practica.. jeje muchas gracias de nuevo
Es que pensé que eso lo tennía que hacer cada ves que un registro o elimine o modifique, pero ahora me doy cuenta que solo se hace una ves y luego es normal..


salud pues!
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Actualizar Archivos Desde FTP papu24ar Varios 4 21-03-2007 03:50:57
Actualizar una base de datos desde un servidor remoto zvf MySQL 1 22-06-2006 22:21:26
Actualizar una base de datos desde un formulario federiconqn21 Varios 1 14-12-2005 16:43:23
Impresión desde un StringGrid... Lester Impresión 10 26-03-2005 07:14:29
Impresion desde un StringGrid fmonte Varios 3 17-09-2004 05:28:29


La franja horaria es GMT +2. Ahora son las 17:50:28.


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