Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Hvad er den logiske forklaring her

1 view
Skip to first unread message

Michael Sørensen

unread,
Mar 3, 2010, 5:14:24 PM3/3/10
to
Hej.

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.

Michael Haase

unread,
Mar 6, 2010, 8:59:33 AM3/6/10
to
Michael S�rensen skrev dette den 03-03-2010 23:14:

> 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

Michael Sørensen

unread,
Mar 6, 2010, 9:31:17 AM3/6/10
to
Michael Haase skrev:

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.

Stig Johansen

unread,
Mar 6, 2010, 11:50:01 AM3/6/10
to
Michael S�rensen wrote:

> 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

0 new messages