MainMenu em Banco
Estou precisando gravar a estrutura do MainMenu numa tabela:
Codigo - Integer
Descricao - Varchar(30)
CodigoPai - Integer
A tabela é essa, mas podem sugerir outras. Preciso pegar os menus e sub-menus e gravar no banco de dados.
Obrigado.
Frederico Brigatte***
Respostas
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Pelo que vi, você já tem vários posts abertos sobre isso. Você está tentando implementar um controle de acesso?
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
Note que primeiramente se grav o item no banco e em seguida repetimos o processo para os filhos desse item.
Para chamar o método, poderia ser feito o seguinte:
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(MainMenu1.Items[i]);
end;Frederico Brigatte***
18/04/2013
No código abaixo nas parte comentada é onde vai gravar?
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
Como seria a parte de gravar?
procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
Frederico Brigatte***
18/04/2013
procedure TForm2.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
//dataSet.fieldbyname('descricao').value := item.caption
//...gravar o que precisar
dataSet.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
DataSet.Append;
Precisa também do
DataSet.ApplyUpdates(0);
no final do código, né?
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Como ficaria a linha para gravar o Codigo e CodigoPai no banco?
A tabela é assim:
Codigo - Integer
Descricao - Varchar
CodigoPai - Integer
Frederico Brigatte***
18/04/2013
dataSet.fieldbyname('codigo').value := item.caption // aqui não sei como fica
dataSet.fieldbyname('descricao').value := item.caption
dataSet.fieldbyname('codigopai').value := item.caption // aqui não sei como fica
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Cadastro
Clientes
xxxxx - Menu qualquer dentro de clientes
Vc teria alguma sugestão para montar a tabela?
Joel Rodrigues
18/04/2013
Joel Rodrigues
18/04/2013
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Frederico Brigatte***
18/04/2013
Fiz assim:
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
Menu.Append;
Menu.fieldbyname('descricao').value := item.caption
Menu.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
procedure TForm1.btnGravarClick(Sender: TObject); // Botão
begin
end;
Frederico Brigatte***
18/04/2013
Somente Codigo e Descricao?
Frederico Brigatte***
18/04/2013
A tabela ficaria assim:
Codigo ---- teria esse? Integer
Nome ---- Varchar
Descricao ---- Varchar
Nome_Pai ---- Seria Varchar???
Frederico Brigatte***
18/04/2013
Não estou conseguindo montar aqui. Como que ficaria o banco a procedure e a chamada dela?
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
for i := 0 to item.Count -1 do
begin
Menu.Append;
Menu.fieldbyname('descricao').value := item[i].caption;
Menu.Post;
CriarNoTreeView(item.Items[i]);
end;
end;
procedure TForm1.btnGravarClick(Sender: TObject);
begin
CriarNoTreeView(MainMenu1.Items);
end;
Não está gravando os Sub-Menus, gravou apenas o primeiro item do sub-menu. Meu Menu está assim:
Administração
Cadastro
Clientes
Funcionários
Serviços
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Joel Rodrigues
18/04/2013
Joel Rodrigues
18/04/2013
for i := 0 to item.Count -1 do begin CriarNoTreeView(item.Items[i]); end;
Joel Rodrigues
18/04/2013
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Cara, esse é o código pra preencher o dataset, considerando a nova estrutura da sua tabela. Logo, você vai botar entre o append e o post, certo?
Frederico Brigatte***
18/04/2013
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
for i := 0 to item.Count -1 do
begin
Menu.Append;
Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;
CriarNoTreeView(item.Items[i]);
end;
end;
procedure TForm1.btnGravarClick(Sender: TObject);
begin
CriarNoTreeView(MainMenu1.Items);
end;
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
procedure TForm1.mtdLoopingRecursivo(aoMenuItem: TMenuItem);
var
i: Integer;
begin
Menu.Open;
for i := 0 to aoMenuItem.Count -1 do
begin
Menu.Append;
MenuNome.AsString := aoMenuItem.Items[i].Name;
MenuDescricao.AsString := AnsiReplaceStr(aoMenuItem.Items[i].Caption, '&', EmptyStr);
// Se tiver mais campos, coloque aqui
Menu.Post;
mtdLoopingRecursivo(aoMenuItem.Items[i]);
end;
end;
procedure TForm1.btnGravarClick(Sender: TObject);
begin
mtdLoopingRecursivo(MainMenu1.Items);
showMessage('Inclusão efetuada com sucesso !');
end;
Joel Rodrigues
18/04/2013
Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;Fica DENTRO do método CriarNoTreView, lá onde eu tinha comentado.
Joel Rodrigues
18/04/2013
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
Menu.Append;
Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
for i := 0 to MainMenu1.Items.Count -1 do begin CriarNoTreeView(MainMenu1.Items[i]); end;
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Coloque esse código no botão ou em qualquer outro lugar que vá realizar a gravação do menu no banco.
Frederico Brigatte***
18/04/2013
procedure TForm1.CriarNoTreeView(item: TMenuItem);
var
i: Integer;
begin
Menu.Append;
Menu.fieldbyname('nome').value := item[i].name;
Menu.fieldbyname('descricao').value := item[i].caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item[i].Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(MainMenu1.Items[i]);
end;
end;
Joel Rodrigues
18/04/2013
dataSet.fieldbyname('nome').value := item.name;
dataSet.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
dataSet.fieldbyname('nome_pai').value := item.Parent.name
else
dataSet.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nívelRepare que é item.name e não item[i].name, por exemplo.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Codigo - Integer
Descricao - Varchar(30)
CodigoPai - Integer
Exemplo do Menu:
Opção 1
Opção 1.1
Opção 1.2
Opção 1.3
Opção 1.3.1
Opção 1.3.2
Opção 2
Opção 2.1
Codigo Descricao Codigo_Pai
1 Opção 1 0
2 Opção 1.1 1
3 Opção 1.2 1
4 Opção 1.3 1
5 Opção 1.3.1 4
6 Opção 1.3.2 4
7 Opção 2 0
8 Opção 2.1 7
É isso que estou querendo gravar no banco.
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Você pode criar um auto incremento ou bolar uma estrategia, como eu falei, pra ir montando esse código a cada nível do menu.
Repetindo: NÃO EXISTE UM "CÓDIGO" desse tipo no componente.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Nome
Descricao
Nome_Pai
Todos varchar
Joel Rodrigues
18/04/2013
Abraço e até já.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
procedure TForm2.CriarNoTreeView(item: TMenuItem; nivel:string );
var
i: Integer;
begin
//aqui agora, além de preencher o dataset como já está sendo feito, vc pode usar mais um campo e prenchelo com a variável "nivel"
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
end;
end;
E a chamada agora fica:
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(MainMenu1.Items[i], inttostr(i+1)+'.');
end;
Teste aí.
Joel Rodrigues
18/04/2013
procedure TForm1.CriarNoTreeView(item: TMenuItem; nivel:string );
var
i: Integer;
begin
Menu.Append;
//adicionada essa linha, ou algo equivalente para gravar esse novo campo
Menu.fieldbyname('CODIGO').value := nivel;
Menu.fieldbyname('nome').value := item.name;
Menu.fieldbyname('descricao').value := item.caption;
if Assigned(item.Parent) then
Menu.fieldbyname('nome_pai').value := item.Parent.name
else
Menu.fieldbyname('nome_pai').value := '';//Não tem pai, é do primeiro nível
Menu.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i]);
end;
endFrederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
Frederico Brigatte***
18/04/2013
procedure TForm1.CriarNoTreeView2(item: TMenuItem; nivel:string);
var
i: Integer;
begin
Menu2.Append;
Menu2.fieldbyname('CODIGO').value := nivel;
Menu2.fieldbyname('Descricao').value := item.caption;
if Assigned(item.Parent) then
Menu2.fieldbyname('Nome_Pai').value := item.Parent.name
else
Menu2.fieldbyname('Nome_Pai').value := '';//Não tem pai, é do primeiro nível
Menu2.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView(item.Items[i], nivel+inttostr(i+1)+'.');
end;
end;
Frederico Brigatte***
18/04/2013
procedure TForm1.CriarNoTreeView2(item: TMenuItem; nivel:string);
var
i: Integer;
begin
Menu2.Append;
Menu2.fieldbyname('CODIGO').value := nivel;
Menu2.fieldbyname('Descricao').value := item.caption;
if Assigned(item.Parent) then
Menu2.fieldbyname('Nome_Pai').value := item.Parent.name
else
Menu2.fieldbyname('Nome_Pai').value := '';//Não tem pai, é do primeiro nível
Menu2.Post;
for i := 0 to item.Count -1 do
begin
CriarNoTreeView2(item.Items[i], nivel+inttostr(i+1)+'.');
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
begin
for i := 0 to MainMenu1.Items.Count -1 do
begin
CriarNoTreeView2(item.Items[i]); // Ta dando erro aqui
end;
end;
Joel Rodrigues
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Undeclared identifier: item
procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i := 0 to MainMenu1.Items.Count -1 do begin CriarNoTreeView2(item.Items[i]); // para nessa linha end; end;
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Frederico Brigatte***
18/04/2013
Not enough actual parameters.
procedure TForm1.Button2Click(Sender: TObject); var i : Integer; begin for i := 0 to MainMenu1.Items.Count -1 do begin CriarNoTreeView2(MainMenu1.Items[i]); end; end;
Joel Rodrigues
18/04/2013
for i := 0 to MainMenu1.Items.Count -1 do begin CriarNoTreeView(MainMenu1.Items[i], inttostr(i+1)+'.'); end;
Se foi adicionado um parâmetro, tem de passar, né?
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
procedure TForm1.Button2Click(Sender: TObject);
var
i : Integer;
nivel : String;
begin
for i := 0 to MainMenu1.Items.Count -1 do
begin
// CriarNoTreeView2(MainMenu1.Items[i]);
CriarNoTreeView2(MainMenu1.Items[i], nivel+inttostr(i+1)+'.');
end;
end;
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Tanto que esse nivel aí tá sempre vazio, ou seja, não vei interferir.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Depois vejo o do TreeView e tento te ajudar, pois só terei acesso ao Delphi na segunda-feira.
Tópico Concluído.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013
Fique tranquilo e já vou adiantando que não vou poder ajudar até segunda-feira, infelizmente, pois não tenho Delphi aqui.
Frederico Brigatte***
18/04/2013
Frederico Brigatte***
18/04/2013
Joel Rodrigues
18/04/2013