RecordCount dando erro

Delphi

15/06/2009

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)


Demytrius

Demytrius

Curtidas 0

Respostas

Steve_narancic

Steve_narancic

15/06/2009

depois do open, tente dar um FETCHALL


GOSTEI 0
Danielrsanches

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 !!


GOSTEI 0
Demytrius

Demytrius

15/06/2009

qual é a sintaxe para o fetchall?


GOSTEI 0
Pestana_

Pestana_

15/06/2009

que componentes de acesso a dados você esta utilizando?


GOSTEI 0
Demytrius

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.


GOSTEI 0
Pestana_

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!

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_

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

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;


GOSTEI 0
POSTAR