Trocar Boolean por Char(1) no Firebird 2.5.2

24/04/2013

5

Pessoal, como todos sabem, Firebird não tem BOOLEAN, TRUE ou FALSE. Estou trocando numa unit TRUE ou FALSE pro S ou N e estou tendo dificuldades. O banco foi feito em INTERBASE 7.5 usando BOOLEAN e converti para FIREBIRD 2.5.2 usando CHAR(1).

Acho que nessa unit teria que trocar onde é TRUE, por S e FALSE por N

Esse trecho de código tem haver:
+ QuotedStr ('N');
.AsString := ‘N’; 


Segue unit:

unit untFrmPermissoesUsuarios;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ComCtrls, ExtCtrls, DBCtrls, StdCtrls, Buttons, DB;

type
  TFrmPermissoesUsuarios = class(TForm)
    Label1: TLabel;
    dbUsuarios: TDBLookupComboBox;
    Panel1: TPanel;
    Label2: TLabel;
    btnFechar: TBitBtn;
    cbConsultar: TCheckBox;
    cbIncluir: TCheckBox;
    cbExcluir: TCheckBox;
    cbAlterar: TCheckBox;
    btnSalvar: TBitBtn;
    dsLookupUsuarios: TDataSource;
    tvMenus: TTreeView;
    procedure btnFecharClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure FormClose(Sender: TObject; var Action: TCloseAction);
    procedure dbUsuariosKeyPress(Sender: TObject; var Key: Char);
    procedure dbUsuariosCloseUp(Sender: TObject);
    procedure btnSalvarClick(Sender: TObject);
    procedure tvMenusClick(Sender: TObject);
  private
    semDireitosTela : Boolean;
    procedure CarregarMenus;
    procedure LimparLista;
    procedure CarregarDireitosUsuarioMenu(const codUsuario, codMenu: Integer);
    procedure HabilitarOpcoes(const tof : Boolean);
    function retornaNoPai(codPai: Integer): TTreeNode;
    procedure verificarPermissaoMenuPai(const no: TTreeNode);
    { Private declarations }
  public
    { Public declarations }
  end;

var
  FrmPermissoesUsuarios: TFrmPermissoesUsuarios;

implementation

uses untDMPrincipal, untDMCadastros, SqlExpr;

{$R *.dfm}

procedure TFrmPermissoesUsuarios.btnFecharClick(Sender: TObject);
begin
  Close;
end;

function TFRmPermissoesUsuarios.retornaNoPai(codPai : Integer) : TTreeNode;
var
  i : Integer;
begin
  Result := nil;
  for i := 0 to Pred(tvMenus.Items.Count) do
    if Integer(tvMenus.Items[i].Data) = codPai then
    begin
      Result := tvMenus.Items[i];
      Exit;
    end;
end;

procedure TFrmPermissoesUsuarios.CarregarMenus;
var
  no : TTreeNode;
begin
  tvMenus.Items.Clear;
  with DMPrincipal.datasetAux do
  begin
    Close;
    CommandText := 'SELECT MEN_CODIGO, MEN_NOME, MEN_CODIGOPAI FROM MENUS ORDER BY MEN_CODIGO';
    Open;
    First;
    while not Eof do
    begin
      if FieldByName('MEN_CODIGOPAI').AsString = '' then
        tvMenus.Items.AddObject(nil, FieldByName('MEN_NOME').AsString, Pointer(FieldByName('MEN_CODIGO').AsInteger))
      else
      begin
        no := retornaNoPai(FieldByName('MEN_CODIGOPAI').AsInteger);
        if Assigned(no) then
          tvMenus.Items.AddChildObject(no, FieldByName('MEN_NOME').AsString, Pointer(FieldByName('MEN_CODIGO').AsInteger));
      end;
      Next;
    end;
  end;
end;

procedure TFrmPermissoesUsuarios.HabilitarOpcoes(const tof : Boolean);
begin
  cbConsultar.Checked := False;
  cbConsultar.Enabled := tof;
  cbIncluir.Checked := False;
  cbIncluir.Enabled := tof;
  cbAlterar.Checked := False;
  cbAlterar.Enabled := tof;
  cbExcluir.Checked := False;
  cbExcluir.Enabled := tof;
end;

procedure TFrmPermissoesUsuarios.FormCreate(Sender: TObject);
begin
  dsLookupUsuarios.DataSet.Open;
  btnSalvar.Enabled := False;
  HabilitarOpcoes(False);
  semDireitosTela := False;
end;

procedure TFrmPermissoesUsuarios.FormClose(Sender: TObject;
  var Action: TCloseAction);
begin
  dsLookupUsuarios.DataSet.Close;
end;

procedure TFrmPermissoesUsuarios.LimparLista;
begin
  tvMenus.Items.Clear;
end;

procedure TFrmPermissoesUsuarios.dbUsuariosKeyPress(Sender: TObject;
  var Key: Char);
begin
  if Key = #27 then
  begin
    dbUsuarios.KeyValue := -1;
    btnSalvar.Enabled := False;
    HabilitarOpcoes(False);
    LimparLista;
  end;
end;

procedure TFrmPermissoesUsuarios.dbUsuariosCloseUp(Sender: TObject);
begin
  if dbUsuarios.Text <> '' then
    CarregarMenus;
end;

procedure TFrmPermissoesUsuarios.CarregarDireitosUsuarioMenu(const codUsuario, codMenu : Integer);
begin
  with DMPrincipal.datasetAux do
  begin
    Close;
    CommandText := 'SELECT PU_NOVO, PU_ALTERAR, PU_APAGAR, PU_CONSULTAR ' +
                   '  FROM PERMISSOES_USUARIOS ' +
                   ' WHERE USU_CODIGO = ' + IntToStr(codUsuario) +
                   '   AND MEN_CODIGO = ' + IntToStr(codMenu);
    Open;
    if not IsEmpty then
    begin
      semDireitosTela := False;
      cbConsultar.Checked := FieldByName('PU_CONSULTAR').AsBoolean;
      cbIncluir.Checked := FieldByName('PU_NOVO').AsBoolean;
      cbAlterar.Checked := FieldByName('PU_ALTERAR').AsBoolean;
      cbExcluir.Checked := FieldByName('PU_APAGAR').AsBoolean;
    end
    else
    begin
      semDireitosTela := True;
      cbConsultar.Checked := False;
      cbIncluir.Checked := False;
      cbAlterar.Checked := False;
      cbExcluir.Checked := False;
    end;
  end;
end;

procedure TFrmPermissoesUsuarios.verificarPermissaoMenuPai(const no : TTreeNode);
begin
  with DMPrincipal.datasetAux do
  begin
    Close;
    CommandText := 'SELECT PU_CONSULTAR FROM PERMISSOES_USUARIOS WHERE USU_CODIGO = ' +
                   IntToStr(dbUsuarios.KeyValue) + ' AND MEN_CODIGO = ' + IntToStr(Integer(no.Data));
    Open;
    if IsEmpty then
    begin
      Close;
      CommandText := 'INSERT INTO PERMISSOES_USUARIOS (USU_CODIGO, MEN_CODIGO, PU_CONSULTAR) ' +
                     'VALUES (' + IntToStr(dbUsuarios.KeyValue) + ', ' + IntToStr(Integer(no.Data)) + ', ' +
                     BoolToStr(cbConsultar.Checked, True) + ')';
      ExecSQL(True);
    end
    else
    if not Fields[0].AsBoolean then
    begin
      Close;
      CommandText := 'UPDATE PERMISSOES_USUARIOS SET PU_CONSULTAR = True ' +
                     ' WHERE USU_CODIGO = ' + IntToStr(dbUsuarios.KeyValue) +
                     '   AND MEN_CODIGO = ' + IntToStr(Integer(no.Data));
      ExecSQL(True);
    end;
  end;
  if Assigned(no.Parent) then
    verificarPermissaoMenuPai(no.Parent);
end;

procedure TFrmPermissoesUsuarios.btnSalvarClick(Sender: TObject);
begin
  if not (cbConsultar.Checked) and ((cbIncluir.Checked) or (cbAlterar.Checked) or (cbExcluir.Checked)) then
    cbConsultar.Checked := True;
  with DMPrincipal.datasetAux do
  begin
    Close;
    if semDireitosTela then
      CommandText := 'INSERT INTO PERMISSOES_USUARIOS (USU_CODIGO, MEN_CODIGO, PU_NOVO, PU_ALTERAR, PU_APAGAR, PU_CONSULTAR) ' +
                     'VALUES (' + IntToStr(dbUsuarios.KeyValue) + ', ' + IntToStr(Integer(tvMenus.Selected.Data)) + ', ' +
                     BoolToStr(cbIncluir.Checked, True) + ', ' + BoolToStr(cbAlterar.Checked, True) + ', ' +
                     BoolToStr(cbExcluir.Checked, True) + ', ' + BoolToStr(cbConsultar.Checked, True) + ')'
    else
      CommandText := 'UPDATE PERMISSOES_USUARIOS SET ' +
                     'PU_NOVO = ' + BoolToStr(cbIncluir.Checked, True) + ', ' +
                     'PU_ALTERAR = ' + BoolToStr(cbAlterar.Checked, True) + ', ' +
                     'PU_APAGAR = ' + BoolToStr(cbExcluir.Checked, True) + ', ' +
                     'PU_CONSULTAR = ' + BoolToStr(cbConsultar.Checked, True) +
                     ' WHERE USU_CODIGO = ' + IntToStr(dbUsuarios.KeyValue) +
                     '   AND MEN_CODIGO = ' + IntToStr(Integer(tvMenus.Selected.Data));
    ExecSQL(True);
    if (Assigned(tvMenus.Selected.Parent)) and (cbConsultar.Checked) then
      verificarPermissaoMenuPai(tvMenus.Selected.Parent);
  end;
end;

procedure TFrmPermissoesUsuarios.tvMenusClick(Sender: TObject);
begin
  if Assigned(tvMenus.Selected) then
  begin
    HabilitarOpcoes(True);
    CarregarDireitosUsuarioMenu(dbUsuarios.KeyValue, Integer(tvMenus.Selected.Data));
    btnSalvar.Enabled := True;
  end;
end;
Responder

Posts

24/04/2013

Wilton Júnior

Responder

24/04/2013

Joel Rodrigues

Um exemplo:
cbConsultar.Checked := FieldByName('PU_CONSULTAR').AsString = 'S';
Responder
Ok, e nesse caso:


BoolToStr(cbExcluir.Checked, True)
Responder
Joel, pelo que me lembro acho que já fiz essa alteração e deu erro.
Responder

24/04/2013

Wilton Júnior

tem algo erra na função BoolToStr(cbIncluir.Checked, True)
Responder
Me ajuda, por favor, to doido, já, rs. Não sei mais o que fazer.
Responder
Ficaria assim:

cbConsultar.Checked := FieldByName('PU_CONSULTAR').AsString = 'S';
cbIncluir.Checked := FieldByName('PU_NOVO').AsString = 'S';
cbAlterar.Checked := FieldByName('PU_ALTERAR').AsString = 'S';
cbExcluir.Checked := FieldByName('PU_APAGAR').AsString = 'S';


E aqui?

  semDireitosTela := True;
  cbConsultar.Checked := False;
  cbIncluir.Checked := False;
  cbAlterar.Checked := False;
  cbExcluir.Checked := False;
Responder

24/04/2013

Joel Rodrigues

Oxi, velho... aqui tu tá passando valores fixos. Quer mudar o que?

semDireitosTela := True;
cbConsultar.Checked := False;
cbIncluir.Checked := False;
cbAlterar.Checked := False;
cbExcluir.Checked := False;
Responder
Joel, vc tem skype? Quer que mande o projeto pra vc dar uma olhada? O banco era Interbase 7.5 usando boolean e mudei para Firebird com Char(1). A unit ta postada logo acima, não to conseguindo mudar.
Responder

24/04/2013

Joel Rodrigues

Não, cara. Faz uns 500 anos que eu nem vejo o Firebird. Você não tá conseguindo alterar o que?
Vamos por parte. Vá alterando e vendo quais erros ocorrem.
Responder
Tem email ou skype? Eu estou trocando boolean por char(1). No código está true ou false, pq é lógico.
Responder

24/04/2013

Joel Rodrigues

Certo, vamos por parte: QUAL FOI O ERRO QUE DEU? EM QUE PONTO DEU O ERRO?
Responder
Ta dando erro no código botão salvar:

Column unknow FALSE

Da esse erro qdo clica no botão salvar. Código do botão é esse:

procedure TFrmPermissoesUsuarios.btnSalvarClick(Sender: TObject);
begin
  if not (cbConsultar.Checked) and ((cbIncluir.Checked) or (cbAlterar.Checked) or (cbExcluir.Checked)) then
    cbConsultar.Checked := True;
  with DMPrincipal.datasetAux do
  begin
    Close;
    if semDireitosTela then
      CommandText := 'INSERT INTO PERMISSOES_USUARIOS (USU_CODIGO, MEN_CODIGO, PU_NOVO, PU_ALTERAR, PU_APAGAR, PU_CONSULTAR) ' +
                     'VALUES (' + IntToStr(dbUsuarios.KeyValue) + ', ' + IntToStr(Integer(tvMenus.Selected.Data)) + ', ' +
                     BoolToStr(cbIncluir.Checked, True) + ', ' + BoolToStr(cbAlterar.Checked, True) + ', ' +
                     BoolToStr(cbExcluir.Checked, True) + ', ' + BoolToStr(cbConsultar.Checked, True) + ')'
    else
      CommandText := 'UPDATE PERMISSOES_USUARIOS SET ' +
                     'PU_NOVO = ' + BoolToStr(cbIncluir.Checked, True) + ', ' +
                     'PU_ALTERAR = ' + BoolToStr(cbAlterar.Checked, True) + ', ' +
                     'PU_APAGAR = ' + BoolToStr(cbExcluir.Checked, True) + ', ' +
                     'PU_CONSULTAR = ' + BoolToStr(cbConsultar.Checked, True) +
                     ' WHERE USU_CODIGO = ' + IntToStr(dbUsuarios.KeyValue) +
                     '   AND MEN_CODIGO = ' + IntToStr(Integer(tvMenus.Selected.Data));
    ExecSQL(True);
    if (Assigned(tvMenus.Selected.Parent)) and (cbConsultar.Checked) then
      verificarPermissaoMenuPai(tvMenus.Selected.Parent);
  end;
end;
Responder

24/04/2013

Joel Rodrigues

Coloque QuotedStr no BoolToStr, por exemplo:
QuotedStr(BoolToStr(cbIncluir.Checked, True))

Faça isso em todos os campos onde você está usando BoolToStr.
Responder
ok, vou fazer isso.
Responder