RecordCount dando erro
Tenho uma variável pública que deve receber o ´RecordCount´ de uma tabela, para em seguida ser usada como fonte para um auto-incremento.
o problema é que o RecordCount da tabela está retornando o valor errado.
A tabela possui 3 registros cadastrados (já verifiquei até pelo IBConsole) e a variável continua recebendo 0.
PS: a tabela possui um filtro, mas o filtro só é ativado após a variável receber o valor do recordcount.
PS2: a tabela e todo meu banco de dados é Interbase (*.gdb)
o problema é que o RecordCount da tabela está retornando o valor errado.
A tabela possui 3 registros cadastrados (já verifiquei até pelo IBConsole) e a variável continua recebendo 0.
PS: a tabela possui um filtro, mas o filtro só é ativado após a variável receber o valor do recordcount.
PS2: a tabela e todo meu banco de dados é Interbase (*.gdb)
Demytrius
Curtidas 0
Respostas
Steve_narancic
15/06/2009
depois do open, tente dar um FETCHALL
GOSTEI 0
Danielrsanches
15/06/2009
certifique-se de que vc não está tentando obter o valor de RecordCount com a tabela fechada ... nesse caso será retornado apenas o 0 mesmo ... se a tabela já está aberta, tente testar o filtro que está fazendo, para ver se está realmente correto e retornando registros...
abraços !!
abraços !!
GOSTEI 0
Demytrius
15/06/2009
qual é a sintaxe para o fetchall?
GOSTEI 0
Pestana_
15/06/2009
que componentes de acesso a dados você esta utilizando?
GOSTEI 0
Demytrius
15/06/2009
IBDatabase
IBTable
DataSource
IBTransaction
PS: tenho um IBQuery e um Datasource para este query mas não utilizo para fazer os filtros, apenas para mostrar algumas informações selecionadas em um dbgrid.
IBTable
DataSource
IBTransaction
PS: tenho um IBQuery e um Datasource para este query mas não utilizo para fazer os filtros, apenas para mostrar algumas informações selecionadas em um dbgrid.
GOSTEI 0
Pestana_
15/06/2009
então se você quer saber a quantidade ´exata´ de registros retornado pelo IBQuery você precisa fazer o FetchAll como o steve_narancic já citou!
isso é necessário porque o IBQuery não traz todos os registros para memória de uma única vez, os registros são trazidos aos poucos. Este é o motivo que o retorno de um select é muito rápido. Agora se você fizer um FetchAll você esta forçando o componente a trazer todos os registro para memoria, mas o sistema sofrerá com a performance, a menos que seja poucos registros retornado!
IBQuery.FetchAll
isso é necessário porque o IBQuery não traz todos os registros para memória de uma única vez, os registros são trazidos aos poucos. Este é o motivo que o retorno de um select é muito rápido. Agora se você fizer um FetchAll você esta forçando o componente a trazer todos os registro para memoria, mas o sistema sofrerá com a performance, a menos que seja poucos registros retornado!
GOSTEI 0
Pestana_
15/06/2009
já estava me esquecendo o método tem que ser chamado logo apos ter aberto a query.
IBQuery.Open; IBQuery.FetchAll
GOSTEI 0
Demytrius
15/06/2009
Mas eu não utilizo a query no cadastramento dos registros. o filtro é feito diretamente na tabela
variavel := datamodule.ibtable.recordcount;
datamodule.ibtable.filter := ´´
datamodule.ibtable.filtered := true;
variavel := datamodule.ibtable.recordcount;
datamodule.ibtable.filter := ´´
datamodule.ibtable.filtered := true;
GOSTEI 0