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