Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   MySQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=21)
-   -   Insert, Update, Delete+MySQL+Zeos+Master/Detail (https://www.clubdelphi.com/foros/showthread.php?t=42039)

BlackDaemon 02-04-2007 08:18:03

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 :o

Saludos y muchas gracias por leer!

PD para cada producto tengo que guardar 6 listas de precios.. osea 6 precios.

Ferrari 02-04-2007 21:58:46

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.

Caral 02-04-2007 22:04:16

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

BlackDaemon 02-04-2007 23:10:29

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.

Lepe 03-04-2007 12:04:07

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


La franja horaria es GMT +2. Ahora son las 22:58:47.

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