Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Problemas al intentar actualizar registro (https://www.clubdelphi.com/foros/showthread.php?t=55904)

ilichhernandez 30-04-2008 19:40:10

Problemas al intentar actualizar registro
 
Estimados[as], llevo varias horas tratando de resolver esto, y no logro resolver una actualizacion de registro, lo que intento hacer es sumar un valor x a un registro, lo que significa que debo recuperar el valor actual antes de actualizar para poder realizar la suma correspondiente, agradeceria si alguien le echara un vistazo al codigo y pudiera comentarme en que me estoy equivocando, en principio se que tengo problemas en la redaccion de la cadena sql.txt y quizas en el parametro......Saludos y gracias desde ya ....


Código Delphi [-]dm1.IBQuery1.SQL.clear;
dm1.IBQuery1.sql.Text := 'Select cod_producto,stk_actualk,stk_actuale from productos';
dm1.IBQuery1.Open;
actual := dm1.IBQuery1.Fields[1].Value;
dm1.IBQuery1.SQL.Clear;
dm1.IBQuery1.sql.Text := 'Update from productos set stk_actualk = :vara where cod_producto = :varb';
dm1.IBQuery1.ParamByName('vara').AsInteger := actual;
dm1.IBQuery1.ParamByName('varb').AsInteger := strtoint(dbedit2.text);
dm1.IBQuery1.ExecSQL;

Caral 30-04-2008 20:14:09

Hola
Estas utilizando un mismo query para obtener la información pasándosela a una variable y luego sin cerrar el query lo limpias.
Ademas usas el termino from en el update, eso no va.
Me parece que deberías usar dos query asi:
Código Delphi [-]

Código Delphi [-]dm1.IBQuery1.SQL.clear;
dm1.IBQuery1.sql.Text := 'Select cod_producto,stk_actualk,stk_actuale from productos';
dm1.IBQuery1.Open;
actual := dm1.IBQuery1.Fields[1].Value;
// dm1.IBQuery1.SQL.Clear;
dm1.IBQuery2.sql.Text := 'Update productos set stk_actualk = :vara where cod_producto = :varb';
dm1.IBQuery2.ParamByName('vara').AsInteger := actual;
dm1.IBQuery2.ParamByName('varb').AsInteger := strtoint(dbedit2.text);
dm1.IBQuery2.ExecSQL;
Saludos

ilichhernandez 30-04-2008 20:48:40

No me da error pero tampoco me actualiza......ejecuto la aplicacion y aparentemente termina bien, pero cuando voy a revisar la BD, no ha actualizado el registro.....alguna ocurrencia o metodo distinto para conseguir esto..... lo agradeceria.......saludos

Código Delphi [-]

dm1.IBQuery1.sql.Text := 'Select cod_producto,stk_actualk,stk_actuale from productos';
dm1.IBQuery1.Open;
actual := dm1.IBQuery1.Fields[1].Value;

dm1.IBQuery2.sql.Text := 'Update productos set stk_actualk = :vara where cod_producto = :varb';
dm1.IBQuery2.ParamByName('vara').AsInteger := actual + strtoint(dbedit3.text);
dm1.IBQuery2.ParamByName('varb').AsInteger := strtoint(dbedit2.text);
dm1.IBQuery2.ExecSQL;

BlueSteel 30-04-2008 20:52:37

Hola

Mira, yo utilizo el codigo que sigue para poder actualizar en 1 un contador de un Sistema.... pero en este caso se cuanto es lo que quiero sumar
Código Delphi [-]
     IBQ_Select.SQL.Clear;
     IBQ_Select.SQL.Add('Update "Parametros" Set "Par_Orden"="Par_Orden"+1');
     IBQ_Select.ExecSQL;
     IBT_Select.Commit;

Salu2:p:D

ilichhernandez 02-05-2008 21:35:32

Muchas gracias a todos por su tiempo, ha sido de mucha ayuda. Gracias.

Gbyte 23-07-2008 23:56:44

update con Interbase
 
Hola Caral!
He probado el código que muestras y funciona muy bien!.Yo en vez de sumar un número quiero aplicar un porcentaje. El único incoveniente es que toma el primer registro aplica el porentaje y lo répite en toda la fila de la grilla. Me gustaria que le aplique a cada precio el porcentaje y que muestre el resultado correspondiente. Te muestro el código haber que modificación tendría que hacer. Desde ya gracias.

mercaderia.IBDSmercaderia.Close;
mercaderia.IBDSmercaderia.SelectSQL.Clear;
mercaderia.IBDSmercaderia.SelectSQL.Text:='select * from mercaderia order by mercaderia.cod_merc asc';
mercaderia.IBDSmercaderia.Open;
num:=mercaderia.IBDSmercaderia.Fields[4].Value;
num1:=strtofloat(cambio.Text);
porcent:=(num*num1)/100;
num:=num+porcent;
mercaderia.IBDSmercaderia2.Close;
mercaderia.IBDSmercaderia2.SelectSQL.Clear;
mercaderia.IBDSmercaderia2.SelectSQL.Text:='update mercaderia set precio_venta=:vara';
mercaderia.IBDSmercaderia2.ParamByName('vara').AsFloat:=num;
mercaderia.IBDSmercaderia2.Open;



La franja horaria es GMT +2. Ahora son las 09:07:05.

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