Findes der en logisk forklaring p� dette:
Jeg skal vise, hvor mange poster, der er i min tabel, der matcher et input.
Et simpelt eksempel fra en onClick event p� en knap
...
Konto := cdsKontoplan.FieldByName('Konto').asInteger;
ibquery1.sql.clear;
ibquery1.sql.add('SELECT ID, konto FROM tblPosteringer WHERE konto =
:konto');
ibquery1.ParamByName('Konto').Value := Konto;
ibquery1.open;
application.message('Der er ' + inttostr(ibquery1.recordcount) + '
poster');
ibquery1.close;
...
Ovenst�ende viser 0 eller 1 poster selvom der faktisk er mellem 1 og 4
poster i min faktiske test tabel afh�ngig af hvilken konto jeg indtaster
som parameter.
Jeg har brugt en IBquery til at foresp�rge.
V�lger jeg at s�tte en datasource p� min ibQuery og derefter s�tte en
DBGrid til datasourcen, s� vises der korrekt 1-4 poster. S� snart jeg
igen fjerner DBGriden fra formen, s� vises igen ukorrekt kun 0-1 post.
> Findes der en logisk forklaring p� dette:
>
> Jeg skal vise, hvor mange poster, der er i min tabel, der matcher et input.
>
> Et simpelt eksempel fra en onClick event p� en knap
>
> ...
> Konto := cdsKontoplan.FieldByName('Konto').asInteger;
> ibquery1.sql.clear;
> ibquery1.sql.add('SELECT ID, konto FROM tblPosteringer WHERE konto =
> :konto');
> ibquery1.ParamByName('Konto').Value := Konto;
> ibquery1.open;
> application.message('Der er ' + inttostr(ibquery1.recordcount) + '
> poster');
> ibquery1.close;
> ...
>
> Ovenst�ende viser 0 eller 1 poster selvom der faktisk er mellem 1 og 4
> poster i min faktiske test tabel afh�ngig af hvilken konto jeg indtaster
> som parameter.
Det er list sv�rt at svare sikkert p� uden at kende opbygningen af din
tabel, og en skitse af indholdet.
Har du pr�vet at �ndre til:
...
ibquery1.sql.add('SELECT count(ID) antal FROM tblPosteringer WHERE
konto =
:konto');
ibquery1.open;
while not ibquery1.eof do
begin
application.message('Der er ' +
inttostr(ibquery1.FieldByName('antal').asInteger) + poster')
next;
end;
...
og se hvad det evt. giver?
--
Michael Haase
Valget af select count() virker.
Jeg har fundet ud af, at det handler om, at en quer ikke n�dvendigvis
henter hele tabellen og giver korrekt visning af recordcount, hvis den
ikke har brug for data.
F�rst n�r den f�r brug f�r data - eksempelvis ved at v�re forbundet til
en dbgrid - s� henter den hele tabellen og kan vise korrekt antal i
recordcount.
> F�rst n�r den f�r brug f�r data - eksempelvis ved at v�re forbundet til
> en dbgrid - s� henter den hele tabellen og kan vise korrekt antal i
> recordcount.
Du kan omformulere det til lidt generelt.
En SQL returnerer aldrig hele resultats�ttet, det skal 'hentes'.
F�rst n�r den sidste record er hentet kendes antallet.
I dit eksempel er det dbgrid'en, der henter helse resultats�ttet.
--
Med venlig hilsen
Stig Johansen