Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MySQL
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Insert, Update, Delete+MySQL+Zeos+Master/Detail

Bueno pues.. al grano.
Tengo una base de datos en MySQL que conecto con las ZEOSlib la última versión, ahora tengo 2 tablas innoDB que son relacionales, ahora la pregunta que me tiene mas de 1 semana y no puedo resolverla, ya se que es por falta de conocimientos

¿Como puedo Insertar registros, Editar registros y Eliminar registros de las 2 tablas ?

Lo que mas me cuesta es EDITAR los registros.. pues que en una tabla PRODUCTOS guardo todas las descripciones del producto y en la otra tabla TARIFAS guardo las listas de precios y precios de cada productos, estos están unidos por el id_producto
Aquí les dejo mis 2 tablas PRODUCTOS y TARIFAS

TABLA PRODUCTOS

Código SQL [-]
CREATE TABLE `productos` (
  `ID_producto` int(11) unsigned NOT NULL auto_increment,
  `Descripcion` varchar(30) default NULL,
  `Categoria` varchar(20) default NULL,
  `SubCategoria` varchar(20) default NULL,
  `Unidad` varchar(5) default NULL,
  `Cantidad` int(11) default '0',
  `Proveedor` varchar(20) default NULL,
  `UnidadPrecio` varchar(5) default NULL,
  `PrecioCompraBs` float default '0',
  `PrecioCompraSus` float default '0',
  `Costo` float default '0',
  `FechaActualizacion` date default '0000-00-00',
  PRIMARY KEY  (`ID_producto`)
) ENGINE=InnoDB ;

TABLA TARIFAS

Código SQL [-]
CREATE TABLE `tarifas` (
  `Id_producto` int(11) unsigned NOT NULL,
  `CodigoBarra` bigint(20) NOT NULL,
  `CodProducto` varchar(20) NOT NULL,
  `TipoTarifa` varchar(10) NOT NULL,
  `Precio` double NOT NULL,
  KEY `id_producto` (`Id_producto`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 
-- Filtros para la tabla `tarifas`
-- 
ALTER TABLE `tarifas`
  ADD CONSTRAINT `FK_tarifas_1` FOREIGN KEY (`Id_producto`) REFERENCES `productos` (`ID_producto`) ON DELETE CASCADE ON UPDATE CASCADE;

bueno espero me sepan ayudar por que como les digo busqué en todo lado y creo que tendré que preguntar no mas

Saludos y muchas gracias por leer!

PD para cada producto tengo que guardar 6 listas de precios.. osea 6 precios.
Responder Con Cita
  #2  
Antiguo 02-04-2007
Avatar de Ferrari
Ferrari Ferrari is offline
Miembro
 
Registrado: jun 2006
Ubicación: Torreón, México
Posts: 154
Poder: 18
Ferrari Va por buen camino
Thumbs up Sugerencia

Porque no agregas varios campos de precios..(precio1, precio2, precio3...precioN) y en cuanto a la insercion , edicion y eliminacion de registros pues practicamente todo depende del estado en el que coloques el DataSet...Insert, Edit, Delete. etc. siempre y cuando dependiendo del manejo transacciones en SQL.
Responder Con Cita
  #3  
Antiguo 02-04-2007
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola BlackDaemon
Para eliminar registros en un campo autonumerico es un problema y mas si este esta ligado a otra tabla, como en este caso.
Yo eliminaria el campo autonumerico (lo haria por codigo) y luego enlazaria el numero generado con la otra tabla.
Saludos
Responder Con Cita
  #4  
Antiguo 02-04-2007
Avatar de BlackDaemon
BlackDaemon BlackDaemon is offline
Miembro
 
Registrado: dic 2006
Ubicación: Bolivia - Santa Cruz
Posts: 206
Poder: 18
BlackDaemon Va por buen camino
Cita:
Porque no agregas varios campos de precios..(precio1, precio2, precio3...precioN) y en cuanto a la insercion , edicion y eliminacion de registros pues practicamente todo depende del estado en el que coloques el """DataSet """...Insert, Edit, Delete. etc. siempre y cuando dependiendo del manejo transacciones en SQL.
Esa es mi duda a cual llamas DataSet ??????' Hay un componente que se llama así ? o es una clase, mira que soy nuevo en esto y no se, me podrias explicar ?? ya dije usao ZEOSlib. y Pues así lo tenía antes y no había ningún problema, pero luego mas adelante si a la hora del modulo ventas y armar la factura y elegir que lista de precio usar es un lio, por eso me recomendaron hacerlo de esta forma,

Cita:
Hola BlackDaemon
Para eliminar registros en un campo autonumerico es un problema y mas si este esta ligado a otra tabla, como en este caso.
Yo eliminaria el campo autonumerico (lo haria por codigo) y luego enlazaria el numero generado con la otra tabla.
Saludos
Hola Caral .
pues para eliminar no sería tanto problema.. pues solo tendría que eliminar la fila en la tabla PRODUCTOS y "automaticamente" se borrarán _Todos_ los precios de la tabla TARIFAS. bueno pero ahora la cosa es UPDATEARLOS osea Editarlos.. .. primero tengo una búsqueda, osea busco el código de producto una ves encontrado el producto lleno los Edits con los campos y los edito y guardo.. pero no creo que sea la forma facil de hacerlo puro SQL, creo que para eso hay componente que te hacen la vida mas sencilla como la que dice Lepe, el DataSet, pero ZEOS no tiene ese componente

saludos y gracias por las respuestas.

Última edición por BlackDaemon fecha: 02-04-2007 a las 23:58:07.
Responder Con Cita
  #5  
Antiguo 03-04-2007
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
En la tabla tarifas, te falta un campo IdTarifa, para poder identificar ese precio unequívocamente, que ha de ser la clave primaria de esa tabla (un autoincremento sirve perfectamente).

Ya que comprendes que tu fallo es por falta de conocimientos, debes estudiar el diseño de bases de datos, en internet no faltan documentos de ese tipo (quizás la mayoría esté en inglés o en otro SGBBDD, pero puedes aprender los conceptos).

El tema es muy amplio, pero básicamente es así:
- Seleccionamos, por ejemplo por idproducto, ya que es lo que conocemos en primera instancia
Código SQL [-]
  select * from tarifas where IdProducto = :ids
Esa consulta tiene el parámetro "ids" que se lo daremos en ejecución. Nos dará como resultado los 6 precios de ese producto, es decir 6 registros de la tabla tarifas.

Update:
Código SQL [-]
update tarifas set precio = :ElPrecio where idTarifa = :OLD_IdTarifa

Y aquí está el truco, OLD_ hace referencia al valor antiguo (antes de modificar ) el valor del campo autoincremento IdTarifa. De esta forma podemos identificar uniquívocamente el registro que queremos actualizar. :OLD_IdTarifa, se tomará del registro activo en el TZQuery en el momento de actualizar.

El Tema de insertar ya es más complejo de explicar, porque normalmente se hace uso de Triggers para dar un valor al idTarifa, y eso, son conceptos de la arquitectura Cliente/Servidor.

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



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
Trigger Before (Insert,update,delete)? estebanx MS SQL Server 2 25-05-2006 15:58:19
DBLookupComboBoxs Master/Detail o Detail/Master yusnerqui OOP 5 29-07-2005 18:40:20
Como crear una sentencia SQL (Insert, update y delete) sitrico Conexión con bases de datos 1 14-10-2004 00:02:42
interbase:¿como crear un master-detail-detail? ElSanto24 Firebird e Interbase 2 22-10-2003 10:24:45
zeos, mysql y update did.masnou MySQL 5 07-08-2003 05:10:59


La franja horaria es GMT +2. Ahora son las 22:52:08.


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
Copyright 1996-2007 Club Delphi