/ 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
Tælle antallet af poster i en query
Fra : Ukendt


Dato : 16-07-08 20:20

Hej.

Jeg kan ikke lige gennemskue, hvad jeg gør galt her.

Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at
bestemme, om den er tom, har en post eller har mere end 1 post og skriver
derfor:

begin
query1.open;
case query1.recordCount of
0 : showMessage('0');
1: showMessage('1');
else ShowMessagge('2 eller derover')
end;
query1.close;
end;

I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
visuelt bliver vist i en grid for at vise hvor mange poster jeg rent faktisk
har, men uanset hvad bliver resultatet "1" i min showMessage.



 
 
Thomas Eg Jørgensen (17-07-2008)
Kommentar
Fra : Thomas Eg Jørgensen


Dato : 17-07-08 11:28

"Michael Sørensen" <.> skrev i en meddelelse
news:487e43d2$0$27370$ba624c82@nntp06.dk.telia.net...
> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at
> bestemme, om den er tom, har en post eller har mere end 1 post og skriver
> derfor:
>
> begin
> query1.open;
> case query1.recordCount of
> 0 : showMessage('0');
> 1: showMessage('1');
> else ShowMessagge('2 eller derover')
> end;
> query1.close;
> end;
>
> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
> visuelt bliver vist i en grid for at vise hvor mange poster jeg rent
> faktisk har, men uanset hvad bliver resultatet "1" i min showMessage.

Hvordan ser din SQL ud?

/Thomas



Ukendt (17-07-2008)
Kommentar
Fra : Ukendt


Dato : 17-07-08 12:57

"Thomas Eg Jørgensen" <thomas@killspam.notaplan.com> skrev i en meddelelse
news:487f1ec4$0$90266$14726298@news.sunsite.dk...
> "Michael Sørensen" <.> skrev i en meddelelse
> news:487e43d2$0$27370$ba624c82@nntp06.dk.telia.net...
>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at
>> bestemme, om den er tom, har en post eller har mere end 1 post og skriver
>> derfor:
>>
>> begin
>> query1.open;
>> case query1.recordCount of
>> 0 : showMessage('0');
>> 1: showMessage('1');
>> else ShowMessagge('2 eller derover')
>> end;
>> query1.close;
>> end;
>>
>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
>> visuelt bliver vist i en grid for at vise hvor mange poster jeg rent
>> faktisk har, men uanset hvad bliver resultatet "1" i min showMessage.
>
> Hvordan ser din SQL ud?

Den er simpel

Select * from TABELNAVN



Ukendt (17-07-2008)
Kommentar
Fra : Ukendt


Dato : 17-07-08 13:00

"Michael Sørensen" <.> skrev i en meddelelse
news:487e43d2$0$27370$ba624c82@nntp06.dk.telia.net...
> Hej.
>
> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>
> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at
> bestemme, om den er tom, har en post eller har mere end 1 post og skriver
> derfor:
>
> begin
> query1.open;
> case query1.recordCount of
> 0 : showMessage('0');
> 1: showMessage('1');
> else ShowMessagge('2 eller derover')
> end;
> query1.close;
> end;
>
> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
> visuelt bliver vist i en grid for at vise hvor mange poster jeg rent
> faktisk har, men uanset hvad bliver resultatet "1" i min showMessage.

Sætter jeg en datasetprovider og ClientDataSet på IBQuery'en og vælger at
ændre query1 til clientdataset1 (.open, .recordCount og .close), så virker
det fint, men er lidt af den holdning, at det er noget møg at bruge disse
komponenter, hvor jeg reelt ikke har brug for dem.



fix (20-07-2008)
Kommentar
Fra : fix


Dato : 20-07-08 13:33

Michael Sørensen wrote:
> "Michael Sørensen" <.> skrev i en meddelelse
> news:487e43d2$0$27370$ba624c82@nntp06.dk.telia.net...
>> Hej.
>>
>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>
>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug
>> for at bestemme, om den er tom, har en post eller har mere end 1
>> post og skriver derfor:
>>
>> begin
>> query1.open;
>> case query1.recordCount of
>> 0 : showMessage('0');
>> 1: showMessage('1');
>> else ShowMessagge('2 eller derover')
>> end;
>> query1.close;
>> end;
>>
>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query,
>> som visuelt bliver vist i en grid for at vise hvor mange poster jeg
>> rent faktisk har, men uanset hvad bliver resultatet "1" i min
>> showMessage.
det skulle vel ikke være fordi ShowMessage i else er stavet forkert??
finn



Ukendt (21-07-2008)
Kommentar
Fra : Ukendt


Dato : 21-07-08 17:50

"fix" <fix@faxe.dk> skrev i en meddelelse
news:48833060$0$56785$edfadb0f@dtext02.news.tele.dk...
> Michael Sørensen wrote:
>> "Michael Sørensen" <.> skrev i en meddelelse
>> news:487e43d2$0$27370$ba624c82@nntp06.dk.telia.net...
>>> Hej.
>>>
>>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>>
>>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug
>>> for at bestemme, om den er tom, har en post eller har mere end 1
>>> post og skriver derfor:
>>>
>>> begin
>>> query1.open;
>>> case query1.recordCount of
>>> 0 : showMessage('0');
>>> 1: showMessage('1');
>>> else ShowMessagge('2 eller derover')
>>> end;
>>> query1.close;
>>> end;
>>>
>>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query,
>>> som visuelt bliver vist i en grid for at vise hvor mange poster jeg
>>> rent faktisk har, men uanset hvad bliver resultatet "1" i min
>>> showMessage.
> det skulle vel ikke være fordi ShowMessage i else er stavet forkert??
> finn

Desværre.

Det er mig, der har skrevet forkert herinde, da jeg ikke lige copy-pastede.

Som sagt, ændrer jeg det fra en IBQuery til at gå gennem en ClientDataSet
med samme kode, så fugnerer det.



Michael Vilhelmsen (22-07-2008)
Kommentar
Fra : Michael Vilhelmsen


Dato : 22-07-08 07:57

Michael Sørensen wrote :
> Hej.
>
> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>
> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at bestemme, om den er tom, har en post eller har mere end 1 post og skriver derfor:
>
> begin
> query1.open;
> case query1.recordCount of
> 0 : showMessage('0');
> 1: showMessage('1');
> else ShowMessagge('2 eller derover')
> end;
> query1.close;
> end;
>
> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som visuelt bliver vist i en grid for at vise hvor mange poster jeg rent faktisk har, men uanset hvad bliver resultatet "1" i min
> showMessage.



Hvad med

query1.FetchAll

Efter en åben ?

Nogen forskel?

--

Best Regards / Venlig hilsen
Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://www.mesnews.net



Ukendt (22-07-2008)
Kommentar
Fra : Ukendt


Dato : 22-07-08 23:52

"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
meddelelse news:newscache$nabe4k$5791$1@news.webpartner.dk...
> Michael Sørensen wrote :
>> Hej.
>>
>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>
>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at
>> bestemme, om den er tom, har en post eller har mere end 1 post og skriver
>> derfor:
>>
>> begin
>> query1.open;
>> case query1.recordCount of
>> 0 : showMessage('0');
>> 1: showMessage('1');
>> else ShowMessagge('2 eller derover')
>> end;
>> query1.close;
>> end;
>>
>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
>> visuelt bliver vist i en grid for at vise hvor mange poster jeg rent
>> faktisk har, men uanset hvad bliver resultatet "1" i min showMessage.
>
>
>
> Hvad med
>
> query1.FetchAll
>
> Efter en åben ?
>
> Nogen forskel?

Ja... FetchAll medfører det "korrekte svar". Super.

Hvad "gør" FetchAll i det hele taget. Hvad er dens funktion udover at hjælpe
brugere i danske nyhedsgrupper, som har problemer med at få deres møg til at
virke?



Stig Johansen (23-07-2008)
Kommentar
Fra : Stig Johansen


Dato : 23-07-08 07:08

"Michael Sørensen" <.> wrote:

> Ja... FetchAll medfører det "korrekte svar". Super.
>
> Hvad "gør" FetchAll i det hele taget. Hvad er dens funktion udover at
> hjælpe brugere i danske nyhedsgrupper, som har problemer med at få deres
> møg til at virke?

Problemet er, at du angriber det forkert.
En Query med SELECT et.elller.andet returnerer ikke, eller for den sags
skyld kender, antallet af poster.
Den returnere, lad os kalde det en 'pegepind' til den første post.
Først når man har loopet igennem til .eof kendes antallet.

En af problemstillingerne er, at recordsættet kan ændre sig under loopet,
eksempelvis hvis en anden bruger tilføjer eller sletter undervejs, så man
kan aldrig lave antagelser om antal poster i RDBMS'er.

Det der sker med dine konstruktioner med clientdataset osv, er at du
gennemtvinger en læsing af hele tabellen for at finde antallet, og
risikerer aggressive locking osv.

Den rigtige måde er at benytte denne sql:
SELECT Count(*) AS Antal FROM <tabelnavn>
Så har du een post hver antallet fremgår.

Dvs. (ej testet)
Query.SQL := 'SELECT Count(*) AS Antal FROM <tabelnavn>' ;
Query.Open ;
IF NOT Query.EOF THEN
Antal := Query.FieldByName('Antal').AsInteger
ELSE
Antal := -1 ;
Query.Close;

Case Antal OF
0: something
1: Something else
else
something third
end;

--
Med venlig hilsen
Stig Johansen

Michael Vilhelmsen (23-07-2008)
Kommentar
Fra : Michael Vilhelmsen


Dato : 23-07-08 08:03

Michael Sørensen presented the following explanation :
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en meddelelse news:newscache$nabe4k$5791$1@news.webpartner.dk...
>> Michael Sørensen wrote :
>>> Hej.
>>>
>>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>>
>>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at bestemme, om den er tom, har en post eller har mere end 1 post og skriver derfor:
>>>
>>> begin
>>> query1.open;
>>> case query1.recordCount of
>>> 0 : showMessage('0');
>>> 1: showMessage('1');
>>> else ShowMessagge('2 eller derover')
>>> end;
>>> query1.close;
>>> end;
>>>
>>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som visuelt bliver vist i en grid for at vise hvor mange poster jeg rent faktisk har, men uanset hvad bliver resultatet "1" i
>>> min showMessage.
>>
>>
>>
>> Hvad med
>>
>> query1.FetchAll
>>
>> Efter en åben ?
>>
>> Nogen forskel?
>
> Ja... FetchAll medfører det "korrekte svar". Super.
>
> Hvad "gør" FetchAll i det hele taget. Hvad er dens funktion udover at hjælpe brugere i danske nyhedsgrupper, som har problemer med at få deres møg til at virke?

Som Stig siger, gennemlæser din query nu hele tabellen og dennes poster.
Jeg mener, at det også medfører, at alle de poster, som din query kan se på tidspunktet (pga. transactions) vil blive overført til memory lokalt.

Normalt når jeg laver en select * from tabel og viser dette i et grid og måler på recordcount får jeg altid det antal, som pt. vises i gridet. Og eftersom jeg scroller ned ændrer recordcount sig.
Hvis jeg så af den ene eller ander årsag ønsker at vide det faktisk antal der er returneret bruger jeg fetchall, som derved faktisk henter alle poster ind i memory.

Problemet er så, at hvis det er en MEGA tabel (som nogle af vores er) får man en out of memory error.
Så er en select count(*) from tabel først bedre.
Men fra den udføres til en select * from tabel kan der jo som Stig siger være indsat eller slettet poster.

Men jeg bruger ofte fetchall på tabeller, hvor jeg ved, at der ikke er mange poster i.
Jeg bruger det aldrig på store tabeller.

Michael

--

Best Regards / Venlig hilsen
Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://www.mesnews.net



Ukendt (23-07-2008)
Kommentar
Fra : Ukendt


Dato : 23-07-08 10:34

"Michael Vilhelmsen"
<Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
meddelelse news:newscache$586g4k$jvi1$1@news.webpartner.dk...
> Michael Sørensen presented the following explanation :
>> "Michael Vilhelmsen"
>> <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en
>> meddelelse news:newscache$nabe4k$5791$1@news.webpartner.dk...
>>> Michael Sørensen wrote :
>>>> Hej.
>>>>
>>>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>>>
>>>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for
>>>> at bestemme, om den er tom, har en post eller har mere end 1 post og
>>>> skriver derfor:
>>>>
>>>> begin
>>>> query1.open;
>>>> case query1.recordCount of
>>>> 0 : showMessage('0');
>>>> 1: showMessage('1');
>>>> else ShowMessagge('2 eller derover')
>>>> end;
>>>> query1.close;
>>>> end;
>>>>
>>>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som
>>>> visuelt bliver vist i en grid for at vise hvor mange poster jeg rent
>>>> faktisk har, men uanset hvad bliver resultatet "1" i min showMessage.
>>>
>>>
>>>
>>> Hvad med
>>>
>>> query1.FetchAll
>>>
>>> Efter en åben ?
>>>
>>> Nogen forskel?
>>
>> Ja... FetchAll medfører det "korrekte svar". Super.
>>
>> Hvad "gør" FetchAll i det hele taget. Hvad er dens funktion udover at
>> hjælpe brugere i danske nyhedsgrupper, som har problemer med at få deres
>> møg til at virke?
>
> Som Stig siger, gennemlæser din query nu hele tabellen og dennes poster.
> Jeg mener, at det også medfører, at alle de poster, som din query kan se
> på tidspunktet (pga. transactions) vil blive overført til memory lokalt.
>
> Normalt når jeg laver en select * from tabel og viser dette i et grid og
> måler på recordcount får jeg altid det antal, som pt. vises i gridet. Og
> eftersom jeg scroller ned ændrer recordcount sig.
> Hvis jeg så af den ene eller ander årsag ønsker at vide det faktisk antal
> der er returneret bruger jeg fetchall, som derved faktisk henter alle
> poster ind i memory.
>
> Problemet er så, at hvis det er en MEGA tabel (som nogle af vores er) får
> man en out of memory error.
> Så er en select count(*) from tabel først bedre.
> Men fra den udføres til en select * from tabel kan der jo som Stig siger
> være indsat eller slettet poster.
>
> Men jeg bruger ofte fetchall på tabeller, hvor jeg ved, at der ikke er
> mange poster i.
> Jeg bruger det aldrig på store tabeller.

Til både Stig og dig vil jeg sige mange tak for forklaringen. Det var meget
lærerigt.
mvh
Michael



Michael Vilhelmsen (23-07-2008)
Kommentar
Fra : Michael Vilhelmsen


Dato : 23-07-08 10:59

Michael Sørensen formulated the question :
> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en meddelelse news:newscache$586g4k$jvi1$1@news.webpartner.dk...
>> Michael Sørensen presented the following explanation :
>>> "Michael Vilhelmsen" <Michael.Vilhelmsen.PLEASEREMOVE@Microcom.PLEASEREMOVE.Dk> skrev i en meddelelse news:newscache$nabe4k$5791$1@news.webpartner.dk...
>>>> Michael Sørensen wrote :
>>>>> Hej.
>>>>>
>>>>> Jeg kan ikke lige gennemskue, hvad jeg gør galt her.
>>>>>
>>>>> Jeg forsøger at hente antallet af poster i en query. Jeg har brug for at bestemme, om den er tom, har en post eller har mere end 1 post og skriver derfor:
>>>>>
>>>>> begin
>>>>> query1.open;
>>>>> case query1.recordCount of
>>>>> 0 : showMessage('0');
>>>>> 1: showMessage('1');
>>>>> else ShowMessagge('2 eller derover')
>>>>> end;
>>>>> query1.close;
>>>>> end;
>>>>>
>>>>> I øjeblikket har jeg forsøgt med hhv. 1, 2 og 3 poster i min query, som visuelt bliver vist i en grid for at vise hvor mange poster jeg rent faktisk har, men uanset hvad bliver resultatet "1"
>>>>> i min showMessage.
>>>>
>>>>
>>>>
>>>> Hvad med
>>>>
>>>> query1.FetchAll
>>>>
>>>> Efter en åben ?
>>>>
>>>> Nogen forskel?
>>>
>>> Ja... FetchAll medfører det "korrekte svar". Super.
>>>
>>> Hvad "gør" FetchAll i det hele taget. Hvad er dens funktion udover at hjælpe brugere i danske nyhedsgrupper, som har problemer med at få deres møg til at virke?
>>
>> Som Stig siger, gennemlæser din query nu hele tabellen og dennes poster.
>> Jeg mener, at det også medfører, at alle de poster, som din query kan se på tidspunktet (pga. transactions) vil blive overført til memory lokalt.
>>
>> Normalt når jeg laver en select * from tabel og viser dette i et grid og måler på recordcount får jeg altid det antal, som pt. vises i gridet. Og eftersom jeg scroller ned ændrer recordcount sig.
>> Hvis jeg så af den ene eller ander årsag ønsker at vide det faktisk antal der er returneret bruger jeg fetchall, som derved faktisk henter alle poster ind i memory.
>>
>> Problemet er så, at hvis det er en MEGA tabel (som nogle af vores er) får man en out of memory error.
>> Så er en select count(*) from tabel først bedre.
>> Men fra den udføres til en select * from tabel kan der jo som Stig siger være indsat eller slettet poster.
>>
>> Men jeg bruger ofte fetchall på tabeller, hvor jeg ved, at der ikke er mange poster i.
>> Jeg bruger det aldrig på store tabeller.
>
> Til både Stig og dig vil jeg sige mange tak for forklaringen. Det var meget lærerigt.
> mvh
> Michael

Det var så lidt.

Nu var der noget jeg kunne svare på

--

Best Regards / Venlig hilsen
Michael Vilhelmsen
This is an automatic signature of MesNews.
Site : http://www.mesnews.net



Søg
Reklame
Statistik
Spørgsmål : 177416
Tips : 31962
Nyheder : 719565
Indlæg : 6407862
Brugere : 218876

Månedens bedste
Årets bedste
Sidste års bedste