Re: [delphi-br] Atualizar apenas um registro de um CDS

2009-10-26 Por tôpico Magnun Oliveira
cara tentei com o refresh record e nao rolou.

um bom exemplo pra ilustra a situação seria.


tabela de cidades: id_cidade, cidade, id_estado
tabela de estados id_estado, estado, uf

exibicao da listagem de cidades (cidade, estado, uf)

São Paulo - São Paulo - SP
Nova Iguaçu - Rio de Janeiro - RJ
Belo Horizonte - Minas Gerais - MG
etc ..

essa listagem obtenho fazendo um select nas cidades e um inner join nos
estados. E marcando os campos da tabela estados como Hidden, para nao
entrarem no sql de inserção, alteração e exclusao do CDS. No caso esse eh o
cds CIDADES.

criei um form de edição com um cds para selecionar um estado, com um
parametro de entrada id_estado. No momento que dou um edit no cds_Cidades,
passo o ID_Estado como parametro e abro o CDS dos estados.

tudo funciona OK.

Porem se por acaso eu selecionar a terceira linha, alterar o nome do estado
de Minas Gerais, para MINAS, e gravar, ele faz a alteração corretamente no
banco, porem como o campo ESTADO no cds CIDADES é um resultado de Join, ele
soh exibirá o valor MINAS quando eu der um refresh nesse cds de CIDADES.

pra fazer um teste, coloquei um botao com o comando
cds_Cidades.RefreshRecord;  fiz esse processo de alteração e executei esse
comando, nao aconteceu nada.
no processo de inserção, apos o apply, rodei o comando e dah a mensagem:
record not found or changed by anothe user, conferi os dados direto no
banco e estavam inseridos corretamente,

alguem sabe como fazer esse refresh em apenas uma linha do cds ?

vlw


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



Re: [delphi-br] Atualizar apenas um registro de um CDS

2009-10-22 Por tôpico berdamzinho
o refreshrecord n faz isso ??

Magnun Oliveira escreveu:
  

 vlw velho, mas acho q vc nao entendeu ...

 o SQL tah certo, tah funcionando tudo OK.

 Quando abro o ClientDataSet os registros sao mostrados normalmente.
 Quando excluo o registro tudo OK.
 Quando altero o registro ou insiro um novo tudo OK tmb. Os dados sao
 manipulados normalmente.

 O que ocorre é que o ClientDataSet somente pega os o valor dos campos que
 fazem parte do JOIN no momento do refresh.

 Como no ClientDataSet usa-se ApplyUpdates, acredito que ele apenas envie o
 conteudo do datapacket para o servidor, nao retornando os dados, pois 
 seria
 desnecessario jah que eles estao em memoria.

 Com isso, apos o apply, os campos do Inner ficam em branco. Se vc 
 adicionar
 campo com o ID da FK, percebe-se que ele é preenchido com o valor,
 normalmente, porem os campos exibidos pelo JOIN soh serão atualizados no
 proximo refresh.

 2009/10/21 Sil-jo Evsan siljoev...@gmail.com 
 mailto:siljoevsan%40gmail.com

 
 
  Boa Tarde!
  Utilize LEFT JOIN exemplo
  select PRODUTOS.NOME, PRODUTOS.DESCRICAO, TIPO_PRODUTOS.TIPO
  from PRODUTOS
  left join TIPO_PRODUTOS on PRODUTOS.ID_TIPO = TIPO_PRODUTOS.ID_TIPO
 
  Abraços,
  2009/10/21 Magnun Oliveira magnunolive...@gmail.com 
 mailto:magnunoliveira%40gmail.commagnunoliveira%40gmail.com
  
 
 
 

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

 

-- 

Uberdam Cavaletti
Programador Delphi
Formado em Tecnologia da Informação
Pós-graduado em desenvolvimento Java.
Professor Tópicos Especias em BD - Unoesc Xanxerê
Professor Estruturas de Dados- Unoesc Xanxerê

http://buscatextual.cnpq.br/buscatextual/visualizacv.jsp?id=K4251629Y0




[delphi-br] Atualizar apenas um registro de um CDS

2009-10-21 Por tôpico Magnun Oliveira
Bom dia, tenho uma aplicação onde uso clientdataset com campos no inner
join.

Um bom exemplo seria uma tabela de produtos com o ID_TIPO do produto sendo
exibido.

select PRODUTOS.NOME, PRODUTOS.DESCRICAO, TIPO_PRODUTOS.TIPO
from PRODUTOS
inner join TIPO_PRODUTOS on PRODUTOS.ID_TIPO = TIPO_PRODUTOS.ID_TIPO
etc .. etc...

fiz as ligações, defini como Hidden o Campo TIPO, fiz inserções, alterações
e exclusões, tudo funcionando OK.

A ideia é nao usar lookup, pois tem varios campos alem desse TIPO entao
decidi fazer assim, com inner.

O problema é que os valores dos campos do Inner, somente são preenchidos
apos o refresh.
Se eu inserir um novo produto o campo tipo ficará em branco, enquanto eu nao
der um refresh no CDS.

A principio penso que um refresh sempre apos uma inclusao ou alteracao
nesses campos, seria ruim, pois cairia drasticamente o tempo de resposta em
um ambiente de rede.

Alguem jah passou por isso e tem uma solucao ?

vlw.


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



Re: [delphi-br] Atualizar apenas um registro de um CDS

2009-10-21 Por tôpico Sil-jo Evsan
Boa Tarde!
Utilize LEFT JOIN exemplo
select PRODUTOS.NOME, PRODUTOS.DESCRICAO, TIPO_PRODUTOS.TIPO
from PRODUTOS
left join TIPO_PRODUTOS on PRODUTOS.ID_TIPO = TIPO_PRODUTOS.ID_TIPO

Abraços,
2009/10/21 Magnun Oliveira magnunolive...@gmail.com



 Bom dia, tenho uma aplicação onde uso clientdataset com campos no inner
 join.

 Um bom exemplo seria uma tabela de produtos com o ID_TIPO do produto sendo
 exibido.

 select PRODUTOS.NOME, PRODUTOS.DESCRICAO, TIPO_PRODUTOS.TIPO
 from PRODUTOS
 inner join TIPO_PRODUTOS on PRODUTOS.ID_TIPO = TIPO_PRODUTOS.ID_TIPO
 etc .. etc...

 fiz as ligações, defini como Hidden o Campo TIPO, fiz inserções, alterações
 e exclusões, tudo funcionando OK.

 A ideia é nao usar lookup, pois tem varios campos alem desse TIPO entao
 decidi fazer assim, com inner.

 O problema é que os valores dos campos do Inner, somente são preenchidos
 apos o refresh.
 Se eu inserir um novo produto o campo tipo ficará em branco, enquanto eu
 nao
 der um refresh no CDS.

 A principio penso que um refresh sempre apos uma inclusao ou alteracao
 nesses campos, seria ruim, pois cairia drasticamente o tempo de resposta em
 um ambiente de rede.

 Alguem jah passou por isso e tem uma solucao ?

 vlw.

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

  




-- 
Sil-jo Evsan
Jedi Knight/System Analyst/Developer
Remember... the force will be with you, always!


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



Re: [delphi-br] Atualizar apenas um registro de um CDS

2009-10-21 Por tôpico Magnun Oliveira
vlw velho, mas acho q vc nao entendeu ...

o SQL tah certo, tah funcionando tudo OK.

Quando abro o ClientDataSet os registros sao mostrados normalmente.
Quando excluo o registro tudo OK.
Quando altero o registro ou insiro um novo tudo OK tmb. Os dados sao
manipulados normalmente.

O que ocorre é que o ClientDataSet somente pega os o valor dos campos que
fazem parte do JOIN no momento do refresh.

Como no ClientDataSet usa-se ApplyUpdates, acredito que ele apenas envie o
conteudo do datapacket para o servidor, nao retornando os dados, pois seria
desnecessario jah que eles estao em memoria.

Com isso, apos o apply, os campos do Inner ficam em branco. Se vc adicionar
campo com o ID da FK, percebe-se que ele é preenchido com o valor,
normalmente, porem os campos exibidos pelo JOIN soh serão atualizados no
proximo refresh.


2009/10/21 Sil-jo Evsan siljoev...@gmail.com



 Boa Tarde!
 Utilize LEFT JOIN exemplo
 select PRODUTOS.NOME, PRODUTOS.DESCRICAO, TIPO_PRODUTOS.TIPO
 from PRODUTOS
 left join TIPO_PRODUTOS on PRODUTOS.ID_TIPO = TIPO_PRODUTOS.ID_TIPO

 Abraços,
 2009/10/21 Magnun Oliveira 
 magnunolive...@gmail.commagnunoliveira%40gmail.com
 





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