Tabela Virtual e mostrar os dados no DBGrid

Delphi

14/05/2013

Como posso fazer um tabela virtual só pra armazenar dados em execução, mostrar num DBGrid e mandar para outra física no click do grid? Eu to usando Access.
Frederico Brigatte***

Frederico Brigatte***

Curtidas 0

Respostas

Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Estou usando ADO, poderia usar um ClientDataSet junto?
GOSTEI 0
Landerson Santos

Landerson Santos

14/05/2013

Frederico bom dia.
Poderia ser mais específico no processo desejado?

O primeiro entendimento, você poderia usar um clientdataset e ficar salvando e apagando seu conteúdo enquanto executa a aplicação.

Na verdade precisamos saber ao certo o que deseja realmente fazer.
GOSTEI 0
Landerson Santos

Landerson Santos

14/05/2013

Frederico bom dia.
Poderia ser mais específico no processo desejado?

O primeiro entendimento, você poderia usar um clientdataset e ficar salvando e apagando seu conteúdo enquanto executa a aplicação.

Na verdade precisamos saber ao certo o que deseja realmente fazer.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Ok, vou explicar. Estou usando MainMenu com ActionList. Estou gravando numa tabela Acao no Access os campos:

Action - Texto
Action_Nome - Texto
Permissao - Não

Gostaria de gravar numa tabela virtual esses campos sem ter que gravar na tabela Acao. O que eu quero gravar é os campos que o perfil X terá acesso, faria a gravação física na Tabela Permissoes Access dos campos que clicar no DBGrid que seriam os dados da tabela temporária. Só que tem um detalhe, quando clico no grid, ele grava na tabela Permissao o campo Permissao assim: Onde está N grava S e vice-versa.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Por padrão, está gravando na tabela Acao no campo Permissao 'N'. Atualmente ele está invertendo os valores qdo gravo, de S-N e de N-S. Ai tenho que ir na tabela Permissão e mudar os valores. Como poderia fazer isso uma única vez? Ou seja, já gravar a permissão que tem que ser?
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Fiz o seguinte, aqui gravo na tabela virtual:

  DM.Cds.CreateDataSet;
  DM.Cds.Open;
  if DM.Cds.RecordCount = 0 then
     for i := 0 to FPrincipal.ComponentCount - 1 do
         if FPrincipal.Components[i] is taction then
         begin
            DM.Cds.insert;
            DM.CdsAction.value := taction(fprincipal.Components[i]).caption;
            DM.CdsAction_nome.value := taction(fprincipal.Components[i]).name;
            DM.CdsPermissao.value := 'N';
         end;


Como que faço o inverso, da virtual para física? Estou usando ADO. Fiz assim mas não ta varrendo a tabela, fica só no for e insert:
  DM.Acoes.Open;
  if DM.Acoes.RecordCount = 0 then
     for i := 0 to DM.Cds.FieldCount -1 do
            DM.Acoes.insert;
            DM.AcoesAction.value := varCdsClone.FieldByName(DM.Cds.Fields[i].FieldName).Value;
            DM.AcoesAction_nome.value := DM.CdsAction_nome.value;
            DM.AcoesPermissao.value := DM.CdsPermissao.value;
            DM.Acoes.Post;
     DM.Acoes.close;
     DM.Acoes.Open;
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Como varrer os dados da tabela virtual e gravar na física?

  DM.Acoes.Open;
  if DM.Acoes.RecordCount = 0 then
     for i := 0 to DM.Cds.RecordCount - 1 do
     begin
            DM.Acoes.insert;
            DM.AcoesAction.value :=  DM.Cds.fieldbyname('Action').AsString;
            DM.AcoesAction_nome.value := DM.Cds.fieldbyname('Action_Nome').AsString;
            DM.AcoesPermissao.value := DM.Cds.fieldbyname('Permissao').AsString;
            DM.Acoes.Post;
     end;
     DM.Acoes.close;
     DM.Acoes.Open;


Estou fazendo assim, mas só está pegando o primeiro valor.
GOSTEI 0
Frederico Brigatte***

Frederico Brigatte***

14/05/2013

Fiz assim e deu certo, só que tem um problema:

  DM.Acoes.Open;
//  if DM.Acoes.RecordCount = 0 then

     DM.Cds.First;
     while not DM.Cds.eof do
     //for i := 0 to DM.Cds.RecordCount - 1 do
     begin
            DM.Acoes.insert;
            DM.AcoesAction.value :=  DM.Cds.fieldbyname('Action').AsString;
            DM.AcoesAction_nome.value := DM.Cds.fieldbyname('Action_Nome').AsString;
            DM.AcoesPermissao.value := DM.Cds.fieldbyname('Permissao').AsString;
            DM.Acoes.Post;
            DM.Cds.Next;
     end;
     DM.Acoes.close;
     DM.Acoes.Open;


No campo Permissão na tabela virtual está padrão N. Se gravar na tabela física, vai gravar como padrão N. Gostaria de já poder gravar na tabela física o valor correto, ou seja, S ou N, de acordo com o acesso.
GOSTEI 0
POSTAR