![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
||||
|
||||
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:
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. |
|
#2
|
||||
|
||||
|
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! |
|
#3
|
||||
|
||||
|
Hola,
tengo problemas al poner esto.
me da este error : Código:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'UPTAD E CASCADE' at line 2 Código:
mysql> SHOW CREATE TABLE tarifas;
y mi tabla PRODUCTOS asi Código:
mysql> SHOW CREATE TABLE productos;
Bueno los prcios no los quité todavía de aquí y tampoco pienso quitarlos xDD Ahora que lo pensé esos serán los que se visualicen al momento de hacer un Table.next; o last; etc. Pero claro.. no afectarán en nada.. y los otros serán de donde leere los valores.. al momento de agregar un producto tendría que INSERTAR los precios tanto a la tabla PRODUCTOS como a la tabla TARIFAS pero eso no es problema por que con mi código que tenía se puede hcer eso. Bueno ahora cual es el problema ?? no veo ningún problema que esté comentiendo pero me da ese error Será por que los tipos de campos no son compatibles? ?? Pero si por lo que veo si son.. BIGINT los 2 y el otro INTYa ahora si que no se cual es el error. salud!! |
|
#4
|
||||
|
||||
|
Tú lo has dicho, uno lo defines como Int(10) y el otro como int(11) deben ser iguales, porque se guardará el mismo número. Además uno es unsigned y el otro no.
Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#5
|
||||
|
||||
|
Cita:
, Por eso mismo se comenta que en los foros no hay "urgencias", ya ves, tenemos 7 horas de diferencia entre Bolivia y España , sin contar que yo tenga un rato libre para entrar al foro.Saludos peninsulares (15:49 )
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#6
|
||||
|
||||
|
Hola hola..
óh! que tondo he sido al no darme cuenta en eso y yo me me cuidaba en ese aspecto.. y se me fué ![]() Bueno ahora aquí con buenas notícias.. he tenía "creo" buenos avances con respecto a esto de la integridad referencial en MySQL y comprendí todo, me quedó todo muy claro Lepe ahora implenté tus ideas y sugerencias y aquí traigo los resultados en código. Primero Mi tabla PRODUCTOS tengo de clave primaria el campo y es autoincrementable, aunque leyendo sobre ese tipo de campo no era posible en versiones anteriores aquí explican un poco mejor sobre el tema para alguien que tenga ganas de aprender http://dev.mysql.com/doc/refman/5.0/...nt-column.html http://dev.mysql.com/doc/refman/5.0/...trictions.html Ahora como les decía que este es mi campo en la tabla PRODUCTOS Id_productos Mi tabla TARIFAS la mentení tal y como estaba solo cambiando los valores de int(11) y quité el autoincrement y también quité que el campo CodigoBarra sea la llave primaria.. por que al serlo no permite que se repitan y yo SI necesito que se repitan cada Codigo de barra.. es mas.. se repetirían 6 veces de acuerdo a la cantidad de lista de precios para cada producto, Luego de eso con este código en mi boton guardar de mi form donde agrego y modifíco los precios, nombres, códigos, etc
ahora explico. DM.ZTAlmacen.Post; esto lo que hace es guardar TODOS los datos que están en los diferentes DBEdits de mi form.. y ahora como podrán ver guardo los precios y codigos en 2 tablas si en la tabla productos y tarifas eso es debido a que me resultará mas fácil mostrar resultados PERO creo que para hacer un UPDATE tendré que hacer a las 2 tablas claro está... no se si esto sea bueno o no, pero no encuentro otra colución para mostrar las tarifas en un FORM con un simple TTable.next; o de esta forma recorrer fila por fila de un campo para ir mostrando en los diferentes DBEdits.. vamos como lo hacía antes yo pero eso se podía por que estaban en una misma tabla las características, , tarífas, y códigos, bueno si alguien me dice como puedo hacer como un simple TTable.Next estaría muy agradecido... Puedo hacer es tener una TTTarifas y conectarlo a mis DBEPrecio1, DBEPrecio2, etc.. luego llenar la tabla TARIFAS con un query.. pero para recorrer los campo de uno a uno hacerlo con la TTTarifa.Next ??? Pero claro.. solo serviría para eso. por que no pienso usar el TTable.appent, open, y POST.. solo serviria para lo antes dicho, recorrer una fila Por ej tengo un totón que es SIGUIENTE y lo que tiene es:
entonces con mi nueva tabla quedaría
eso irá sincronizado ??? osea las descripciones, unidaddes de precio, etc con las tarífas que están en la tabla TARIFAS ??? si es que no habrá problemas cuando elimine un producto creo que sería una idea, ademas como ahora trabajo con innoDB al aleminar un producto se eliminará también en la tabla TARIFAS todos los 6 precios incluyendo el id_producto, osea TODO. bueno voy a comer.. salud! Oh!! que mala suerte yo que pensaba que todo estaba bién ocurre siempre un problema ![]() resulta que ahora cuando edito un producto me escribe en la tabla TARIFAS de nuevo los precios osea 6 filas mas.. cada ves que edito algo.. claro por que en mi código está así, y tendré que ver que hacer para poder saber si está un producto con el mismo id_producto para que lo edite. pero creo que tendré que hacer puro SQL y olvidarme de mi TABLA y usar puros QUERYS asludos Última edición por BlackDaemon fecha: 23-03-2007 a las 21:37:00. |
|
#7
|
||||
|
||||
|
Te estas complicando la vida mucho.
Estudia las Formas Normales o Normalización de tablas, es todo un concepto basado en muchos años de experiencias en diseños de Bases de datos; son las normas para crear una base de datos eficiente, fácil de mantener y ampliar. Lo que pides es muy muy fácil, ahora no puedes usar DBEdits, porque no vas a tener 6 precios, al tener la tabla tarifas el usuario podrá crear 10 o 100 precios distintos.... por tanto usa un grid atado a un Query: Yo no uso MySql, pero seguro que tiene un componente llamado MyDataset que tiene 4 sqls: - Delete - Insert - Update - Select Rellenando cada una de ellas, puedes mostrar en el grid todas las tarifas y precios y que se puedan modificar desde el mismo grid. En el MyDataset puedes asignarle su propiedad MasterSource al DataSource de Productos, de esa forma al cambiar de producto, se muestran en el grid las tarifas del nuevo Producto elegido. Los precios de la tabla productos... sobran, debes eliminarlos. Necesitas urgentemente dejar de programar y pararte a estudiar los conceptos de la tecnología Cliente/Servidor, Diseños de Bases de datos y Normalización de tablas. Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente, se lo volveré a explicar hasta que no lo entienda, Gracias. |
|
#8
|
||||
|
||||
|
Oh!! que mala suerte yo que pensaba que todo estaba bién ocurre siempre un problema
![]() resulta que ahora cuando edito un producto me escribe en la tabla TARIFAS de nuevo los precios osea 6 filas mas.. cada ves que edito algo.. claro por que en mi código está así, y tendré que ver que hacer para poder saber si está un producto con el mismo id_producto para que lo edite. pero creo que tendré que hacer puro SQL y olvidarme de mi TABLA y usar puros QUERYS saludos **************************Table.Edit;********************************* Bueno edito por que justamente cuando postee tu también lo hiciste.. y tendré que seguir tus consejos, voy a eliminar de mi tabla PRODUCTOS todos los precios y trabajar como deve ser, así no se hará una chapucera todo jejeje ahh una cosa mas.. pero es que los 6 precios son fijos, no habrán mas de esos, ademas que tiene que ser en edits o DBEdits por que si te fija en esta parte de mi código del Form VENTAS tengo esto.
que calcula automaticamente con un porcetaje relacionado al primer precio alguna otra forma de hacerlo ?? bueno luego cuento que tal salud ! Última edición por BlackDaemon fecha: 23-03-2007 a las 23:07:24. |
|
#9
|
||||
|
||||
|
Hola Lepe ahora si que estoy perdido
no se ni que hacer.. o no te entendí bién esta frase:Cita:
![]() Cita:
Cita:
Cita:
me elimina todos los datos del id_producto 1 como debe ser, y además elimina de la tabla TARIFAS todos las listas de precios que tienen el id_producto = 1 Osea que esta funcionando bién, ahora mi problema sería con delphi que no se como enlazar los componentes Zquery, Z,Table, DataSource uno con otros para soluionar mi problema.. bueno espero poder haber sido claro, y creo que estoy a punto de superar este mi problema.. se que es algo fácil pero que no puedo darme cuenta, necesito un empujoncito Lepe saludos |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
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 |
|