Gravar em banco itens do MainMenu
11/09/2011
0
Estou precisando muito de uma ajuda. Preciso gravar numa tabela os itens e os subitens do MainMenu. Alguém poderia me ajudar, por favor?
Frederico Brigatte***
Posts
13/09/2011
Frederico Brigatte***
Estou precisando muito de uma ajuda. Preciso gravar numa tabela os itens e os subitens do MainMenu. Alguém poderia me ajudar, por favor?
E como também montar o TreeView com os dados do banco?
Ninguém pra ajudar?
14/09/2011
Gustavo Bretas
Fiz um exemplo do looping, que é o caminho das pedras, mas você terá que criar o script para a gravação!
procedure TForm2.mtdLoopingRecursivo(aoMenuItem: TMenuItem);var i: Integer;begin for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD mtdLoopingRecursivo(aoMenuItem.Items[i]); end;end;
procedure TForm2.mtdMenuItemToTreeView(aoMenuItem: TMenuItem; aoNode : TTreeNode);var I: Integer;begin for I := 0 to aoMenuItem.Count -1 do begin mtdMenuItemToTreeView(aoMenuItem.Items[i], TreeView1.Items.AddChild(aoNode, AnsiReplaceStr(aoMenuItem.Items[i].Caption, '&', EmptyStr))); end;end;
E as Chamadas
procedure TForm2.btnArvoreClick(Sender: TObject);begin TreeView1.Items.Clear; mtdMenuItemToTreeView(MainMenu1.Items, nil);end; procedure TForm2.btnLoopingClick(Sender: TObject);begin mtdLoopingRecursivo(MainMenu1.Items);end;
Abraço!
15/09/2011
Frederico Brigatte***
Fiz um exemplo do looping, que é o caminho das pedras, mas você terá que criar o script para a gravação!
procedure TForm2.mtdLoopingRecursivo(aoMenuItem: TMenuItem);var i: Integer;begin for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD mtdLoopingRecursivo(aoMenuItem.Items[i]); end;end;
procedure TForm2.mtdMenuItemToTreeView(aoMenuItem: TMenuItem; aoNode : TTreeNode);var I: Integer;begin for I := 0 to aoMenuItem.Count -1 do begin mtdMenuItemToTreeView(aoMenuItem.Items[i], TreeView1.Items.AddChild(aoNode, AnsiReplaceStr(aoMenuItem.Items[i].Caption, '&', EmptyStr))); end;end;
E as Chamadas
procedure TForm2.btnArvoreClick(Sender: TObject);begin TreeView1.Items.Clear; mtdMenuItemToTreeView(MainMenu1.Items, nil);end; procedure TForm2.btnLoopingClick(Sender: TObject);begin mtdLoopingRecursivo(MainMenu1.Items);end;
Abraço!
Obrigado, Gustavo, pela resposta.
Não entendi essa parte:
for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD - Aqui uso a parte que grava no banco?
mtdLoopingRecursivo(aoMenuItem.Items[i]); end;
Tem como dar mais esse help? E como posso montar a tabela para a gravação?
Uso essa rotina para gravar:
dmData.Clientes.Open;
dmData.Clientes.Append;
dmData.ClientesDATACAD.AsString := Data_Cad.Text;
dmData.Clientes.Post;
showMessage('Inclusão efetuada com sucesso !');
dmData.Clientes.Close;
LimpaTela;
15/09/2011
Gustavo Bretas
Então, abrir e fechar um dataset a cada "passada" do looping não é um bom negócio, vc vai complicar a vida do seu servidor de banco... rs!
Esse script que vc colocou é só um exemplo?
dmData.Clientes.Append;
dmData.ClientesDATACAD.AsString := Data_Cad.Text;
dmData.Clientes.Post;
showMessage('Inclusão efetuada com sucesso !');
dmData.Clientes.Close;
LimpaTela;
Bom, no primeiro tópico vc disse que precisava gravar os Menus no banco, agora para te ajudar eu preciso que vc seja mais claro no que vc quer!
15/09/2011
Frederico Brigatte***
Então, abrir e fechar um dataset a cada "passada" do looping não é um bom negócio, vc vai complicar a vida do seu servidor de banco... rs!
Esse script que vc colocou é só um exemplo?
dmData.Clientes.Append;
dmData.ClientesDATACAD.AsString := Data_Cad.Text;
dmData.Clientes.Post;
showMessage('Inclusão efetuada com sucesso !');
dmData.Clientes.Close;
LimpaTela;
Bom, no primeiro tópico vc disse que precisava gravar os Menus no banco, agora para te ajudar eu preciso que vc seja mais claro no que vc quer!
Esse é um exemplo de como gravo numa tabela, rs.
Preciso saber como eu gravo na tabela os itens do menu usando a rotina que você me passou. Não entendi direito como fazer a linha em vermelho.
for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD
mtdLoopingRecursivo(aoMenuItem.Items[i]); end;
O que eu quero fazer, é gravar os menus e sub-menus numa tabela e depois montar num treeview, é isso que preciso, fui claro agora? É para fazer um controle de acesso para usuários.
Usuário Fulano, tem acesso ao Menu X, Y e Z. Usuário Y tem acesso somente ao Menu X. Desculpa se não fui claro.
16/09/2011
Frederico Brigatte***
Então, abrir e fechar um dataset a cada "passada" do looping não é um bom negócio, vc vai complicar a vida do seu servidor de banco... rs!
Esse script que vc colocou é só um exemplo?
dmData.Clientes.Append;
dmData.ClientesDATACAD.AsString := Data_Cad.Text;
dmData.Clientes.Post;
showMessage('Inclusão efetuada com sucesso !');
dmData.Clientes.Close;
LimpaTela;
Bom, no primeiro tópico vc disse que precisava gravar os Menus no banco, agora para te ajudar eu preciso que vc seja mais claro no que vc quer!
Esse é um exemplo de como gravo numa tabela, rs.
Preciso saber como eu gravo na tabela os itens do menu usando a rotina que você me passou. Não entendi direito como fazer a linha em vermelho.
for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD
mtdLoopingRecursivo(aoMenuItem.Items[i]); end;
O que eu quero fazer, é gravar os menus e sub-menus numa tabela e depois montar num treeview, é isso que preciso, fui claro agora? É para fazer um controle de acesso para usuários.
Usuário Fulano, tem acesso ao Menu X, Y e Z. Usuário Y tem acesso somente ao Menu X. Desculpa se não fui claro.
Agora expliquei melhor, rs?
16/09/2011
Gustavo Bretas
Isso facilita a vida de quem quer te ajudar, ok?
Muito bem, voltando ao procedimento.
Presumo que vc tenha criado a estrutura que vai armazenar os menus, então vc pega o DataSet da tabela, e substitui o comando na função, só que vc abre o dataset fora do looping.
DataSet.Open;for i := 0 to aoMenuItem.Count -1 dobegin DataSet.Append; DataSetNome.AsString := aoMenuItem.Items[i].Name; DataSetCaption.AsString := aoMenuItem.Items[i].Caption; // Se tiver mais campos, coloque aqui DataSet.Post; mtdLoopingRecursivo(aoMenuItem.Items[i]);end;DataSet.ApplyUpdates(0);
16/09/2011
Frederico Brigatte***
Isso facilita a vida de quem quer te ajudar, ok?
Muito bem, voltando ao procedimento.
Presumo que vc tenha criado a estrutura que vai armazenar os menus, então vc pega o DataSet da tabela, e substitui o comando na função, só que vc abre o dataset fora do looping.
DataSet.Open;for i := 0 to aoMenuItem.Count -1 dobegin DataSet.Append; DataSetNome.AsString := aoMenuItem.Items[i].Name; DataSetCaption.AsString := aoMenuItem.Items[i].Caption; // Se tiver mais campos, coloque aqui DataSet.Post; mtdLoopingRecursivo(aoMenuItem.Items[i]);end;DataSet.ApplyUpdates(0);
Vc quis dizer a tabela? Não, poderia me ajudar tbém qto a isso. Montar a tabela é uma das dúvidas. Queria montar uma tabela que não precisasse toda hora que criasse um item novo, criar um campo também.
16/09/2011
Frederico Brigatte***
Então, abrir e fechar um dataset a cada "passada" do looping não é um bom negócio, vc vai complicar a vida do seu servidor de banco... rs!
Esse script que vc colocou é só um exemplo?
dmData.Clientes.Append;
dmData.ClientesDATACAD.AsString := Data_Cad.Text;
dmData.Clientes.Post;
showMessage('Inclusão efetuada com sucesso !');
dmData.Clientes.Close;
LimpaTela;
Bom, no primeiro tópico vc disse que precisava gravar os Menus no banco, agora para te ajudar eu preciso que vc seja mais claro no que vc quer!
Esse é um exemplo de como gravo numa tabela, rs.
Preciso saber como eu gravo na tabela os itens do menu usando a rotina que você me passou. Não entendi direito como fazer a linha em vermelho.
for i := 0 to aoMenuItem.Count -1 do begin aoMenuItem.Items[i].Checked := not aoMenuItem.Items[i].Checked; // -> No lugar da linha acima, vc faz a rotina de acesso ao BD
mtdLoopingRecursivo(aoMenuItem.Items[i]); end;
O que eu quero fazer, é gravar os menus e sub-menus numa tabela e depois montar num treeview, é isso que preciso, fui claro agora? É para fazer um controle de acesso para usuários.
Usuário Fulano, tem acesso ao Menu X, Y e Z. Usuário Y tem acesso somente ao Menu X. Desculpa se não fui claro.
Foi mal, Gustavo. Desculpa, concordo com vc. Se não explico direito o que quero, fica difícil de ajudar mesmo. Agora fui mais claro?
Vc quis dizer a tabela? Não, poderia me ajudar tbém qto a isso. Montar a tabela é uma das dúvidas. Queria montar uma tabela que não precisasse toda hora que criasse um item novo, criar um campo também.
16/09/2011
Frederico Brigatte***
Access
Pode ser o script que monto aqui. Meu email é: frederico.brigatte@itelefonica.com.br caso queira contato além daqui.
Gustavo, agradeço pela ajuda, ok? Sem sua ajuda, não sei o que faria.
16/09/2011
Gustavo Bretas
Mas antes, vc já pesquisou sobre o componente UserControl? Eu nunca usei, mas vejo o pessoal falar bem dele, tem um tutorial aqui no DevMedia
https://www.devmedia.com.br/post-14827-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-1-3.htmlhttp://www.devmedia.com.br/post-14828-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-2-3-.htmlhttps://www.devmedia.com.br/post-14829-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-3-3--[FINAL].html
No PlanteDelphi tbm tem um tutorial pra usar elehttp://www.planetadelphi.com.br/ver_artigo.php?id=132http://www.planetadelphi.com.br/ver_artigo.php?id=133http://www.planetadelphi.com.br/ver_artigo.php?id=134http://www.planetadelphi.com.br/ver_artigo.php?id=135
16/09/2011
Frederico Brigatte***
Mas antes, vc já pesquisou sobre o componente UserControl? Eu nunca usei, mas vejo o pessoal falar bem dele, tem um tutorial aqui no DevMedia
https://www.devmedia.com.br/post-14827-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-1-3.htmlhttp://www.devmedia.com.br/post-14828-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-2-3-.htmlhttps://www.devmedia.com.br/post-14829-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-3-3--[FINAL].html
No PlanteDelphi tbm tem um tutorial pra usar elehttp://www.planetadelphi.com.br/ver_artigo.php?id=132http://www.planetadelphi.com.br/ver_artigo.php?id=133http://www.planetadelphi.com.br/ver_artigo.php?id=134http://www.planetadelphi.com.br/ver_artigo.php?id=135
Vou verificar os link, agradeço a dica. Ok, pode ser desse jeito eu adapto para o access, ok?
16/09/2011
Frederico Brigatte***
Mas antes, vc já pesquisou sobre o componente UserControl? Eu nunca usei, mas vejo o pessoal falar bem dele, tem um tutorial aqui no DevMedia
https://www.devmedia.com.br/post-14827-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-1-3.htmlhttp://www.devmedia.com.br/post-14828-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-2-3-.htmlhttps://www.devmedia.com.br/post-14829-Instalando-e-compreendendo-o-componente-UserControls-no-Delphi-7--PARTE-3-3--[FINAL].html
No PlanteDelphi tbm tem um tutorial pra usar elehttp://www.planetadelphi.com.br/ver_artigo.php?id=132http://www.planetadelphi.com.br/ver_artigo.php?id=133http://www.planetadelphi.com.br/ver_artigo.php?id=134http://www.planetadelphi.com.br/ver_artigo.php?id=135
Vou verificar os link, agradeço a dica. Ok, pode ser desse jeito eu adapto para o access, ok?
E também quero aprender como fazer isso.
Clique aqui para fazer login e interagir na Comunidade :)