MainMenu em Banco

18/04/2013

1

Bom dia pessoal,

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

Posts

O banco é Firebird.
Responder

18/04/2013

Joel Rodrigues

Rapaz, qual é a real necessidade?
Pelo que vi, você já tem vários posts abertos sobre isso. Você está tentando implementar um controle de acesso?
Responder
Quero gravar a estrutura do mainmenu com os itens e sub-itens no banco de dados. Isso que preciso por enquanto.
Responder

18/04/2013

Joel Rodrigues

A ideia é fazer um procedimento recursivo, como você já deve saber. Por exemplo:

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;
Responder
Obrigado Joel,

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;
Responder
Joel, acho que faltou o Post no código. Ficaria assim?

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;

Responder

18/04/2013

Joel Rodrigues

Exato, é só gravar da forma mais comum possível. Preenche os campos do DataSet e dá um post.
Responder
Faltou também o

   DataSet.Append;


Precisa também do

   DataSet.ApplyUpdates(0); 


no final do código, né?
Responder

18/04/2013

Joel Rodrigues

Isso, amigo... tudo que você usa pra inserir um registro como outro qualquer.
Responder
Ok, vou fazer o teste aqui. Em qual evento posso colocar esse código para que seja automático? E fazer apenas uma vez.
Responder
Uma duvida:

Como ficaria a linha para gravar o Codigo e CodigoPai no banco?

A tabela é assim:

Codigo - Integer
Descricao - Varchar
CodigoPai - Integer
Responder
Nessa linha, certo?

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

Responder

18/04/2013

Joel Rodrigues

Aí depende. O que é esse "código"? É um auto incremento? É o nome do componente? O que é?
Responder
Ta certo assim ou teria que ter mais alguma coisa pra gravar os códigos?
Responder

18/04/2013

Joel Rodrigues

Não deixa de estar certo, mas aí está gravando o mesmo valor nos três campos. O QUE É O CÓDIGO?
Responder