Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Firebird e Interbase (https://www.clubdelphi.com/foros/forumdisplay.php?f=19)
-   -   Problema al modificar Ibdtaset (https://www.clubdelphi.com/foros/showthread.php?t=68049)

José Luis Garcí 21-05-2010 13:26:05

Problema al modificar Ibdtaset
 
Hola compañeros, siento seguir dando el coñazo con el tema del IbDataset, estoy usando firebird y delphi 2010, tengo una base de datos llamada Formulas que es el maestro de otra (detalle) llamada FORMULAS_DESGLOCE resulta que cuando estoy creando un nuevo registro no hay problemas, pero cuando modifico un registro del Desgloce se me modifica todos los registros con el mismo CODIGO_FORMULA, supongo que la culpa esta en el modify, pero no estoy seguro de como solucionarlo.



Código Delphi [-]
//SQL SelectSQL

select * from FORMULAS_DESGLOSE where CODIGO_FORMULA = :CODIGO_FORMULA


//SQL DEL INSERT


insert into "FORMULAS_DESGLOSE"
  ("FORMULAS_DESGLOSE"."CANTIDAD", "FORMULAS_DESGLOSE"."CODIGO_FORMULA", 
   "FORMULAS_DESGLOSE"."CODIGO_MAT_PRIMA", "FORMULAS_DESGLOSE"."GRUPO_MAT_PRI_EQ", 
   "FORMULAS_DESGLOSE"."MEDIDA")
values
  (:"CANTIDAD", :"CODIGO_FORMULA", :"CODIGO_MAT_PRIMA", :"GRUPO_MAT_PRI_EQ",   :"MEDIDA")


//SQL DEL MODIFY
update "FORMULAS_DESGLOSE"
set
  "FORMULAS_DESGLOSE"."CANTIDAD" = :"CANTIDAD",
  "FORMULAS_DESGLOSE"."CODIGO_FORMULA" = :"CODIGO_FORMULA",
  "FORMULAS_DESGLOSE"."CODIGO_MAT_PRIMA" = :"CODIGO_MAT_PRIMA",
  "FORMULAS_DESGLOSE"."GRUPO_MAT_PRI_EQ" = :"GRUPO_MAT_PRI_EQ",
  "FORMULAS_DESGLOSE"."MEDIDA" = :"MEDIDA"
where
  "FORMULAS_DESGLOSE"."CODIGO_FORMULA" = :"OLD_CODIGO_FORMULA"

Creo que el problema esta en esta linea

Código Delphi [-]
 "FORMULAS_DESGLOSE"."CODIGO_FORMULA" = :"OLD_CODIGO_FORMULA"
Que deberia ademas controlar el CODIGO_MAT_PRIMA, pero no estoy seguro de como debería hacerlo

Casimiro Noteví 21-05-2010 14:10:51

Deberás diferenciar cada línea y pasarle algún parámetro que la haga identificable y única.
No sé si tienes algún campo "LineaNumero" o algo así que la identifique, pero en todo caso tendrás que modificar el update poniendo todos los campos que permitan identificar la línea sin que pueda afectar a otras, aunque para ello tengas que especificar todos los campos como parámetros, algo así:
Código SQL [-]
update formulas_desglose
set cantidad = :cantidad,
codigo_formula = _:codigo_formula,
codigo_mat_prima = :codigo_mat_prima,
grupo_mat_pri_eq = :grupo_mat_pri_eq,
medida = :medida
where cantidad = : old_cantidad
and codigo_formula = : old_codigo_formula
and codigo_mat_prima = : old_codigo_mat_prima
and grupo_mat_pri_eq = : old_grupo_mat_pri_eq
and medida = : old_medida

Lo idóneo es que tengas un campo LINEA además del que hace referencia a la cabecera, y que ese campo sea la primary key: CodigoCabecera+Linea, sería totalmente identificable sin error ni repetición.

José Luis Garcí 21-05-2010 15:11:46

Gracias por la respuesta Casimiro Notevi, esta tarde lo probare en casa


La franja horaria es GMT +2. Ahora son las 06:04:37.

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