Erro no Update
Olá pessoal.
Estou com um lindo problema...
Eu gostaria de saber aonde estou errado.
Criei um Banco de Dados Interbase e coloquei os seguites conponentes.
- IBdataBase, IBTransaction com a propriedade(DefaltAction: TACommitRetaining), UPdateSQL + IBquery(CachedUpdates: true), eu faço a inserçao de dados alteração e saio do sistema quando eu reinicio o sistema os dados aparecem novamente, como se eu não tivesse feito nenhuma alteração.
Estou com um lindo problema...
Eu gostaria de saber aonde estou errado.
Criei um Banco de Dados Interbase e coloquei os seguites conponentes.
- IBdataBase, IBTransaction com a propriedade(DefaltAction: TACommitRetaining), UPdateSQL + IBquery(CachedUpdates: true), eu faço a inserçao de dados alteração e saio do sistema quando eu reinicio o sistema os dados aparecem novamente, como se eu não tivesse feito nenhuma alteração.
Maxsoftware
Curtidas 0
Respostas
Manchinhachiptec
15/04/2003
Você está apenas esquecendo de dar um ´ApplyUpdates´ logos após o posto para daí o aplicativo tira o que tá gravado na memória e grava fisicamente no disco
GOSTEI 0
Afarias
15/04/2003
Cached Updates não é necessário para usar o IBUpdateSQL (IBX)
-- desta forma, evite usar CachedUpdates (vai poupar uma série de problemas)
Abraço
-- desta forma, evite usar CachedUpdates (vai poupar uma série de problemas)
Abraço
GOSTEI 0
Werlon Goulart
15/04/2003
Se mesmo assim vc quiser usar o Cached Updates de um ApplyUpdates(0) depois do Post, pra aplicar as mudanças efetivamente no banco, pois com Cached Updates ativado todas as alterações/inclusoes/exclusoes q forem feitas na estação ficam pendentes na propria estação esperando pra serem aplicadas no Banco no Servidor.
ApplyUpdates(0)= quantidade de registros q ficarao no Buffer aguardando pra serem aplicados. o Zero indica q NENHUM registro fica pendente.
Mas se vc quiser fazer apenas um cadastro normal desabilite o CachedUpdates.
Um Abraço
Werlon Goulart
ApplyUpdates(0)= quantidade de registros q ficarao no Buffer aguardando pra serem aplicados. o Zero indica q NENHUM registro fica pendente.
Mas se vc quiser fazer apenas um cadastro normal desabilite o CachedUpdates.
Um Abraço
Werlon Goulart
GOSTEI 0
Gilberto Brito
15/04/2003
Ola, tenho um servidor com o firebird instalado e configurado corretamente.
Fiz uma aplicacao com os seguintes componentes:
IBDatabase, IBTransaction, IBTable e um DataSource.
Quando altero algum dado na tabela pessoal (tabela que estou testando) essas alteracoes so sao gravadas fisicamente no banco de dados quando executo o comando IBTransaction.Commit, porem esse comando faz com que o IBTransaction seja desconectado (coisa que nao quero).
Se eu executar esses comandos:
IBTable.Post;
IBTable.ApplyUpdates;
IBTable.Refresh;
O banco de dados so ira gravar fisicamente quando eu sair do programa e se a opcao AutoStopAction do IBTransaction for igual a saCommint.
Eu queria saber se tem como fazer isso sem usar comandos de SQL, usando apenas as propriedades dos componentes e sem usar o commando Commit do IBTransaction, pois ele desconecta da base.
OBS: ja setei meu banco de dados para Forced Write = True (deixando assim o banco mais lento e mais seguro).
Fiz uma aplicacao com os seguintes componentes:
IBDatabase, IBTransaction, IBTable e um DataSource.
Quando altero algum dado na tabela pessoal (tabela que estou testando) essas alteracoes so sao gravadas fisicamente no banco de dados quando executo o comando IBTransaction.Commit, porem esse comando faz com que o IBTransaction seja desconectado (coisa que nao quero).
Se eu executar esses comandos:
IBTable.Post;
IBTable.ApplyUpdates;
IBTable.Refresh;
O banco de dados so ira gravar fisicamente quando eu sair do programa e se a opcao AutoStopAction do IBTransaction for igual a saCommint.
Eu queria saber se tem como fazer isso sem usar comandos de SQL, usando apenas as propriedades dos componentes e sem usar o commando Commit do IBTransaction, pois ele desconecta da base.
OBS: ja setei meu banco de dados para Forced Write = True (deixando assim o banco mais lento e mais seguro).
GOSTEI 0
Werlon Goulart
15/04/2003
Os componentes IBX do Delphi fazem realmente isso (fecham o Database quando o Commit acontece).
Isto acontece pq o IBX trata todas as operacoes Insert/Update/Delete dentro de uma transacao apenas, o q faz com q o Database seja fechado quando se aplica a Transacao (Ccommit).
Vc pode usar o CommitRetaining para manter os dados sem fechar o DataBase e os outros clientes na rede verem suas alteracoes.
Mas dai tem um problema, pois as transacoes não são aplicadas de verdade no Banco, ficam em um cache esperando pra serem gravadas quando o acesso ao disco for menor (isso foi feito pra evitar a sobrecarga de acesso ao disco), e se acabar a energia antes destas transacoes serem aplicadas vc perde o q foi feito, sem contar q o banco cresce muito e so um Backup e depois um Restore pode voltar o banco ao seu tamanho normal.
Vc tem q decidir o q usar... Tem varios topicos neste forum com este assunto... De uma olhada antes...
Um Abraço
Werlon Goulart
Isto acontece pq o IBX trata todas as operacoes Insert/Update/Delete dentro de uma transacao apenas, o q faz com q o Database seja fechado quando se aplica a Transacao (Ccommit).
Vc pode usar o CommitRetaining para manter os dados sem fechar o DataBase e os outros clientes na rede verem suas alteracoes.
Mas dai tem um problema, pois as transacoes não são aplicadas de verdade no Banco, ficam em um cache esperando pra serem gravadas quando o acesso ao disco for menor (isso foi feito pra evitar a sobrecarga de acesso ao disco), e se acabar a energia antes destas transacoes serem aplicadas vc perde o q foi feito, sem contar q o banco cresce muito e so um Backup e depois um Restore pode voltar o banco ao seu tamanho normal.
Vc tem q decidir o q usar... Tem varios topicos neste forum com este assunto... De uma olhada antes...
Um Abraço
Werlon Goulart
GOSTEI 0