Usando IBDataSet da Paleta Interbase - Delphi 5

Firebird

08/04/2003

Bom dia pessoal,
Estou usando ibdataset do interbase e quando gravo alguma coisa, além de não efetivar a gravação quando eu dou um ibtransation.commit, o ibdataset é fechado e a ibtransation.active fica falso. Alguém sabe por que?
Obrigada
Mariangela


Anonymous

Anonymous

Curtidas 0

Respostas

Afarias

Afarias

08/04/2003

>> Estou usando ibdataset do interbase e quando gravo alguma coisa,
>> além de não efetivar a gravação

Vc deve preencher corretamente as propriedades INSERTSQL, UPDATESQL e DELETESQL -- clique com o botão direito no IBDataset e então no menu Dataset Editor para usar o ´assistente´ para isso.

>> quando eu dou um ibtransation.commit, o ibdataset é fechado e a
>> ibtransation.active fica falso. Alguém sabe por que?

Isso é normal. O Interbase precisa de um transação aberta mesmo para seleção de registros. o COMMIT (ou ROLLBACK) fecha a transação e ai, todos os Datasets são fechados.

Vc pode sempre usar o COMMITRETAINING ou ROLLBACKRETAINING q gravam as alterações mas não fecham a transação!

Agora, é sempre bom, usar o COMMIT vez em quando (manter transações abertas por longos períodos não é muito bom)

Abraço.


GOSTEI 0
Anonymous

Anonymous

08/04/2003

Obrigada, afarias, eu usava o BDE, estou tentando colocar o ibx agora, por isso estou com tantas dúvidas.
Se vc puder me ajudar de novo, agradeço muito, é o seguinte:
a propriedade modifySQL está assim:
UPDATE CLIENTES
SET CPF_CGC = :CPF_CGC,
NOME_CLIENTE = :NOME_CLIENTE,
ENDERECO = :ENDERECO,
BAIRRO = :BAIRRO,
CIDADE = :CIDADE,
CEP = :CEP,
EMAIL = :EMAIL,
LOCAL_TRABALHO = :LOCAL_TRABALHO,
FONE_TRABALHO = :FONE_TRABALHO,
RAMAL_TRABALHO = :RAMAL_TRABALHO,
NOME_PAI = :NOME_PAI,
NOME_MAE = :NOME_MAE,
RG = :RG,
FONE_RESIDENCIAL = :FONE_RESIDENCIAL,
FAX = :FAX,
CELULAR = :CELULAR,
DT_NASC = :DT_NASC,
INSCR_ESTADUAL = :INSCR_ESTADUAL,
INSCR_MUNICIPAL = :INSCR_MUNICIPAL,
COD_CLIENTE = :COD_CLIENTE,
UF = :UF,
RENDA_MENSAL = :RENDA_MENSAL,
SEXO = :SEXO,
FISICA_JURIDICA = :FISICA_JURIDICA,
COD_USUARIO = :COD_USUARIO,
DT_CADASTRO = :DT_CADASTRO,
HR_MN_CADASTRO = :HR_MN_CADASTRO
WHERE CPF_CGC = :CPF_CGC

sendo que a chave primaria é cpf_cgc.
Qdo eu gravo (post, applyupdates e comitretaining) e chamo de novo o mesmo cpf, ele não mostra os outros dados na tela, mas mostra um grid de uma tabela que é relacionada a essa com os dados corretos, portanto ele encontra o registro. Aí eu fecho o form (no fechar tem um commit e um start transacao) entro de novo, chamo o mesmo registro e ele não alterou nada.
Você tem uma idéia do que pode estar errado?
Obrigada
Mariangela


GOSTEI 0
Afarias

Afarias

08/04/2003

>> eu usava o BDE, estou tentando colocar o ibx agora

FAZ BEM (na minha opinião)

>> é o seguinte: a propriedade modifySQL está assim:
>> sendo que a chave primaria é cpf_cgc.

UPDATE CLIENTES
SET CPF_CGC = :CPF_CGC,
NOME_CLIENTE = :NOME_CLIENTE,
{etc...}
WHERE CPF_CGC = :CPF_CGC // erro!

acho q vc se enganou: o WHERE é:

WHERE CPF_CGC = :OLD_CPF_CGC


OK?! e mais:

Como é o SELECT ??? Existe JOIN?? se sim, vc terá q fechar/abrir a query!!

E, NO IBX, NÃO USE CACHEDUPDATES!!


Abraço!


GOSTEI 0
POSTAR