mastersource com registros desconectados??
13/01/2006
0
´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 ..
[b:3b2029b6e9]tabela tbcliente[/b:3b2029b6e9]
codcliente
nmcliente
[b:3b2029b6e9]tabela tbtelefones[/b:3b2029b6e9]
codtelefone
codcliente
numtelefone
na tabela [b:3b2029b6e9]tbtelefones[/b:3b2029b6e9] eu configuro a propriedade mastersource com o datasource que esta ligado a [b:3b2029b6e9]tbcliente[/b:3b2029b6e9]
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 i[b:3b2029b6e9]tbatchoptmistcic[/b:3b2029b6e9] e no evento oncreate do form eu inserisse o seguinte codigo ...
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 ...
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
Rafael Gomes
Posts
13/01/2006
Andrew
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.
13/01/2006
Rafael Gomes
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)
13/01/2006
Rafael Gomes
estou usando ADOTable ...
[]ss
13/01/2006
Martins
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.
16/01/2006
Rafael Gomes
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
Clique aqui para fazer login e interagir na Comunidade :)