Ir para conteúdo
Fórum Script Brasil
  • 0

componente TreeView


Livio Neiva

Pergunta

ola a todos

eu criei um formulário para meu sistema no qual vai controlar o nível de acesso para determinados funcionários.

Num formulário eu inseri um componente TreeView(que estão os itens q servirão para definir o nível de acesso) dois componentes DBGrid um para tabela de funcionários e o outro DBGrid para tabela de nível de acesso q tem três campos, Modulo, Codfuncionario e CodModulo.

Inseri dois botões chamados de Atribui e remove

no botão atribui eu fiz o seguinte procedimento;

procedure TF_NivelAcesso.BtnAtribuiClick(Sender: TObject);

begin

F_Dados.Q_NivelAcesso.Append;

F_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString := Treeview1.Selected.Text;

F_Dados.Q_NivelAcesso.FieldByName('CODFUNC').AsString := F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString;

F_Dados.Q_NivelAcesso.FieldByName('CODMODULO').AsString := Copy(TreeView1.Selected.Text,1,2);

F_Dados.Q_NivelAcesso.Post;

end;

preciso de um procedimento q não permita que o usuário atribua dois Subitens iguais para mesmo funcionário, e que quando o usuário tentar adicionar um item, que seja atribuído todos os subitens daquele item ou então q informe não pode ser atribuído itens, só subitens.

obrigado a todos e espero eu tenha explicado direitinho

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0

já que você está postando os registro isso quer dizer que os mesmos já podem ser consultados no banco então supondo que você esteja usando os componentes ado.

procedure TF_NivelAcesso.BtnAtribuiClick(Sender: TObject);
var qtmp_:tAdoQuery;
begin
   qtmp_ := TADOQuery.create(self);
   qtmp_.Connection := F_Dados.Sua_conn; {tem que definir a conexao com o banco ou defina a connectionString}
   with qtmp_,SQL do begin
      Text := 'select * from sua_tabela where (modulo = '+Treeview1.Selected.Text+') and (codfunc = '+F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString+')';
      Open;
      if RecordCount > 0 then begin
        Showmessage('já existe um ...');
        Exit; //sai do bloco e não adiciona um novo
      end;
   end;//com isso você faz uma consulta antes de adicionar outro item
   qtmp_.free; //libera a query da memoria.
   F_Dados.Q_NivelAcesso.Append;
   F_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString := Treeview1.Selected.Text;
   F_Dados.Q_NivelAcesso.FieldByName('CODFUNC').AsString := F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString;
   F_Dados.Q_NivelAcesso.FieldByName('CODMODULO').AsString := Copy(TreeView1.Selected.Text,1,2);
   F_Dados.Q_NivelAcesso.Post;
end;

Link para o comentário
Compartilhar em outros sites

  • 0

CErto grande amigo!!!!

so que eu não estou usando o componente ADO, estou usando componente Zeos(Zeos Access)

TZConnection = faz a coneção com banco de dados

TzQuery = representa a tabela NivelAcesso

TZReadOnlyQuery = Representa a tabela de funcionarios

e não conseguir fazer com os componentes Zeos!!! Me ajuda ai vai, me explica como seria com os componente zeos

da para você mandar o procedimento baseado no que eu acabei de exlicar

falou amigão velu pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0
já que você está postando os registro isso quer dizer que os mesmos já podem ser consultados no banco então supondo que você esteja usando os componentes ado.

procedure TF_NivelAcesso.BtnAtribuiClick(Sender: TObject);
var qtmp_:tAdoQuery;
begin
   qtmp_ := TADOQuery.create(self);
   qtmp_.Connection := F_Dados.Sua_conn; {tem que definir a conexao com o banco ou defina a connectionString}
   with qtmp_,SQL do begin
      Text := 'select * from sua_tabela where (modulo = '+Treeview1.Selected.Text+') and (codfunc = '+F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString+')';
      Open;
      if RecordCount > 0 then begin
        Showmessage('já existe um ...');
        Exit; //sai do bloco e não adiciona um novo
      end;
   end;//com isso você faz uma consulta antes de adicionar outro item
   qtmp_.free; //libera a query da memoria.
   F_Dados.Q_NivelAcesso.Append;
   F_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString := Treeview1.Selected.Text;
   F_Dados.Q_NivelAcesso.FieldByName('CODFUNC').AsString := F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString;
   F_Dados.Q_NivelAcesso.FieldByName('CODMODULO').AsString := Copy(TreeView1.Selected.Text,1,2);
   F_Dados.Q_NivelAcesso.Post;
end;

CErto grande amigo!!!!

so que eu não estou usando o componente ADO, estou usando componente Zeos(Zeos Access)

TZConnection = faz a coneção com banco de dados

TzQuery = representa a tabela NivelAcesso

TZReadOnlyQuery = Representa a tabela de funcionarios

e não conseguir fazer com os componentes Zeos!!! Me ajuda ai vai, me explica como seria com os componente zeos

da para você mandar o procedimento baseado no que eu acabei de exlicar

falou amigão velu pela ajuda

Link para o comentário
Compartilhar em outros sites

  • 0

Livio Neiva, independente do componente que você esteja usando, o conceito será exatamente o mesmo: faz uma consulta para saber se existe ou não o registro na sua tabela de controle. (conforme o colega Eder Moraes sugeriu)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
já que você está postando os registro isso quer dizer que os mesmos já podem ser consultados no banco então supondo que você esteja usando os componentes ado.

procedure TF_NivelAcesso.BtnAtribuiClick(Sender: TObject);
var qtmp_:tAdoQuery;
begin
   qtmp_ := TADOQuery.create(self);
   qtmp_.Connection := F_Dados.Sua_conn; {tem que definir a conexao com o banco ou defina a connectionString}
   with qtmp_,SQL do begin
      Text := 'select * from sua_tabela where (modulo = '+Treeview1.Selected.Text+') and (codfunc = '+F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString+')';
      Open;
      if RecordCount > 0 then begin
        Showmessage('já existe um ...');
        Exit; //sai do bloco e não adiciona um novo
      end;
   end;//com isso você faz uma consulta antes de adicionar outro item
   qtmp_.free; //libera a query da memoria.
   F_Dados.Q_NivelAcesso.Append;
   F_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString := Treeview1.Selected.Text;
   F_Dados.Q_NivelAcesso.FieldByName('CODFUNC').AsString := F_Dados.Q_Funcionario.FieldByName('CODIGO').AsString;
   F_Dados.Q_NivelAcesso.FieldByName('CODMODULO').AsString := Copy(TreeView1.Selected.Text,1,2);
   F_Dados.Q_NivelAcesso.Post;
end;

CErto grande amigo!!!!

so que eu não estou usando o componente ADO, estou usando componente Zeos(Zeos Access)

TZConnection = faz a coneção com banco de dados

TzQuery = representa a tabela NivelAcesso

TZReadOnlyQuery = Representa a tabela de funcionarios

e não conseguir fazer com os componentes Zeos!!! Me ajuda ai vai, me explica como seria com os componente zeos

da para você mandar o procedimento baseado no que eu acabei de exlicar

falou amigão velu pela ajuda

Ola!!

Fiz o da forma como você fez no exemplo acima;

Essas são as minhas conexões;

ZConnection é ZAplicon = Faz a conexão banco de dados

ZQuery é Q_NivelAcesso = faz a coneção com a Tabela nível de acesso

ZQuery é Q_ConsFunc = Faz a conexão com tabela funcionários

Fiz formulário como você mostrou acima e apresentou seqüentes erros;

//essa linha comando que deu erro

qtmp_.Connection := F_Dados.Z_ApliCom;

//Essa é a menssagem de erro

[Error] U_NivelAcesso.pas(53): Incompatible types: 'TADOConnection' and 'TZConnection'

procedure TF_NivelAcesso.BtnAtribuiClick(Sender: TObject);

var

qtmp_:tAdoQuery;

begin

qtmp_ := TADOQuery.create(self);

qtmp_.Connection := F_Dados.Z_ApliCom;

with qtmp_.SQL do begin

Text := 'select * from Q_NivelAcesso where (modulo = '+Treeview1.Selected.Text+') and (codfunc = '+F_Dados.Q_ConsFunc.FieldByName('CODIGO').AsString+')';

Open;

if RecordCount > 0 then begin

Showmessage('já existe um ...');

Exit; //sai do bloco e não adiciona um novo

end;

end;//com isso você faz uma consulta antes de adicionar outro item

qtmp_.free; //libera a query da memoria.

F_Dados.Q_NivelAcesso.Append;

F_Dados.Q_NivelAcesso.FieldByName('MODULO').AsString := Treeview1.Selected.Text;

F_Dados.Q_NivelAcesso.FieldByName('CODFUNC').AsString := F_Dados.Q_ConsFunc.FieldByName('CODIGO').AsString;

F_Dados.Q_NivelAcesso.FieldByName('CODMODULO').AsString := Copy(TreeView1.Selected.Text,1,2);

F_Dados.Q_NivelAcesso.Post;

end;

Agora q estou mostrando os nomes das conexão(Zeos) , por favor pode mandar o código fonte com os nomes das conexão

Valeu obrigado a todos

Livio Neiva, independente do componente que você esteja usando, o conceito será exatamente o mesmo: faz uma consulta para saber se existe ou não o registro na sua tabela de controle. (conforme o colega Eder Moraes sugeriu)

Abraços

Existe sim o componente, so que ta dando um erro

veja a nova menssagem que eu postei, e tente me ajudar

valeu obrigado!!!

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...