FireDAC

Delphi

17/09/2013

Prezado colegas, bom dia...

Estou com o seguinte problema...

Declare na Uses
uADGUIxFormsWait,uADCompClient,uADPhysMSSQL;

Function TSeguranca.LoadProfile : Boolean;
Var
AD: TADConnection;
ADQry: TADQuery
I: Integer;
Nm, Pr : String;
begin
AD:=TADConnection.Create(nil);
AD.Params.Clear;
AD.LoginPrompt:=False;
AD.DriverName:='MSSQL';
AD.Params.Add('Database=seubanco');
AD.Params.Add('User_Name=sa');
AD.Params.Add('Password=suasenha');
AD.Params.Add('Server=NOME\SQLEXPRESS');
AD.Params.Add('DriverID=MSSQL');
AD.Open();
ADQry:=TADQuery.Create(nil);
ADQry.Connection:=AD;
ADQry.SQL.Text:='SELECT NAME, PERMISSAO FROM PERFIL_CONF WHERE PERFILID='+IntToStr(FPerfilID);
ADQry.Open;
While not ADQry.Eof do
begin
Nm:=ADQry.FieldByName('NAME').AsString;
Pr:= ADQry.FieldByName('PERMISSAO').AsString;
ADQry.Next;
for I := 0 to Pred(FAcoes.ActionCount) do
begin
If TAction(FAcoes.Actions[i].Name = Nm then
begin
TAction(FAcoes.Actions[i].Enable :=V = Pr;
break;
end;
end;
end;
Result:=True;
end;

O problema que esta entrando em Loop infinito...

Estrutura do código Original:

function TUsuario.LoadProfile: Boolean;
var
DBCon: TDBXConnection;
Command: TDBXCommand;
Reader: TDBXReader;
I: Integer;
Nm, Pr : String;
begin
DBCon := TDBXConnectionFactory.GetConnectionFactory.GetConnection('DBVENDAS','SYSDBA','masterkey');
Command := DBCon.CreateCommand;
Command.Text := 'SELECT NAME, PREMISSAO FROM PERFIL_CONF WHERE PERFILID = '+IntToStr(FPerfilID);
Reader := Command.ExecuteQuery;

while Reader.Next do
begin
Nm := Reader.Value[0].GetAnsiString;
Pr := Reader.Value[1].GetAnsiString;
for I := 0 to Pred(FAcoes.ActionCount) do
begin
if TAction(FAcoes.Actions[I]).Name = Nm then
begin
TAction(FAcoes.Actions[I]).Enabled := 'V' = Pr;
break;
end;
end;
end;
Result := True;
end;

Alguém tem alguma sugestão?

Desde já agradeço...

Att. Fabio Roell...

Fábio Roell

Fábio Roell

Curtidas 0

Respostas

Marcos Oliveira

Marcos Oliveira

17/09/2013

Fábio, primeiramente, duas ressalvas: Ao inserir um código, inseria entre as Tags "Code" pra facilitar nossa. E, não sei se você programa sem indentar o fonte, mas procure deixar uma indentação correta pra evitar até mesmo que você se perca no fonte.
Fiz uma alteração no seu código. Troquei o Next de lugar. Veja se vai funcionar.

Function TSeguranca.LoadProfile : Boolean;
Var
   AD: TADConnection;
   ADQry: TADQuery
   I: Integer;
   Nm, Pr : String;
begin
     AD:=TADConnection.Create(nil);
     AD.Params.Clear;
     AD.LoginPrompt:=False;
     AD.DriverName:='MSSQL';
     AD.Params.Add('Database=seubanco');
     AD.Params.Add('User_Name=sa');
     AD.Params.Add('Password=suasenha');
     AD.Params.Add('Server=NOME\SQLEXPRESS');
     AD.Params.Add('DriverID=MSSQL');
     AD.Open();
     ADQry:=TADQuery.Create(nil);
     ADQry.Connection:=AD;
     ADQry.SQL.Text:='SELECT NAME, PERMISSAO FROM PERFIL_CONF WHERE PERFILID='+IntToStr(FPerfilID);
     ADQry.Open;
     While not ADQry.Eof do
     begin
          Nm:=ADQry.FieldByName('NAME').AsString;
          Pr:= ADQry.FieldByName('PERMISSAO').AsString;
          // Tirei o Next daqui.
          // ADQry.Next;

          for I := 0 to Pred(FAcoes.ActionCount) do
          begin
               If TAction(FAcoes.Actions[i].Name = Nm then
               begin
                    TAction(FAcoes.Actions[i].Enable :=V = Pr;
                    break;
               end;
          end;

          // Coloquei o next aqui.
          ADQry.Next;
     end;
     Result:=True;
end;


Att,

Marcos
GOSTEI 0
POSTAR