Avatar billede skindbeni Nybegynder
04. marts 2010 - 18:38 Der er 5 kommentarer og
1 løsning

RecordCount i en query

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.
Avatar billede arne_v Ekspert
04. marts 2010 - 18:46 #1
Jeg kender ikke noget til IBQuery men det lyder som det samme fænomen som kendes i andre database sammenhænge.

Client laver en:
  SELECT * FROM tabel

Men den ved ikke hvormange rækker der er, fordi serveren sender ikke rækkerne førend der er brug for dem.

Potentielt kunne der være 100 GB data, så client vil ikke forsøge at hente det hele og gemme i memory.

DBgrid kunne forårsage at alle rækker blev hentet.

Det er kun en hypotese. Men ikke en dårlig en af slagsen.
Avatar billede erikjacobsen Ekspert
04. marts 2010 - 18:46 #2
Recordcount er ikke en funktion, der nødvendigvis er implementeret korrekt. For at kunne vise den korrekte record-count, skal alle rækker være læst igennem, som når du bruger DBGrid. Og det gør man ikke altid - effektivitetshensyn.

Du kan enten spadsere alle rækker igennem i en løkke, så passer den (eller du kan tælle selv).

Men hvis du kun skal bruge antallet, vil en SELECT COUNT(....) ... være bedre.
Avatar billede erikjacobsen Ekspert
04. marts 2010 - 18:47 #3
(og det er baseret på de samme gisninger - læs: erfaring - som Arne skriver om)
Avatar billede skindbeni Nybegynder
04. marts 2010 - 20:46 #4
Hej.

Det virker. Vil i smide svar, så skal i blive velfortjent belønnet
Avatar billede arne_v Ekspert
04. marts 2010 - 20:52 #5
svar
Avatar billede erikjacobsen Ekspert
04. marts 2010 - 21:03 #6
Ingen point til mig, tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester