Gravar em tabela itens do Menu

Delphi

30/03/2013

Boa tarde, gostaria de saber como gravar em tabela os itens do MainMenu com Sub-Menus
Frederico Brigatte***

Frederico Brigatte***

Curtidas 0

Respostas

Daniel Santos

Daniel Santos

30/03/2013

Faz um for no MainMenu1.Items.Count e boa sorte!
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

Você já possui a estrutura de suas tabelas no banco de dados? Caso positivo post aqui para podemos lhe ajudar.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Tenho sim. Tenho a tabela chamada Menu com a seguinte estrutura:

Codigo
Nome

Teria alguma sugestão? É a primeira vez que faço isso, por isso, me avisem se estiver faltando algo. Podem dar sugestões para alteração que faço.

Obrigado.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Acho que poderia ter mais um campo na tabela Menu:

Codigo - integer
Nome - varchar(30)
CodPai - integer
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

O código seria um campo autoincremento?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

O que vc sugere? Por mim pode ser somente um campo integer mesmo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Oi Rafael Dani da Cunha, alguma novidade?
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

Assim que chegar em casa do trabalho faço um código de exemplo e posto aqui.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok. É muito trampo carregar um TreeView com os dados da tabela? Isso é uma curiosidade.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Caso queira mandar por email é:

frederico.brigatte@gmail.com, ok?

Meu msn é: frederico.brigatte@itelefonica.com.br
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Rafael, alguma novidade? No aguardo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Oi Rafael, alguma novidade?
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

Cara desculpa não ter te respondido é que estou meio enrolado esses dias, vou tentar te mandar hoje a noite.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

De boa Rafael, fico no aguardo. Você já fez esse tipo de controle? Queria uma sugestão sua. É melhor carregar os itens do menu num Treeview diretamente ou gravar numa tabela e carregar depois?
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

É melhor carregar então diretamente, sem utilizar banco de dados, você irá pegar os items do menu e inserir na Treeview. Você não precisa perder esse tempo de inserir no banco de dados para depois ler as informações que está no MainMenu.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok, poderia fazer desse jeito pra mim? Mostrando também qual selecionou? Pode ser? Pq dai eu gravaria o selecionado numa tabela dando acesso sim ou não para determinado usuário. Minha lógica ta correta?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Rafael,

Deixa te perguntar uma coisa. Desse jeito que quero, dá pra fazer assim:

Monto os menus num TreeView e vou clicando o que o usuário tem acesso. Vamos supor que ele tem acesso só para consultar, então gostaria que somente o botão de consulta fique liberado.

Mas pode montar do seu jeito ai. Pode fazer também, pra me ajudar, montar o treeview com os menus.

Entendeu o que preciso?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Rafael,

Será que vc consegue mandar hoje pra mim?
GOSTEI 0
Rafael Cunha

Rafael Cunha

30/03/2013

No tópico abaixo já existe um exemplo de montar um TreeView utilizando um MainMenu.

[url]https://www.devmedia.com.br/forum/montar-treeview-com-mainmenu/407171[/url]
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok, e como eu colocaria uma imagem no TreeView, tipo CheckBox, e assim que clicar ele deixa com um checkbox ticado
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ate que funciona esse código, agora que estou querendo é colocar uma imagem de CheckBox, os selecionados com um CheckBox ticado ao clicar e os sem estar selecionados um CheckBox sem estar ticado. Eu coloquei essas imagens num ImageList, não estou conseguindo mudar as imagens quando clica.

Vamos fazer por parte que fica mais facil, não concorda?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Para mudar a imagem, é muito complicado? To tentando a tarde toda.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Rafael, poderia me ajudar nesse problema agora das imagens no TreeView?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ué, alguém pra ajudar? To meio perdido aqui. Não estou conseguindo. Tentei fazer assim:

procedure MontaTreeMenu(mnuMenu: TMenu; treeMenu: TTreeView);
var
  i: integer;
  No: TTreeNode;

  procedure MontaTreeItem(mnuItem: TMenuItem; NoPai: TTreeNode = nil);
  var
    x: integer;
    NoFilho: TTreeNode;
  begin
    // enquanto houver filhos...
    for x := 0 to mnuItem.Count - 1 do
    begin
      // adiciona um nó ao treeview
      NoFilho := treeMenu.Items.AddChild(NoPai, StringReplace(mnuItem.Items[x].Caption,'&','',[rfReplaceAll, rfIgnoreCase]));
      if mnuItem.Items[x].Count > 0 then          // se o item tiver 'filhos'...
        MontaTreeItem(mnuItem.Items[x], NoFilho); // adiciona esses filhos
    end;
  end;
begin
  treeMenu.Items.BeginUpdate; // prepara para manipulação
  treeMenu.Items.Clear; // elimina todos os itens

  for i := 0 to mnuMenu.Items.Count - 1 do
  begin
    // adiciona um nó ao treeview
    No := treeMenu.Items.Add(nil, StringReplace(mnuMenu.Items[i].Caption,'&','',[rfReplaceAll, rfIgnoreCase]));
    if mnuMenu.Items[i].Count > 0 then     // se o menu tiver 'filhos'...
      MontaTreeItem(mnuMenu.Items[i], No); // adiciona esses filhos
  end;
  treeMenu.Items.EndUpdate; // finaliza a manipulação
end;


E no botão coloquei isso:
  MontaTreeMenu(MainMenu1 ,TreeView1);
  TreeView1.FullExpand;


No evento onGetImageIndex do TreeView, coloquei isso:
var
  idxImagem_0, idxImagem_1: Integer;
begin
  idxImagem_0 := 0;
  idxImagem_1 := 1;

  if not Node.HasChildren then
    idxImagem_0 = 0;

  Node.ImageIndex    := idxImagem_0;
  Node.SelectedIndex := idxImagem_1;
  Node.StateIndex    := idxImagem_0;


O que acontece é o seguinte:

A imagem que coloquei só aparece quando clico no item do TreeView, quando clico em outro, o anterior fica desmarcado. Tenho duas imagens, uma marcada e outra desmarcada.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ninguém???
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Rafael Dani da Cunha, poderia me ajudar?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Esqueceu de mim?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Rapaz, eu aconselho você usar apenas um DBGrid pra listar os itens do menu com um campo "Habilitado" onde o usuário poderá marcar se tal menu está habilitado ou não.
Aqui na empresa nós usamos essa forma e está dando muito certo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

E como faz isso, não sei como faz. Pode me ajudar?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Você já tem a tabela, basta adicionar um campo booleano que eu citei e exibir os registros no DBGrid.
Ah, claro que você vai precisar de um campo para referenciar o nome do usuário para quem está cadastrando os direitos de acesso.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Mas to usando firebird, não aceita boolean.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, eu tenho o seguinte código, que é de um livro, vai no OnCellClick do grid:

dm.perfis_conf.edit;
if dm.perfis_confpermissao.value = 'S' then
     dm.perfis_confpermissao.value = 'N'
else
    dm.perfis_confpermissao.value = 'S';
dm.perfis_conf.ApplyUpdates(0);


Minha tabela MENU esta assim:

Descricao TEXTO
Codigo_Pai TEXTO
Nome_Pai TEXTO

A dúvida é a seguinte, como carregar para o grid os dados dessa tabela usando o componente CLIENTDATASET. O código de cima do grid já grava na tabela? Mas gostaria que gravasse com o ID do Usuário. Como seria a tabela para gravar as permissões?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Cara, vamos por partes:
- Quando se fala em campo booleano em bancos de dados, na maioria das vezes utiliza-se BIT (0 ou 1);
- Sua tabela só tem 3 campos, logo, você vai precisar de mais 2: USUARIO (nome/login do usuário) e PERMISSAO (campo booleano/bit representando a permissão do usuário para acessar aquele menu);
- Esse código que você postou serve, mas é preciso adaptar de acordo com os campos do seu dataset;
- Você tem dúvida de como listar isso num DBGrid? É da forma mais simples possível: um dataset com um select, ligado a um datasource, ao qual se liga o DBGrid;
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Para começar, adicione os dois campos que eu falei.
Ah, eu pelo que eu me lembro do outro tópico, esse campo Codigo_Pai deveria ser apenas Codigo, não? Pois como eu disse, foi um código que nós criamos para cada item, e não para seu item pai. Pense nisso.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok, vamos por parte:

1 - Firebird nem Access, pois estou fazendo de teste no Access não aceita Boolean, como fazer;
2 - Renomeei para Codigo_Pai o campo Codigo;
3 - Os campos USUARIO (nome/login do usuário) e PERMISSAO (campo booleano/bit representando a permissão do usuário para acessar aquele menu) crio na tabela MENUS, certo?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, a tabela MENU esta assim agora:

Descricao - TEXTO
Codigo_Pai - TEXTO // era para ser Codigo, mudei para Codigo_Pai
Nome_Pai TEXTO - TEXTO
Login_Usuario - TEXTO
Permissao - SIM / NÃO

Tabela arrumada. Qual o próximo passo?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Só reforçando: se você seguiu a dica que eu dei no outro tópico, Codigo_Pai não tem nada de Pai, vai ficar meio sem sentido, mas faça como preferir.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Agora faça um select nessa tabela e exiba os dados em um DBGrid, da forma mais simples possível.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Todos os dados:

select * from menu

Pode ser assim?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Feito, Joel. O grid já está ligado com a query.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Feito, qual o próximo passo, Joel?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Agora você vai usar aquele código que você mesmo citou, para alterar o campo PERMISSAO para verdadeiro ou falso. Lembre-se de adaptar para o nome do seu campo e da sua query.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Só que nesse caso, acho que não vai ser "S" ou "N", não lembro como o Access armazena o valor de campo Sim/Não. Então verifique antes como está no campo para poder alterar. De repente pode ser True/False.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Vou no OnCellClick e coloco isso:


dm.perfis_conf.edit;
if menu2Permissao.value = 'S' then
  menu2Permissao.value = 'N'
else
menu2Permissao.value = 'S';
menu2Permissao.Post; // to usando Access
// dm.perfis_conf.ApplyUpdates(0);


Fica assim?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Foi o que eu disse, não sei se você viu acima. Eu não sei como o valor é armazenado nesse campo, se é True/False, Sim/Não, 0/1, então é preciso que você verifique para saber que valores utilizar tanto para a comparação quanto para a atribuição neste campo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

O campo PERMISSÃO esta como Sim/Não
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ta certo o que fiz ai?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, tem que colocar Sim ou Não no lugar de S ou N? Qual o próximo passo?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel??
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, ocupado? Já fiz o grid conforme pediu. Deixo como S / N ou SIM ou NÃO?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Amigo, como eu disse: EU NÃO SEI COMO O ACCESS GRAVA os campos Sim/Não. Você precisa verificar.
Faça o teste e veja no que dá.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

então é só rodar o projeto agora?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Já rodou? Execute, teste, veja se dá erro. Arrisque. Teste. Tente corrigir.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Eu fiz assim e deu erro: Não estou sabendo como fazer.

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
Menu2.edit;
if menu2Permissao.AsString = 'Sim' then
Begin
menu2Login_Usuario.AsString := edtLogin.Text;
menu2Permissao.AsString := 'Não'
end
else
Begin
menu2Permissao.AsString := 'Sim'; 
menu2.Post; // to usando Access
end;
end;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, não teria que ser outra tabela para gravar, por exemplo: PERMISSÕES.

Nela teria:

Codigo_Menu
Codigo_Usuario
Permissao

Aqui poderia também definir os botões do form, não poderia?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Aí você já está indo para outro nível, de controle de permissões a nível de tela.
Com essa tabela que nós estamos trabalhando dá pra tratar o controle de acesso ao mainmenu.
Qual foi o erro que deu?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Não deu erro, só que não faz nada. Vc viu o código que fiz:

Menu2.edit;
if menu2Permissao.AsVariant = -1 then
Begin
menu2Login_Usuario.AsString := edtLogin.Text;
menu2Permissao.AsVariant := 0
end
else
Begin
menu2Permissao.AsVariant := -1;
menu2.Post; // to usando Access
end;


Permissão SIM Menu Administração para o usuário AAAAA, eu coloquei um editText la e coloquei AAAAA e não faz nada se clicar no grid
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Eu acho que esses valores -1 e 0 estão estranhos. Ao invés de AsVariant, veja se dá pra usar AsBoolean e atribuir True ou False.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Coloquei assim agora;

Menu2.edit;
if menu2Permissao.AsBoolean = True then
Begin
menu2Login_Usuario.AsString := edtLogin.Text;
menu2Permissao.AsBoolean := False
end
else
Begin
menu2Permissao.AsBoolean := True;
menu2.Post; // to usando Access
end;
Não ta fazendo nada.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Quero que ao clicar, grave como SIM.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Como posso fazer para gravar agora só o que o usuário pode acessar?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Depure o código e verifique se realmente está passando por aí.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Quero uma ideia de como fazer. Vou ter que dar uma saida agora, mas volto logo.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Ideia de como depurar o código?
Aí é melhor você pesquisar a respeito, por que se eu for passar os passos aqui pra você depurar, não sairemos daqui hoje.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ideia de como fazer isso, não depurar. Sugestão do projeto.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

E nesse caso aqui, como podemos continuar?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Amigo, eu estou sem Delphi aqui e ultimamente ando muito sem tempo. Mas vou tentar fazer um exemplo para você desse tipo de co trole de usuário.
Mas antes, preciso saber: qual é sua experiência com Delphi? Para eu saber como escrever e comentar o código, de forma a evitar duvidas .
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Meu conhecimento é intermediário para avançado.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Meu conhecimento é intermediário para avançado.


Ok, acho que seria melhor, mais interessante isso que sugeriu. Agradeço e fico no aguardo.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, bom dia,

Já que vai montar um exemplo, poderia fazer o seguinte:

Um exemplo de controle de usuário com perfil. O perfil pode ser em grupos, exemplo: Administrador (Faz tudo), Usuário (Consultar), etc. Quero controlar o Menu e os botões dos forms: Novo, Alterar, Excluir e Consultar.

Liberar o acesso dos botões de acordo com o perfil do usuário, ok? Com Login, Alteração de senha e Logoff.

Isso que preciso. Obrigado
GOSTEI 0
Daniel Santos

Daniel Santos

30/03/2013

É pois é, ai esta a diferença entre ajudar alguem a subir uma escada e carregar alguem nas costas enquanto sobe as escadas!


Vai ser mais facil desenvolver o sistema e entregar para ele, ele ate ja passou os requisitos.. hahahahha!
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

DANIEL S. SANTOS,

Não é bem assim. Estou TENTANDO fazer isso faz muito tempo. O que acontece é que me perdi no meio de tanta coisa.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Estou disposto a FAZER, mas preciso da ajuda de vocês. Começando pela ajuda a montar o banco e as tabelas.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

É, Daniel. Tá complicado.
Eu ia fazer a parte do MainMenu, aí já apareceu mais coisa. Se eu já não tinha tempo pra fazer o mais básico, imagine agora.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Eu quero aprender a fazer. Vamos começar do zero? Começando pelo banco de dados? Com o que sugeri, primeiramente quais tabelas preciso para o banco?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Minha dúvida em montar o banco e as tabelas seria a respeito do controle dos botões dos forms. Tenho as seguintes tabelas:

Tabela Usuários:

Login Varchar(10) not null
Nome Varchar(30)
Senha Varchar(10)
Perfil Varchar(20)


Tabela Permissoes

Login Varchar(10) not null
Menu Varchar(20) not null
Permissao Char(1)
Nome_Menu Varchar(20)

Obs.: Nessa tabela, não sei se iria os menus e botões do form que o usuario teria acesso. E como definiria os botões.


Tabela Perfil

Perfil Varchar(20) not null
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Está bom pra começar assim? Repito, os controles dos botões não sei onde colocar nas tabelas.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, vc chegou a ver minha sugestão do banco? Pra começar?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Confesso que não, amigo.
Até pra respirar tá difícil hoje. E essa sua questão requer tempo e dedicação.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok, mas da uma olhada ai e depois comenta aqui. Quero fazer pra aprender isso ai.
GOSTEI 0
Daniel Santos

Daniel Santos

30/03/2013

Hahahaa, pela quantidade de post que o Joel ja respondeu seu, voce deveria assinar a carteira dele!

Sério cara, se tu acha que teu conhecimento é intermediario a avançado, tens que rever seus conceitos.


Não sei se voce prometeu que iriar fazer isso pra algum chefe seu, sei la, pelo nivel de apavoramento seu deve ser isso. Voce so nao pode esquecer que somos profissionais aqui e precisamos trabalhar pra comer e sustentar a familia, com isso com muita boa vontade ajudamos as pessoas que "tem dúvidas", mais isso ai ja é ridiculo!

Os moderadores podem ficar brabos com isso, mais tenham o bom senso.


GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Hahahaa, pela quantidade de post que o Joel ja respondeu seu, voce deveria assinar a carteira dele!

Sério cara, se tu acha que teu conhecimento é intermediario a avançado, tens que rever seus conceitos.


Não sei se voce prometeu que iriar fazer isso pra algum chefe seu, sei la, pelo nivel de apavoramento seu deve ser isso. Voce so nao pode esquecer que somos profissionais aqui e precisamos trabalhar pra comer e sustentar a familia, com isso com muita boa vontade ajudamos as pessoas que "tem dúvidas", mais isso ai ja é ridiculo!

Os moderadores podem ficar brabos com isso, mais tenham o bom senso.



Está corretíssimo, Daniel. Infelizmente, pela primeira vez em vários meses como usuário mais atuante do fórum, eu digo que cansei de um tópico. Por isso já prometi fazer um exemplo prático pra ele. Mas não sei quando vou poder fazer isso.
Estou tentando ajudar, mas está difícil.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Se for para ofender quem não sabe, pode encerrar o tópico. Ninguém nasce sabendo, estou tentando aprender algo novo. Pelo que eu sei, meu conhecimento é o que eu comentei. Sei que todos trabalham e estão aqui para ajudar.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, estou tentando fazer pra aprender. Me desculpa se fui chato ou insistente.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Não, amigo. Nem de longe queremos ofender ninguém. Mas é que a conversa aqui não parece estar evoluindo, entende?
Por isso eu já propus lhe enviar um exemplo, pois analisando o código e vendo a coisa funcionando, talvez fique mais fácil de você conseguir seguir adiante.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Ok, Joel. Posso ficar no aguardo do exemplo então?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Pode sim, amigo. Estou fazendo o possível para lhe enviar o quanto antes.
Já adianto que vou mandar com um banco Access, pois é o que tenho aqui no momento.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

MUUUUITO OBRIGADO. Vai ajudar muito. Access tá ÓTIMO. Vai mandar por email?


GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

vou disponibilizar aqui. Qual versão do Delphi você tem aí?
Aqui eu tenho 2007, 2009 e XE2. Qual é a mais adequada pra você?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Tenho instalado o Delphi 7 e o XE3
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Pode ser o XE2. Vai ser o Access?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Sim, XE2 e Access então. Vou lhe pedir só mais um pouco de paciência, pois na segunda tenho rpova na universidade e na terça, tenho um exame de certificação da Microsoft. Então terça ainda de manhã, acho que já dá pra começar a fazer esse exemplo pra você.
Abraço.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Claro, fique tranquilo. Boa prova pra vc. Pra te ajudar, o que posso começar a fazer aqui, ai vou aprendendo, o que acha?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Rapaz, é meio difícil dizer o que você pode ir fazendo, já que vou te mandar um exemplo.
Mas é importante que você saiba conectar a uma base de dados Access e manipular suas tabelas usando a paleta ADO, pois é o que vou usar.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Conectar com Access eu sei porque uso. Sobre isso fique tranquilo.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Tive problemas com meu XE2, então fiz no 2007 mesmo.
Segue o link para download: https://dl.dropboxusercontent.com/u/78226427/ControleAcesso.rar

Boa sorte.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Joel, obrigado mas ocorreu um erro. Escolhi o perfil e ao clicar botão criar menu deu um erro:

As alterações solicitadas para a tabela não foram satisfatórias já que criaram valores duplicados no índice, chave primária ou relação. Altere os dados no campo ou campos que contêm os dados duplicados, remova o índice ou redefina o índice para possibilitar entradas duplicadas e tente novamente.

Isso é erro de banco de dados, certo?

*PERFIL
*NOME_MENU
DESCRICAO_MENU
HABILITADO
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

30/03/2013

Sim, amigo. Já procurou no Google e tentou resolver?
É o seguinte: já tem dados no banco, então quando você manda criar os menus de novo, há uma tentativa de inserir valores duplicados no banco, quebrando a chave que eu defini.
Para resolver isso, execute um delete antes de criar os menus (que são vários inserts). Ou seja: no botão de criar os menus para o perfil, antes de fazer o loop e chamar a função, execute o seguinte delete:
delete from acesso_menu where perfil = :perfil
e passe o parâmetro perfil com o contexto do combobox, como é feito na função recursiva.
Abraço.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

30/03/2013

Entendi, então deleto o conteúdo da tabela antes de inserir, certo? Como não pensei nisso.
GOSTEI 0
POSTAR