Tengo un problema con este codigo:
Código Delphi
[-]
DataModule1.IBDataSet2.Active := False;
DataModule1.IBDataSet2.SelectSQL.Clear; DataModule1.IBDataSet2.SelectSQL.Text := 'SELECT ID, Marcaje, Parada, Entrada, Remate, TiroLibre, Desmarque, Creatividad, Regate, Pase, Control FROM JUGADORES';
DataModule1.IBDataSet2.Prepare;
DataModule1.IBDataSet2.Active := True;
DataModule1.IBDataSet2.Open;
DataModule1.IBDataSet2.First;
while not DataModule1.IBDataSet2.Eof do
begin
ID := DataModule1.IBDataSet2.Fields[0].AsInteger;
MARCAJE := DataModule1.IBDataSet2.Fields[1].AsInteger;
PARADA := DataModule1.IBDataSet2.Fields[2].AsInteger;
ENTRADA := DataModule1.IBDataSet2.Fields[3].AsInteger;
REMATE := DataModule1.IBDataSet2.Fields[4].AsInteger;
DESMARQUE := DataModule1.IBDataSet2.Fields[5].AsInteger;
CREATIVIDAD := DataModule1.IBDataSet2.Fields[6].AsInteger;
REGATE := DataModule1.IBDataSet2.Fields[7].AsInteger;
PASE := DataModule1.IBDataSet2.Fields[8].AsInteger;
CONTROL := DataModule1.IBDataSet2.Fields[9].AsInteger;
DataModule1.IBSQL1.sql.clear; DataModule1.IBSQL1.SQL.add ('UPDATE JUGADORES');
DataModule1.IBSQL1.SQL.Add('SET PORTERO = PORTERO, ');
DataModule1.IBSQL1.SQL.Add('DEFENSA = DEFENSA, ');
DataModule1.IBSQL1.SQL.Add('MEDIO = MEDIO, ');
DataModule1.IBSQL1.SQL.Add('DELANTERO = DELANTERO ');
DataModule1.IBSQL1.SQL.Add('WHERE ID = ID');
DataModule1.IBSQL1.ParamByName('pPORTERO').AsFloat := CalculaPosicion('Portero', MARCAJE, PARADA, ENTRADA, REMATE, TIROLIBRE, DESMARQUE, CREATIVIDAD, REGATE, PASE, CONTROL);
DataModule1.IBSQL1.ParamByName('pDEFENSA').AsFloat := CalculaPosicion('Defensa', MARCAJE, PARADA, ENTRADA, REMATE, TIROLIBRE, DESMARQUE, CREATIVIDAD, REGATE, PASE, CONTROL);
DataModule1.IBSQL1.ParamByName('pMEDIO').AsFloat := CalculaPosicion('Medio', MARCAJE, PARADA, ENTRADA, REMATE, TIROLIBRE, DESMARQUE, CREATIVIDAD, REGATE, PASE, CONTROL);
DataModule1.IBSQL1.ParamByName('pDELANTERO').AsFloat := CalculaPosicion('Delantero', MARCAJE, PARADA, ENTRADA, REMATE, TIROLIBRE, DESMARQUE, CREATIVIDAD, REGATE, PASE, CONTROL);
DataModule1.IBSQL1.ParamByName('pID').AsInteger := ID;
try
DataModule1.IBSQL1.ExecQuery; except
DataModule1.IBTransaction1.Rollback;
raise;
end;
DataModule1.IBDataSet2.Next; end;
DataModule1.IBTransaction1.Active:= False;
DataModule1.IBTransaction1.StartTransaction;
DataModule1.IBTransaction1.Commit;
La historia es cambiar una serie de campos de una tabla. Para calcular los valores de estos campos necesito recuperar el resto de campos, y es el primer SELECT que hago. Despues con la funcion CalculaPosicion, calcula el nuevo campo y hace un UPDATE para guardarlo. Al final debera pasar al siguiente jugador de la tabla (NEXT)
1- Esta linea me devuelve siempre uno y deberia ser en mi caso 16
Código Delphi
[-]ShowMessage(IntToStr(DataModule1.IBDataSet2.Recordcount));
Es curioso pq la primera parte del codigo sola, aunque el recordcount devuelve 1, si q funciona bien el while (16 veces). Con todo el codigo, el while solo se ejecuta una vez.
2-Estas lineas me cerraban el IBDataSet2 y me daba un error asi q las ejecuto al final del todo. No hay problema con eso no ??
Código Delphi
[-] DataModule1.IBTransaction1.Active:= False; DataModule1.IBTransaction1.StartTransaction;
DataModule1.IBTransaction1.Commit;
Las caritas corresponden a : p pero me convierte al emoticono... sorry