mastersource com registros desconectados??
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 ..
[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 ...
e teria um botao com o seguinte codigo para aplicar as alteracoes ...
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
´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
Curtidas 0
Respostas
Andrew
13/01/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.
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.
GOSTEI 0
Rafael Gomes
13/01/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)
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)
GOSTEI 0
Rafael Gomes
13/01/2006
só para completar ... nao estou usando ADOQuery pois o componente nao possui a propriedade MasterSource nem a masterfields
estou usando ADOTable ...
[]ss
estou usando ADOTable ...
[]ss
GOSTEI 0
Martins
13/01/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.
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.
GOSTEI 0
Rafael Gomes
13/01/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
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
GOSTEI 0
Rafael Gomes
13/01/2006
up,
pessoal deem um help ai ....
abraços!!
pessoal deem um help ai ....
abraços!!
GOSTEI 0