Fred-2011 0 Denunciar post Postado Setembro 13, 2011 Bom dia, exemplo cadastro o usuario e neste cadastro tem um campo da tabela que é um campo logico(sim/não )certo.....Ai quando a pessoa loga e este campo estiver TICADO(true) ele libera o menu e se estiver apagado(false )ele não libera. Quero fazer um MainMenu dinâmico. Gravando os itens no banco e escolher o que o usuário tem ou não acesso. Achei esse trecho de código, mas não entendi direito o que faz. É de um post aqui mesmo, do Hugo procedure TForm1.Button1Click(Sender: TObject); Var i,j,w : Integer; begin //Grava na tabela de Permissão os itens do menu... For i := 0 to MainMenu1.Items.Count - 1 do Begin TblPermissaoCampo.Value := (MainMenu1.Items[i].Caption); For j := 0 to MainMenu1.Items[i].Count - 1 do Begin TblPermissaoCampo.Value := (MainMenu1.Items[i].Items[j].Caption); For w := 0 to MainMenu1.Items[i].Items[j].Count - 1 do Begin TblPermissaoCampo.Value := (MainMenu1.Items[i].Items[j].Items[w].Caption); End; End; End; end; Compartilhar este post Link para o post Compartilhar em outros sites
Fabriciocbj 0 Denunciar post Postado Setembro 13, 2011 Boa tarde Fred, Estou usando o componente dbexpress. Na verdade nesses trechos de código ele teve a ideia de inserir no DB todos os menus e sub menus, do sistema. Mas para você verificar se o funcionário tem ou não permissão você pode criar uma precedure simples, Procedure Carrega_Menu(Menu: TdxBarManager); var i : integer; begin For i:=0 to Menu.ItemCount -1 do begin query.Close; query.SQL.Clear; query.SQL.Add('SELECT MENUS.* FROM MENUS'); query.SQL.Add('INNER JOIN FUNCIONARIOS_MENU ON (FUNCIONARIOS_MENU.TAG = MENUS.TAG)'); query.SQL.Add('WHERE MENUS.TAG = '+IntToStr(Menu.Items[i].Tag)); query.Open; Conforme for encontrando os menus referente aquele funcionario você vai tratar ele para habilitar assim. if query.recordcount > 0 then begin If query.Locate('TAG',Menu.Items[i].Tag,[]) then begin Menu.Items[i].Visible := ivAlways; Menu.Items[i].Enabled := q.FieldByName('HABIL').AsString = 'S'; Menu.Items[i].Caption := q.FieldByName('DESCR').AsString; end else begin Menu.Items[i].Visible := ivNever; end; end; end; Espero ter ajudado. Compartilhar este post Link para o post Compartilhar em outros sites
Fred-2011 0 Denunciar post Postado Setembro 13, 2011 Como posso montar a tabela para isso, uso access. Teria como me ajudar a montar? Não entendi direito esse código. É um pouco complicado isso, não é? To querendo saber como faz desde a montagem da tabela pra entender. Meu email é: frederico.brigatte@itelefonica.com.br, caso tenha algum exemplo simples que possa mandar pra ajudar. Agradeço por hora. Fred Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Setembro 14, 2011 De acordo com o código do fabricio, ele tem uma tabela que armazena a descrição do menu e a situacao dele para o usuário, então, a tabela deve ser mais ou menos assim: Tabela Menu TAG int not null; HABIL Varchar(1) not null default 'S' DESCR varchar(20) not null; e uma outra tabela que armazena o valor do campo TAG listado acima e relaciona com funcionario: tabela FUNCIONARIOS_MENU TAG int not Null -- Outros campos Ao realizar a consulta, faz a verificação se TAG para aquele funcionário está com o camp HABIL marcado como S, se estiver, marca o ítem do menu como Visible = True, se não, marca como False; Compartilhar este post Link para o post Compartilhar em outros sites
Fred-2011 0 Denunciar post Postado Setembro 14, 2011 De acordo com o código do fabricio, ele tem uma tabela que armazena a descrição do menu e a situacao dele para o usuário, então, a tabela deve ser mais ou menos assim: Tabela Menu TAG int not null; HABIL Varchar(1) not null default 'S' DESCR varchar(20) not null; e uma outra tabela que armazena o valor do campo TAG listado acima e relaciona com funcionario: tabela FUNCIONARIOS_MENU TAG int not Null -- Outros campos Ao realizar a consulta, faz a verificação se TAG para aquele funcionário está com o camp HABIL marcado como S, se estiver, marca o ítem do menu como Visible = True, se não, marca como False; No código do Fabrício, onde está a rotina que grava na tabela a descrição do menu? Como posso montar o banco simples, por exemplo: Usuarios, Menu, .. para utilizar esse exemplo? Uso access. To meio perdido nessa parte. Pode me ajudar a montar esse banco? Compartilhar este post Link para o post Compartilhar em outros sites
bdexterholland 0 Denunciar post Postado Setembro 21, 2011 A gravação não foi postada, apenas a busca para fazer a verificão. Imagine que você terá que criar uma janela que, com um usuário selecionado (seja nesta janela ou em uma janela anterior) você terá uma lista com todos os menus e para cada um deles você terá que marcar se está habilitado ou não, isto pode ser feito com checkbox, com combobox ou dentro de um stringGrid mesmo. Ao gravar os dados, você irá criar um loop para gravar a situação de cada ítem. Este loop irá montar sua query que irá gravar no banco de dados a situação de cada ítem, portanto: //O real funcionamento deste loop irá depender do que você for escolher para criar a interface. for I:= 1 to {último ítem} do begin if {ItemPermito} then Permitido := 'S' //Variável de exemplo else Permitodo := 'N'; adoQuery.Sql.clear; adoQuery.SQl.add('Insert into Menu (tag, habil) Values (' + QuotedStr(IntToStr(Funcionario)) + ', ' + QuotedStr(Permitido) + ')'); adoQuery.ExecSql; end; Compartilhar este post Link para o post Compartilhar em outros sites
Fred-2011 0 Denunciar post Postado Setembro 21, 2011 A gravação não foi postada, apenas a busca para fazer a verificão. Imagine que você terá que criar uma janela que, com um usuário selecionado (seja nesta janela ou em uma janela anterior) você terá uma lista com todos os menus e para cada um deles você terá que marcar se está habilitado ou não, isto pode ser feito com checkbox, com combobox ou dentro de um stringGrid mesmo. Ao gravar os dados, você irá criar um loop para gravar a situação de cada ítem. Este loop irá montar sua query que irá gravar no banco de dados a situação de cada ítem, portanto: //O real funcionamento deste loop irá depender do que você for escolher para criar a interface. for I:= 1 to {último ítem} do begin if {ItemPermito} then Permitido := 'S' //Variável de exemplo else Permitodo := 'N'; adoQuery.Sql.clear; adoQuery.SQl.add('Insert into Menu (tag, habil) Values (' + QuotedStr(IntToStr(Funcionario)) + ', ' + QuotedStr(Permitido) + ')'); adoQuery.ExecSql; end; Como faço para gravar na tabela os menus? E como depois de gravar, montar o treeview? Compartilhar este post Link para o post Compartilhar em outros sites
abobre 0 Denunciar post Postado Setembro 22, 2011 Bom dia, acredito que o que você precisa é um controle de acesso ao seu programa ? Tipo user 1 usar N funcções do programa e user 2 esta restrito e assim vai. Caso seja, você pode usar o usercontrol, ele vai atender a suas necessidades. http://www.google.com.br/search?num=100&hl=pt-BR&newwindow=1&client=firefox-a&hs=ana&sa=X&ei=Aql6TuORI8ugtwe4p7nvDw&ved=0CBcQBSgA&q=user+control+delphi&spell=1&biw=1024&bih=570 Obs: Mas acho que não funciona no access ! Compartilhar este post Link para o post Compartilhar em outros sites
Fred-2011 0 Denunciar post Postado Setembro 22, 2011 Gostaria de fazer isso na mão para ter conhecimento do componente. Preciso montar um treeview com dados de um banco. Dados da tabela: Menu_Codigo Menu_Caption Compartilhar este post Link para o post Compartilhar em outros sites