/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Hvad er den logiske forklaring her
Fra : Michael Sørensen


Dato : 03-03-10 23:14

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 (06-03-2010)
Kommentar
Fra : Michael Haase


Dato : 06-03-10 15:00

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 (06-03-2010)
Kommentar
Fra : Michael Sørensen


Dato : 06-03-10 15:31

Michael Haase skrev:
> 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?

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 (06-03-2010)
Kommentar
Fra : Stig Johansen


Dato : 06-03-10 17:50

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

Søg
Reklame
Statistik
Spørgsmål : 177577
Tips : 31968
Nyheder : 719565
Indlæg : 6409070
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste