Ricardo,

  Essa não é forma de fazer Mestre/Detalhe com DBExpress. Segue abaixo as
conexões:

============================
Componentes Mestre
============================

SQLQueryMestre
Propriedades
  - SQL = Select * From Menus
  - SQLConnection = Ao seu componente SQLConnection

DataSetProviderMestre
Propriedades
  - DataSet = SQLQueryMestre
  - Options = [poIncFieldProps, poAllowCommandText]
  - UpdateMode = upWhereKeyOnly

ClientDataSetMestre
Propriedades
  - ProviderName = DataSetProviderMestre

DataSourceMestre
Propriedades
  - DataSet = ClientDataSetMestre

Obs.: Inclua os campos no FieldsEditor do ClientDataSet e SQLQuery. Ainda no
FieldsEditor, identifique quais campos compõem a chave (selecione os campos
que compõem a chave e altere a Propriedade ProviderFlags para [pfInWhere,
pfInKey]), para os demais campos (selecione todos e altere a Propriedade
ProviderFlags para [pfInUpdate]).

============================
Componentes Detalhe
============================

SQLQueryDetalhe
Propriedades
  - SQL = Select * From SubMenus Where Cod_Menu = :Cod_Menu
  - DataSouce = DataSourceMestre        (***)
  - SQLConnection = Ao seu componente SQLConnection

Obs.: Informe as propriedades do Param;

DataSetProviderDetalhe
Propriedades
  - DataSet = SQLQueryMestre
  - Options = [poIncFieldProps, poAllowCommandText]
  - UpdateMode = upWhereKeyOnly

ClientDataSetDetalhe
Propriedades
  - ProviderName = DataSetProviderMestre
  - MasterSource = DataSourceMestre (***)
  - MasterFields = (Clique no 3 pontinhos e selecione o campo chave nas duas
tabelas e clique no botão [ Add ] e depois [ OK ]

Obs1.: Clique com o botão direito sobre o componente ClientDataSetDetalhe e
selecione a opção Fetch Params;

Obs2.: Inclua os campos no FieldsEditor do ClientDataSet e SQLQuery. Ainda
no FieldsEditor, identifique quais campos compõem a chave (selecione os
campos que compõem a chave e altere a Propriedade ProviderFlags para
[pfInWhere, pfInKey]), para os demais campos (selecione todos e altere a
Propriedade ProviderFlags para [pfInUpdate]).



Está pronto o seu Máster/Detail sem nenhum código.


Atenciosamente,
Douglas Uesato
www.uesato.eti.br




-----Mensagem original-----
De: delphi-br@yahoogrupos.com.br [mailto:[EMAIL PROTECTED] Em
nome de Ricardo Lima Mariz
Enviada em: quinta-feira, 16 de fevereiro de 2006 17:58
Para: delphi-br@yahoogrupos.com.br; [EMAIL PROTECTED]
Assunto: [delphi-br] Ajuda para resolver um problema com clientdataset.


Olá pessoal!!!

Estou usando o dbexpress com ClientDataSet.

Tenho duas tabelas

Menus(Cod_Menu,Descricao)

SubMenus(Cod_Menu,Cod_SubMenu,Descricao,Autorizado) Autorizado é um campo
boolean que indica se o submenu está autorizado ou não.

Coloquei na tela dois DBGrids, o primeiro tem os dados dos menus e no
segundo contem os dados dos submenus referente ao menu que está selecionado
no DBGrid dos menus, ai a cada vez que o usuario muda a posição do primeiro
DBGrid escolhendo um menu, o DBGrid dos submenus mudam para os submenus do
menu selecionando, no DBGrid do submenus tem a descrição do submenu e um
checkbox para indicar se aquele submenu está autorizado ou não.

O que eu quero é que o usuario possa navegar entre os menus e submenus
alterando o campo Autorizado e no final de tudo clicar em um botão para
salvar a sua configuração, ai que vem o problema.

Primeiro eu tentei fazer tipo um master/detail no evendo AfterScroll da
tabela menus eu coloquei o cogido:

cds_SubMenus.Close;
cds_SubMenus.Params[0].asInteger :=
cds_Menus.FieldByName('COD_MENU').AsInteger;
cds_SubMenus.Open;

Porem dessa forma não funciona o que eu quero, pois se o usuário fizer uma
configuração e depois mudar de menu ele vai perder esse configuração.

Depois eu tentei outra forma, eu trago todos os registros da tabela submenus
e vou fazendo filtros de acordo com o menu selecionado, no evendo
AfterScroll da tabela menus eu coloquei o cogido:

cds_SubMenus.refresh;

E no Evendo FilterRecord do clientdataset faço afiltragem dos submenus.

porem quando fui testar acontece o seguinte, o usuario faz uma configuração
na tabela submenus, mudando o campo autorizado(boolean), e depois vai mudar
pra outro menu(não esqueçam que quero salvar tudo no final, o usuário faz
toda a configuração depois ele salva) tenho que dar um refresh no
cds_Submenus para atualizar o filtro, ai me retorna um erro dizendo que
primeiro eu tenho que dar o apllyupdate para depois dar o refresh.

Alguem tem alguma solução de forma que o usuario possa fazer toda a
configurãção e salvar tudo de uma fez assim que ele terminar de fazer a
configuração.

Desculpe pelo longo texto.

Obrigado


LhHost
Ricardo Lima
 [EMAIL PROTECTED]  



[As partes desta mensagem que não continham texto foram removidas]



-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>


 
Links do Yahoo! Grupos




 









-- 
<<<<< FAVOR REMOVER ESTA PARTE AO RESPONDER ESTA MENSAGEM >>>>>

<*> Para ver as mensagens antigas, acesse:
    http://br.groups.yahoo.com/group/delphi-br/messages

<*> Para falar com o moderador, envie um e-mail para:
    [EMAIL PROTECTED]
 
Links do Yahoo! Grupos

<*> Para visitar o site do seu grupo na web, acesse:
    http://br.groups.yahoo.com/group/delphi-br/

<*> Para sair deste grupo, envie um e-mail para:
    [EMAIL PROTECTED]

<*> O uso que você faz do Yahoo! Grupos está sujeito aos:
    http://br.yahoo.com/info/utos.html

 


Responder a