FireDAC
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...
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
Curtidas 0
Respostas
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.
Att,
Marcos
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