Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como actualizar registros!!! (https://www.clubdelphi.com/foros/showthread.php?t=75528)

negrokau 08-09-2011 17:35:23

Cita:

Empezado por Casimiro Notevi (Mensaje 411313)
Vale, ¿y qué parámetros le pasas para probarlo?

:ParCOD_REMI = ??????
:ParCODIGO = ??????

¿Y qué registros tienes en la tabla?

:ParCOD_REMI = DM.Q_DET_REMISION.FieldValues['COD_REMI'];
:ParCODIGO = DM.Q_DET_REMISION.FieldValues['CODIGO'];

la tabla tiene estos registros
COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD

oscarac 08-09-2011 17:39:58

Cita:

Empezado por negrokau (Mensaje 411323)
:ParCOD_REMI = DM.Q_DET_REMISION.FieldValues['COD_REMI'];
:ParCODIGO = DM.Q_DET_REMISION.FieldValues['CODIGO'];

la tabla tiene estos registros
COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD

Negrokau
lo que mencionas no son registros.... se llaman campos

los registros son la Cantidad de lineas en las tablas

ejemplo
Cita:

Numero...Campo1, campo2, campo3
Reg1......a............1..........2
reg2.......b............1..........2
reg3.......c............1..........2
hay 4 campos y 3 registros en el ejemplo

maeyanes 08-09-2011 17:41:31

Hola negrokau...

Y ese query que indicas, ¿ya lo probaste en algún otro lado (IBExpert u otro programa por el estilo)? Digo, para que compruebes que en realidad te está devolviendo los datos deseados.


Saludos...

Casimiro Noteví 08-09-2011 17:43:25

Cita:

Empezado por negrokau (Mensaje 411323)
:ParCOD_REMI = DM.Q_DET_REMISION.FieldValues['COD_REMI'];
:ParCODIGO = DM.Q_DET_REMISION.FieldValues['CODIGO'];

la tabla tiene estos registros
COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD

Vale, muy bonito ;)

Pregunto por los valores que le pasas y los valores que tiene la tabla.

Ejemplo:

:ParCOD_REMI = 5
:ParCODIGO = 23

Y en la tabla están los siguientes registros:

Código:

COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD
  1        1        112      22        xx      33
  2        4          34      16      yyy      64
  3        6          76      41        zz      28



negrokau 08-09-2011 17:59:13

Cita:

Empezado por Casimiro Notevi (Mensaje 411328)
Vale, muy bonito ;)

Pregunto por los valores que le pasas y los valores que tiene la tabla.

Ejemplo:

:ParCOD_REMI = 5
:ParCODIGO = 23

Y en la tabla están los siguientes registros:

Código:

COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD
  1        1        112      22        xx      33
  2        4          34      16      yyy      64
  3        6          76      41        zz      28



ah disculpen, entendi mal tienen estos registros:

:ParCOD_REMI = 1
:ParCODIGO = 1
Código SQL [-]
COD_REMI, CODIGO, PRECIO_UNIT, TOTAL,    SERVICIO,    CANTIDAD
   1        1         8000     16000   Mantenimiento     2
   2        1         8000      8000   Mantenimiento     1
   3        1         8000      8000   Manteniemitno     1
   1        2         4500      9000   Lineacion         1
   1        3        16800     16800   Balanceo          1
   1        4        18000     18000   Recarga Negro     1

maeyanes 08-09-2011 18:07:31

Hola...

Según el valor de los parámetros y los registros que muestras, ese query solo debe devolver un registro.


Saludos...

Casimiro Noteví 08-09-2011 18:08:55

Pues entonces está bien, sólo hay un registro con ambos campos a 1 :confused:

oscarac 08-09-2011 18:13:35

mmmmm
cuando cod_remi = 1 entonce tiene 4 registros...
entonces si deberia funcionar el bucle while not eof

oscarac 08-09-2011 18:18:36

me parece raro...
si tiene 4 registros entonces debe pasar 4 veces
estan bien asociados los datasource?
no sera que por ahi... tienes nu datasource en el grid que no es el correcto?

negrokau 08-09-2011 18:20:40

:ParCOD_REMI = 1
:ParCODIGO = 1
esta es la 1ª linea y la 2ª es
:ParCOD_REMI = 1
:ParCODIGO = 2
Código SQL [-]
COD_REMI, CODIGO, PRECIO_UNIT,    TOTAL,    SERVICIO,    CANTIDAD
   1       1       8000         16000    Mantenimiento       2
   2       1       8000          8000    Mantenimiento       1
   3       1       8000          8000    Mantenimiento       1
   1       2       4500          9000    Lineacion           1 
   1       3      16800         16800    Balanceo            1 
   1       4      18000         18000    Recarga Negro       1
la 3ª
:ParCOD_REMI = 1
:ParCODIGO = 3

Código SQL [-]
COD_REMI, CODIGO, PRECIO_UNIT,    TOTAL,    SERVICIO,    CANTIDAD
   1       1       8000         16000    Mantenimiento       2
   2       1       8000          8000    Mantenimiento       1
   3       1       8000          8000    Mantenimiento       1
   1       2       4500          9000    Lineacion           1 
   1       3      16800         16800    Balanceo            1 
   1       4      18000         18000    Recarga Negro       1

y la 4ª
:ParCOD_REMI = 1
:ParCODIGO = 4

Código SQL [-]
COD_REMI, CODIGO, PRECIO_UNIT,    TOTAL,    SERVICIO,    CANTIDAD
   1       1       8000         16000    Mantenimiento       2
   2       1       8000          8000    Mantenimiento       1
   3       1       8000          8000    Mantenimiento       1
   1       2       4500          9000    Lineacion           1 
   1       3      16800         16800    Balanceo            1 
   1       4      18000         18000    Recarga Negro       1

necesito que vaya recorriendo con el bucle todos estos registros para que me actualize en la otra tabla de stock, donde tengo que modificar para que me haga esto?

Casimiro Noteví 08-09-2011 18:21:52

Cita:

Empezado por oscarac (Mensaje 411349)
mmmmm
cuando cod_remi = 1 entonce tiene 4 registros...
entonces si deberia funcionar el bucle while not eof

Cita:

Empezado por oscarac (Mensaje 411351)
me parece raro...
si tiene 4 registros entonces debe pasar 4 veces
estan bien asociados los datasource?
no sera que por ahi... tienes nu datasource en el grid que no es el correcto?

Si te das cuenta, el sql tiene un 'and'

maeyanes 08-09-2011 18:23:42

Hola...

oscarac, creo que andas confundido. Si a esta consulta:

Código SQL [-]
select CANTIDAD from DETALLE_REMISION WHERE (COD_REMI=:ParCOD_REMI) AND (CODIGO = :ParCODIGO)

le mandas como valores a los parámetros 1 y 1 y tienes estos registros:

Código:

COD_REMI, CODIGO, PRECIO_UNIT, TOTAL,    SERVICIO,    CANTIDAD
  1        1        8000    16000  Mantenimiento    2
  2        1        8000      8000  Mantenimiento    1
  3        1        8000      8000  Manteniemitno    1
  1        2        4500      9000  Lineacion        1
  1        3        16800    16800  Balanceo          1
  1        4        18000    18000  Recarga Negro    1

entonces el resultado solo será un registro...


Saludos...

oscarac 08-09-2011 18:25:10

por la sangre de cristo
alguien puede editar el post Nº 50 para entenderlo mejor?

oscarac 08-09-2011 18:27:28

Cita:

Empezado por maeyanes (Mensaje 411356)
Hola...

oscarac, creo que andas confundido. Si a esta consulta:


Código SQL [-]
select CANTIDAD from DETALLE_REMISION WHERE (COD_REMI=:ParCOD_REMI) AND (CODIGO = :ParCODIGO)





le mandas como valores a los parámetros 1 y 1 y tienes estos registros:

Código:

COD_REMI, CODIGO, PRECIO_UNIT, TOTAL,    SERVICIO,    CANTIDAD
  1        1        8000    16000  Mantenimiento    2
  2        1        8000      8000  Mantenimiento    1
  3        1        8000      8000  Manteniemitno    1
  1        2        4500      9000  Lineacion        1
  1        3        16800    16800  Balanceo          1
  1        4        18000    18000  Recarga Negro    1

entonces el resultado solo será un registro...


Saludos...


Tienes razon... no me habia percatado del AND.. pero negrokau insiste en que a el le aparecen mas de 1 registro

esto se esta volviendo estresante

oscarac 08-09-2011 18:32:17

negrokau

segun los datos que proporcionas.. y la consulta que haces.... te debe salir 1 registro

Cita:

COD_REMI, CODIGO, PRECIO_UNIT, TOTAL, SERVICIO, CANTIDAD
1 1 8000 16000 Mantenimiento 2
2 1 8000 8000 Mantenimiento 1
3 1 8000 8000 Manteniemitno 1
1 2 4500 9000 Lineacion 1
1 3 16800 16800 Balanceo 1
1 4 18000 18000 Recarga Negro 1
Cita:

1-1
1-2
1-3
1-4
comprendes?

negrokau 08-09-2011 21:44:27

Cita:

Empezado por defcon1_es (Mensaje 410502)
Te actualiza sólo 1 registro porque no recorres la query que trae los datos.
Yo usaría 2 querys, 1 para recorrer la tabla y otra para actualizar los datos.
La primera tendría como código SQL "fijo" lo siguiente:
Código SQL [-]SELECT CANTIDAD FROM DETALLE_FACTURAS WHERE (COD_FACT=:ParCOD_FACT) AND (CODIGO = :ParCODIGO)

NOTA: Si solamente te hace falta el campo CANTIDAD, no hagas un SELECT *
y la segunda tendría este código
Código SQL [-]UPDATE STOCK SET CANTIDAD=CANTIDAD-:ParCANTIDAD WHERE (COD_STOCK= :ParCODIGO)


Y en delphi
Código Delphi [-]procedure TF_FACTURACION.GUARDARClick(Sender: TObject); begin DM.Q_FACTURACION.Post; DM.Transaction.CommitRetaining; //////actualiza cantidad//////////////// DM.CONSULTA.CLOSE; DM.CONSULTA.ParamByName('ParCOD_FACT').AsString := COD_FACT.Text; DM.CONSULTA.ParamByName('ParCODIGO').AsString := CODIGO2.Text; DM.CONSULTA.Open; while not(DM.CONSULTA.Eof)do begin DM.CONSULTA2.CLOSE; DM.CONSULTA2.ParamByName('ParCODIGO').AsString := CODIGO2.Text; DM.CONSULTA2.ParamByName('ParCANTIDAD').AsFloat := DM.CONSULTA.FieldByName('CANTIDAD').AsFloat; DM.CONSULTA2.ExecSQL; DM.CONSULTA.Next; end; end;

yo segui este ejemplo, y como les vengo diciendo solo me actualiza el 1º registro, y como dice oscarac:

cuando cod_remi = 1 entonce tiene 4 registros...
entonces si deberia funcionar el bucle while not eof

me parece raro...
si tiene 4 registros entonces debe pasar 4 veces
estan bien a
sociados los datasource?
no sera que por ahi... tienes nu datasource en el grid que no es el correcto?



cod_remi =1 tiene 4 registro, quiero que me actualize esos 4 registros, ya se que muestra solo 1 registro como esta mas arriba, como puedo hacer que me actualize los 4 registro si es que esta mal lo que estoy haciendo?

negrokau 08-09-2011 21:57:00

Cita:

Empezado por defcon1_es (Mensaje 410502)
Te actualiza sólo 1 registro porque no recorres la query que trae los datos.
Yo usaría 2 querys, 1 para recorrer la tabla y otra para actualizar los datos.
La primera tendría como código SQL "fijo" lo siguiente:
Código SQL [-]
SELECT CANTIDAD FROM DETALLE_FACTURAS WHERE (COD_FACT=:ParCOD_FACT) AND (CODIGO = :ParCODIGO)
NOTA: Si solamente te hace falta el campo CANTIDAD, no hagas un SELECT *


y la segunda tendría este código
Código SQL [-]
UPDATE STOCK SET CANTIDAD=CANTIDAD-:ParCANTIDAD WHERE (COD_STOCK= :ParCODIGO)

Y en delphi
Código Delphi [-]
procedure TF_FACTURACION.GUARDARClick(Sender: TObject); 
begin 
DM.Q_FACTURACION.Post; 
DM.Transaction.CommitRetaining;
//////actualiza cantidad////////////////  
DM.CONSULTA.CLOSE;   
DM.CONSULTA.ParamByName('ParCOD_FACT').AsString := COD_FACT.Text;   
DM.CONSULTA.ParamByName('ParCODIGO').AsString := CODIGO2.Text;   
DM.CONSULTA.Open;    
while not (DM.CONSULTA.Eof) do   
begin  
DM.CONSULTA2.CLOSE;      
DM.CONSULTA2.ParamByName('ParCODIGO').AsString := CODIGO2.Text;     
DM.CONSULTA2.ParamByName('ParCANTIDAD').AsFloat := DM.CONSULTA.FieldByName('CANTIDAD').AsFloat;
DM.CONSULTA2.ExecSQL; 
DM.CONSULTA.Next;    
end;  
end;

yo segui este ejemplo, y como les vengo diciendo solo me actualiza el 1º registro, y como dice oscarac:

cuando cod_remi = 1 entonce tiene 4 registros...
entonces si deberia funcionar el bucle while not eof

me parece raro...
si tiene 4 registros entonces debe pasar 4 veces
estan bien a
sociados los datasource?
no sera que por ahi... tienes nu datasource en el grid que no es el correcto?



cod_remi =1 tiene 4 registro, quiero que me actualize esos 4 registros,
ya se que muestra solo 1 registro como esta mas arriba, como puedo hacer
que me actualize los 4 registro si es que esta mal lo que estoy haciendo?

oscarac 08-09-2011 22:04:55

lo que estas haciendo mal radica en tu primera consulta
Código Delphi [-]
SELECT CANTIDAD FROM DETALLE_FACTURAS WHERE (COD_FACT=:ParCOD_FACT) AND (CODIGO = :ParCODIGO)
aqui estas "capturando" la factura 1 con codigo 1
si nos fijamos en la tabla de datos que colocaste solo 1 registro cumple con la condicion el primero
los demas la cumplen solo cuando cod_fact = '1' y quitale el parametro CODIGO

negrokau 08-09-2011 22:08:54

Cita:

Empezado por oscarac (Mensaje 411397)
lo que estas haciendo mal radica en tu primera consulta
Código Delphi [-]
SELECT CANTIDAD FROM DETALLE_FACTURAS WHERE (COD_FACT=:ParCOD_FACT) AND (CODIGO = :ParCODIGO)

aqui estas "capturando" la factura 1 con codigo 1
si nos fijamos en la tabla de datos que colocaste solo 1 registro cumple con la condicion el primero
los demas la cumplen solo cuando cod_fact = '1'

entiendo,y como soluciono para que "capture" la factura 1 con los demas codigos 2,3,4?
xq laidea es que recorra los 4 registros que tiene la factura 1

oscarac 08-09-2011 22:12:48

Cita:

Empezado por negrokau (Mensaje 411399)
entiendo,y como soluciono para que "capture" la factura 1 con los demas codigos 2,3,4?
xq laidea es que recorra los 4 registros que tiene la factura 1

negrokau
me parece que te estas volviendo automata.....
piensa un poquito...
en tu consulta estas jalando la FACTURA 1 y el CODIGO 1....
si queremos que solo jale la FACTURA 1... debemos........
piensa... piensa...


La franja horaria es GMT +2. Ahora son las 10:35:03.

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