Gravar em banco itens do MainMenu

11/09/2011

0

Boa noite,

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***

Frederico Brigatte***

Responder

Posts

13/09/2011

Frederico Brigatte***

Boa noite,

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?
Responder

14/09/2011

Gustavo Bretas

Você terá que fazer um Looping recursivo.
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!
Responder

15/09/2011

Frederico Brigatte***

Você terá que fazer um Looping recursivo.
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;

Responder

15/09/2011

Gustavo Bretas

E ae Frederico,

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.Open;
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!
Responder

15/09/2011

Frederico Brigatte***

E ae Frederico,

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.Open;
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.
Responder

16/09/2011

Frederico Brigatte***

E ae Frederico,

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.Open;
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?
Responder

16/09/2011

Gustavo Bretas

Isso vc tinha dito no primeiro tópico, não precisava repetir.
O que eu quero fazer, é gravar os menus e sub-menus numa tabela e depois montar num treeview, é isso que preciso, fui claro agora?
 

Isso facilita a vida de quem quer te ajudar, ok?
 É 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.

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);
Responder

16/09/2011

Frederico Brigatte***

Isso vc tinha dito no primeiro tópico, não precisava repetir.
O que eu quero fazer, é gravar os menus e sub-menus numa tabela e depois montar num treeview, é isso que preciso, fui claro agora?
 

Isso facilita a vida de quem quer te ajudar, ok?
 É 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.

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.
Responder

16/09/2011

Frederico Brigatte***

E ae Frederico,

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.Open;
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.
Responder

16/09/2011

Gustavo Bretas

Que banco de dados vc usa?
Responder

16/09/2011

Frederico Brigatte***

Que banco de dados vc usa?


Access
Responder

16/09/2011

Frederico Brigatte***

Que banco de dados vc usa?


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.
Responder

16/09/2011

Gustavo Bretas

Certo, eu não tenho o Access aqui, então te passo o conceito, e vc tera que adequar para seu ambiente!
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
Responder

16/09/2011

Frederico Brigatte***

Certo, eu não tenho o Access aqui, então te passo o conceito, e vc tera que adequar para seu ambiente!
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?
Responder

16/09/2011

Frederico Brigatte***

Certo, eu não tenho o Access aqui, então te passo o conceito, e vc tera que adequar para seu ambiente!
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.
Responder

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar