Fórum inner join é atualizável ? #46723
16/09/2004
0
Tenho uma ibquery devidamente ligada a um datasource e um ibipdatesql.
Quando abro o form, ativo a query que faz uma consulta em duas tabelas(que não estão relacionadas com chve estrangeira). Mas no código do ibupdatesql, eu exclui os campos da segunda tabela para atualizar só o que é preciso, porém dá erro dizendo que o dataset está fechado, mas está aberto. O código sql tem inner join, será que é por isso que não atualiza? inner join é atualizável ?
Obrigado
Sanses
Sanses
Curtir tópico
+ 0Posts
16/09/2004
Gandalf.nho
Gostei + 0
17/09/2004
Afarias
Então, qual a menssagem de erro exatamente q ocorre e qual o seu código de update (SQL)?
T+
Gostei + 0
18/09/2004
Sanses
O código da query qemprestimos é o seguinte:´
select E.IDEMPRESTIMO, E.ENCHEUQUE, E.EMDESCRICAO, E.EMESPECIE, E.EMVALOR, E.IDCLIENTE, C.NOME, C.ID FROM EMPRESTIMO E INNER JOIN CLIENTES C ON E.IDCLIENTE = C.ID
E o código do ibupdatesql para inserir, atualizar e etc eu exclui os itens da tabela clientes, ficando assim:
insert into EMPRESTIMO (IDEMPRESTIMO, EMCHEQUE, EMDESCRICAO, EMESPECIE, EMVALOR, IDCLIENTE) values (:IDEMPRESTIMO, :EMCHEQUE, :EMDESCRICAO, :EMESPECIE, :EMVALOR, :IDCLIENTE) ///////////////////////// update EMPRESTIMO set IDEMPRESTIMO = :IDEMPRESTIMO, EMCHEQUE = :EMCHEQUE, EMDESCRICAO = :EMDESCRICAO, EMESPECIE = :EMESPECIE, EMVALOR = :EMVALOR, IDCLIENTE = :IDCLIENTE where IDEMPRESTIMO = :OLD_IDEMPRESTIMO
Se puder me ajudar agradeço. Não consegui resolver sozinho.
Sanses
Gostei + 0
18/09/2004
Sanses
Sanses
Gostei + 0
18/09/2004
Afarias
...mas pra adiantar, verifique se o DataSet não está realmente fechado, colocando um código tipo: ´if not IBDataSet1.Active then ...´
e lembre q quando vc usa COMMIT ou ROLLBACK, todos os DataSets da transação em questão são fechados.
T+
Gostei + 0
19/09/2004
Sanses
Bem, quando abro o form, a query já inicia a transaçãocom o sql dela. Esta transação só é finalizada quando o form é fechado. para gravar os dados uso:
dm.qemprestimo.insert;
dm.qemprestimoemdescricao.value:=edit1.text;
...
...
dm.qemprestimo.post;
dm.ibtransaction1.commitretaining;
Se estivesse usando apenas commit, poderia fechar e ai receberia a mensagens de erro. mas não é o caso. E mesmo que fosse, aconteceria da segunda vez em diante pois na primeira vez que atualizo inicio a transação e não a fecho até que a primeir atualização seja efetuada.
Obrigado pela atenção!
Sanses
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)