Fórum Atualizar tabela automaticamente #211250
03/02/2004
0
Possuo duas tabelas em Paradox7: [u:de01652107]TabArea[/u:de01652107] e [u:de01652107]TabSetor[/u:de01652107].
[u:de01652107]TabArea[/u:de01652107] possui um campo: [i:de01652107]AreaNome[/i:de01652107]; [u:de01652107]TabSetor[/u:de01652107] possui um campo: [i:de01652107]SetorArea[/i:de01652107].
Estou usando um [i:de01652107]DBLookupComboBox[/i:de01652107] para chamar um dado de [u:de01652107]TabArea [/u:de01652107]e atribuir a [u:de01652107]TabSetor[/u:de01652107].
O problema está na hora de atualizar. Se um dado de [u:de01652107]TabArea[/u:de01652107] for modificado, gostaria que todos fossem alterados automaticamente em [u:de01652107]TabSetor[/u:de01652107], onde fazem referência.
Já tentei a seguinte instrução, que não roda:
....
[b:de01652107]with [/b:de01652107][i:de01652107]QuerySetor[/i:de01652107] [b:de01652107]do[/b:de01652107]
[b:de01652107]Begin[/b:de01652107]
Close;
SQL.Clear;
SQL.Add(´Update [u:de01652107]TabSetor[/u:de01652107]);
SQL.Add(´Set [i:de01652107]SetorArea[/i:de01652107] = [i:de01652107]NovaArea[/i:de01652107]´); // Acho que o problema está aqui!
SQL.add(´Where [i:de01652107]SetorArea[/i:de01652107] Like:Varea´);
Parambyname(´Varea´).value:=[i:de01652107]AntigaArea[/i:de01652107];
open;
[b:de01652107]End[/b:de01652107];
Obs: [i:de01652107]AntigaArea[/i:de01652107] e [i:de01652107]NovaArea[/i:de01652107] são variaveis do tipo String.
Valeu, por qualquer ajuda.
Capristo
Curtir tópico
+ 0Posts
03/02/2004
Rodolpho123
Bem, qual é a ferramenta que você está usando? Se for uma Table, essas alterações são feitas automaticamentes, desde que a propriedade AutoRefresh esteja setada para True, porém, se vc estiver usando uma Query, esta propriedade não funciona, forçando assim o fechamento e depois a abertura da Query para poder ter dados atualizados. Existe també uma propriedade na Query chamada Request Live. Setando esta propriedade para True, a Query deixa de trabalhar com os dados na memória e passa a trabalhar diretamente no BD, como uma Table, permitindo o uso dos eventos Append,Edit,Cancel,Post...etc. Mas se vc rodar o SQL Monitor, vc vai ver que esta opção cria muitas linhas de código, onde compromete um pouco a aplicação, cujo o nosso objetivo é a performance.
Espero tê-lo ajudado
Abraços.......!
Gostei + 0
05/02/2004
Capristo
Aparentemente há dois problemas:
O [b:38fc208c84]segundo[/b:38fc208c84], referente ao código, é que não criei um relacionamento entre as duas tabelas. Originalmente são totalmente distintas. O objetivo do código é atualizar os dados automaticamente, para que o usuário não faça isso na ´unha´, mas é uma instrução que será muito pouco utilizada, pois as atualizações não serão frequentes.
O [b:38fc208c84]primeiro[/b:38fc208c84] é minha inesperiência. Não sou programador e por isso estou apanhando. Participar desse forum é uma das formas que encontrei para melhorar isso.
Valeu de novo.
Gostei + 0
05/02/2004
Bolus
Observando o seu Código, somente inclua os 2 pontos antes do NovaArea
ou seja:
Antes :
with QuerySetor do Begin Close; SQL.Clear; SQL.Add(´Update TabSetor); SQL.Add(´Set SetorArea = NovaArea´); // Acho que o problema está aqui! SQL.add(´Where SetorArea Like:Varea´); Parambyname(´Varea´).value:=AntigaArea; open; End;
Depois, como fica :
with QuerySetor do Begin Close; SQL.Clear; SQL.Add(´Update TabSetor); SQL.Add(´Set SetorArea = :NArea´); // Esta linha foi alterada SQL.add(´Where SetorArea = :Varea´); Parambyname(´Varea´).asString :=AntigaArea; Parambyname(´Narea´).asString :=NovaArea; // Esta linha foi incluida open; End;
Obs.: Quando você sabe o que esta procurando no SQL, nunca coloque o Like, pois ele é mais demorado, sempre utilize o igual (=).
Isso deve resolver seu problema
Gostei + 0
05/02/2004
Capristo
O programa dá a seguinte mensagem de erro:
[color=darkred[b:01dd72ca47]]´Error creating cursor handle.´[/b:01dd72ca47][/color]
Ah! Obrigado pela dica do Like.
Gostei + 0
09/02/2004
Capristo
Gostei + 0
09/02/2004
Tnaires
Gostei + 0
09/02/2004
Wolverine
Amigo, o mais fácil é
Na tabela TabSetor crie um campo Cod_Area, pronto, é so isso, pois, oq estará guardado na TabSetor é o código da TabArea, se vc fizer alteração na tabArea ñ vai influir na TabSetor pq oq interessa é saber qual a sua Área,no caso o Cod_Area, as informações da área estão na TabArea, entao só atualize lá.
(Só armazene na TabSetor os códigos da tabArea)
Gostei + 0
09/02/2004
Djjunior
passe pra um access da vida que é muiiiiiito melhor, mais intuitivo, mais estavel, mais... tudo (isso tudo em comparação somente com paradox por favor não confunda!!)
espero ter ajudado !
Gostei + 0
09/02/2004
Tnaires
Ei galera, ouvi um boato q o Access aceita no máximo 65536 registros, alguém confirma essa informação pra mim?
Gostei + 0
10/02/2004
Capristo
Quando a mudar de BD, é o que pretendo futuramente.
Valeus, à todos !!!
Gostei + 0
10/02/2004
Aroldo Zanela
O único erro aqui foi utilizar Open, quando o correto seria ExecSQL:
with QuerySetor do Begin Close; SQL.Clear; SQL.Add(´Update TabSetor); SQL.Add(´Set SetorArea = :NovaArea´); SQL.add(´Where SetorArea = :Varea´); Parambyname(´Varea´).value:=AntigaArea; Parambyname(´NovaArea´).value:=NovaArea; ExecSQL; // e não open; Open é apenas para SELECT End;
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)