Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

 
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-07-2007
pennylane pennylane is offline
Miembro
 
Registrado: feb 2007
Posts: 14
Poder: 0
pennylane Va por buen camino
Problema

Tengo un problema con este codigo:

Código Delphi [-]
     DataModule1.IBDataSet2.Active := False;
     DataModule1.IBDataSet2.SelectSQL.Clear;  //Borro SQL anteriores
     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;

//ShowMessage(IntToStr(DataModule1.IBDataSet2.Recordcount));

     DataModule1.IBDataSet2.First;
     while not DataModule1.IBDataSet2.Eof do
     begin
       //Comienzo a recuperar los valores
       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.IBTransaction1.Active:= False;  //ESTA LINEA ME DESACTIVA EL IBDATASET2
//       DataModule1.IBTransaction1.StartTransaction;

       DataModule1.IBSQL1.sql.clear; //Borro SQL anteriores
       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'); //Cargo la SQL

       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; //Mando la SQL
       except
          DataModule1.IBTransaction1.Rollback;
       raise;
       end;
//       DataModule1.IBTransaction1.Commit; //Ejecuto la SQL
       DataModule1.IBDataSet2.Next; //Siguiente jugador
     end;

       DataModule1.IBTransaction1.Active:= False;  
       DataModule1.IBTransaction1.StartTransaction;
       DataModule1.IBTransaction1.Commit; //Ejecuto la SQL

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;  //esta es la q cierra el IBDataSet2
       DataModule1.IBTransaction1.StartTransaction;
       DataModule1.IBTransaction1.Commit; //Ejecuto la SQL

Las caritas corresponden a : p pero me convierte al emoticono... sorry
Responder Con Cita
 



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro


La franja horaria es GMT +2. Ahora son las 19:49:43.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi