PDA

Ver la Versión Completa : Problemas al intentar actualizar registro


ilichhernandez
30-04-2008, 19:40:10
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 [-] (http://www.clubdelphi.com/foros/#)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 [-]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



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

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
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;