inner join é atualizável ?
Olá
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
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
Curtidas 0
Respostas
Gandalf.nho
16/09/2004
Não é diretamente atualizável, no meu caso, eu crio uma view e crio as triggers necessárias na view (BEFORE INSERT, BEFORE UPDATE e BEFORE DELETE) que atualizam a tabela base da view. Aí funciona legal. Inclusive eu tirei essa idéia da própria documentação do Interbase.
GOSTEI 0
Afarias
16/09/2004
A citação da gandalf.nho é uma solução, mas da forma q vc está fazendo tb funciona (para atualização de apenas 1 das tabelas).
Então, qual a menssagem de erro exatamente q ocorre e qual o seu código de update (SQL)?
T+
Então, qual a menssagem de erro exatamente q ocorre e qual o seu código de update (SQL)?
T+
GOSTEI 0
Sanses
16/09/2004
Olá A.Farias
O código da query qemprestimos é o seguinte:´
E o código do ibupdatesql para inserir, atualizar e etc eu exclui os itens da tabela clientes, ficando assim:
Se puder me ajudar agradeço. Não consegui resolver sozinho.
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
Sanses
16/09/2004
Ah sim, acabei esquecendo. O erro que dá diz que a query qemprestimos está fechada(not edit or insert mode). Mas eu a abro junto com o formulário para realizar a pesquisa. Outra coisa uso tedits e não dbedits, portanto paso os valores a serem atualizados manualmente, mas esta parte esta correta.
Sanses
Sanses
GOSTEI 0
Afarias
16/09/2004
quanto aos comandos SQL está tudo OK, post aqui o seu código Delphi da gravação para ver...
...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+
...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
Sanses
16/09/2004
Olá AFarias
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
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