Array
(
)

mastersource com registros desconectados??

Rafael Gomes
   - 13 jan 2006

bom pessoal é o seguinte ...

´frequentemente vc precisa relacionar tabelas, as quais tem um relacionamento de um para muitos, isso significa que para um unico registro da tabela1 vc pode ter N registros na tabela2 ... ´

o delphi oferece suporte a isso com as estruturas mestre-detalhe ...

no ado, creio que a propriedade que corresponde a isso é o mastersource ...

imaginem a seguinte estrutura ..

tabela tbcliente

codcliente
nmcliente

tabela tbtelefones

codtelefone
codcliente
numtelefone

na tabela tbtelefones eu configuro a propriedade mastersource com o datasource que esta ligado a tbcliente

logo apos configuro a propriedade masterfields com o valor ´codcliente´ pq é o campo comum as 2 tabelas ...

dessa forma o delphi faz todo o trabalho para mim .. quando eu inserir um cliente na tabela tbcliente e logo depois inserir seus respctivos telefones o delphi ja faz o relacionamento e insere o codigo do cliente na tabela de telefones ... até aqui tudo bem ...

para que o esquema acima funcione tenho que estar conectado o tempo todo no BD ...

mas se eu pro exemplo, quiser trabalhar com registros desconectados essa tecnica nao funciona ...

imaginem as mesmas tabelas acima ,só que configuradas com a propriedade locktype como itbatchoptmistcic e no evento oncreate do form eu inserisse o seguinte codigo ...


#Código

CONEXAO.Connected:= TRUE;
CLIENTE.Active:= TRUE;
TELEFONE.Active:= TRUE;

CLIENTE.Connection:=NIL;
TELEFONE.Connection:= NIL;
CONEXAO.CONNECTED:= FALSE;



e teria um botao com o seguinte codigo para aplicar as alteracoes ...

#Código
CONEXAO.Connected:= TRUE;
CLIENTE.Connection:= CONEXAO;
TELEFONE.Connection:= CONEXAO;

TRY
CLIENTE.UpdateBatch;
TELEFONE.UpdateBatch;
FINALLY
CLIENTE.Connection:=NIL;
TELEFONE.Connection:= NIL;
CONEXAO.CONNECTED:= FALSE;
END;



dessa forma eu conecto apenas para gravar os dados alterados ...
porem, estando desconectado o campo codcliente da tabela cliente nao recebe nenhum valor pois é do tipo autoincremento .. ele somente recebe valor quando eu aplico as alteracoes no banco ... isso impossibilita de gravar o campo codcliente na tabela telefone fazendo com que o registro fique perdido ...

nao ficando conectado como mostrei acima, como posso utilizar da propriedade mastersource???

[]ss


Andrew
   - 13 jan 2006

Não sou o Martins, mas vou me intrometer um pouco ok! :)

Eu particularmente acredito que sem está conectado com Banco de Dados é meio complicado de se fazer, nunca fiz nada parecido, mas lhe pergunto uma coisa, vc já trrabalhou com Inner Join, acho que com ADOQuery daria para fazer algo assim.

Martins aquele código de consulta usando ADOQuery que você passou para nós pelo MSN não daria para ser adaptado para esta finalidade?

Pessoal usando ADOQuery daria para fazer o q o colega deseja? Sim ou Não?


Só minha opnião!!

PS: Martins nosso provedor (internet via rádio) tá horrível hoje hein.


Rafael Gomes
   - 13 jan 2006

opa, nao se preocupe, espero a contibuico de todos para resolver o problema ...

a respeito dos registros desconectados, eu acho que é possivel sim, porem gostaria de saber se alguem ja fez isso ... ou se olhando o que eu disse teria alguma ideia para faze-lo ...

tenho interesse em fazer isso por questoes de desempenho da rede ... pq vou estar conectado somente na hora de atualizar os dados ...

enfim, aguardo contribuicoes dos colegas do forum!! 8)


Rafael Gomes
   - 13 jan 2006

só para completar ... nao estou usando ADOQuery pois o componente nao possui a propriedade MasterSource nem a masterfields

estou usando ADOTable ...

[]ss


Martins
   - 13 jan 2006

Andew, aquele caso era meio diferente desses, vcs ali precisavam obter dados de três tabelas para exibir em um grid ou relatório nao lembro bem.

Vejamos, vc vai se conectar a base de dados somente para gravar informações, editar, excluir é isso, e vc está usando Master-Detail, é mais ou menos isso?

Quase não usei Master-Detail, pois sempre preferi trabalhar com SQL, mas podemos tentar encontrar uma solução para esse caso.


Rafael Gomes
   - 16 jan 2006

certo martins, voce poderia me dar uma luz?
para usar SQL terei que usar ADOQuery??
e que instrucao seria essa?? veja, usando mastersource eu automatizo as operacoes entre as 3 tabelas, e quem controla isso é o proprio delphi ... como eu faria mesmo atraves de instrucoes SQL??

alias, aproveitando o topico ... qual a diferença entre o ADODataSet e a ADOQuery ... ambos me permitem executar instrucoes SQL??


[]sss


Rafael Gomes
   - 17 jan 2006

up,

pessoal deem um help ai ....

abraços!!