PDA

Ver la Versión Completa : Error recorriendo dbgrid


Petolansa
31-10-2007, 02:19:39
Buenas gente, estoy recorriendo un dbgrid de factura detalle, y quiero descontar el stock mediante un query.

procedure TFrmfactura.BitBtn1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to dbgrid1.FieldCount -1 do
begin
query1.SQL.Text:='Update stock set stkact=stkact-'+dbgrid1.Fields[0,i]+'Where'+
'procod='+QuotedStr(dbgrid1.Fields[1,i]);
query1.ExecSQL;
end;
end;


Me da el siguiente errortoo many actual params, me podrian decir a que se debe, desde ya muchas gracias

HenryAraniva
31-10-2007, 02:58:05
me parece que quieres realizar una resta dentro de la sentencia sql. si stkact es el campo que vas a actualizar con el valor de "stkact-dbgrid1.fields[0,i]" debes hacerlo antes y colocarlo en una variable para luego dentro de la sentencia sql poner :
'Update stock set stkact='+nuevavariable+'Where procod='+QuotedStr(dbgrid1.Fields[1,i]);

Petolansa
31-10-2007, 04:02:33
Henry, vos sabes que probe, haciendo lo que me dijiste y me da error siempre en en el mismo lugar, en la variable i que uso en el indice de os campos del dbgrid.
Me dice too many actual parameters, gracias igual por la pronta respuesta.


procedure TFrmfactura.BitBtn1Click(Sender: TObject);
var i:integer;
begin
for i:=1 to dbgrid1.FieldCount -1 do
begin
query1.SQL.Text:='Update stock set stkact=stkact-'+dbgrid1.Fields[0,i]+'Where'+
'procod='+QuotedStr(dbgrid1.Fields[1,i]);
query1.ExecSQL;
end;
end;


Disculpen hago muchas preguntas en tan poco tiempo, es que es una tesis de la facultad, y realmente el profesor que me dio delphi no ayudo mucho enseñandome para poder realizarla, entonces me la debo rebuscar solo, y aprender todo a fuerza de voluntad mia y si no fuera por el club, realmente esto me costaria muchisimo mas.


Agradezco su ayuda

Neftali [Germán.Estévez]
31-10-2007, 10:12:44
En lugar de acceder a las celdas del DBGrid, es mejor que accedas a los campos del DataSet asociado. Puedes utilizar FieldByName.


DBGrid.DataSource.DataSet.FieldByname('Importe').AsInteger;