/ 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
dbExpress: TSQLQuery
Fra : Mikael Rune Jensen


Dato : 23-08-02 17:53

Hejsa

Jeg har lige et rpørgsmål som vedrører brugen af dbExpress og
aggregeringsfuntioner i sin SQL.
Jeg benytter Delphi 6 / Kylix 2.

Jeg har et program som tilgår en database (postgreSQL). For at hente data
fra databasen bruger jeg et TSQLQuery objekt. Problemet jeg har er flg:

- Jeg ønsker at udføre en aggregeringsforespørgsel (f.eks. "SELECT
COUNT(*) FROM minTabel").
- Hvis jeg eksekverer denne forespørgsel med mit TSQLQuery objekt, så kan
jeg ikke bruge RecordCount
til at få at vide hvor mange tupler min forespørgsel rent faktisk
returnerede!!! Jeg får f.eks. for ovenstående
forespørgsel at vide at der er 3000 tupler, selvom forespørgslen rent
faktisk kun returnerer een tupel!!!

Så kan man jo bare sige at jeg ved jeg laver en "..COUNT(*).."-forespørgsel
og derfor ved jeg at der kun kommer een tupel retur fra databasen! MEN dette
er ikke helt godt - hvis man f.eks kigger på grupperingsforespørgsler (SQL:
GROUP BY), så ved man jo ikke hvor mange tupler der kommer retur :(

Er der nogen der ved, hvordan man kan få at vide hvor mange tupler ens
aggregerings-forespørgsel rent faktisk returnerer? Kan dette bare ikke lade
sig gøre med aggregeringsforespørgsler (når man bruger dbExpress)?

Med venlig hilsen
Mikael Rune Jensen


--
Mikael Rune Jensen
Department of Computer Science
Aalborg University
http://www.cs.auc.dk/~mrj



 
 
Mikael Rune Jensen (25-08-2002)
Kommentar
Fra : Mikael Rune Jensen


Dato : 25-08-02 08:53

Hej

Jeg har fundet en løsning på mit problem! :)
Jeg poster lige løsningen her i tilfælde af, at andre har samme problem!

Iflg. Delphi/Kylix hjælpen skal man hente records ud fra et TSQLQuery (eller
TSQLDataSet) objekt således
(det forudsættes at jeg har flg. variabel "recs : TSQLQuery"):

recs.first
for i := 0 to recs.RecordCount-1
begin
{Lav lækre operationer her}
recs.Next;
end;

Men som jeg har skrevet i mit indlæg, så virker det ikke med
aggregeringsforespørgsler!
Jeg foreslå istedet at man _altid_ benytter flg. stump kode, da det virker
med _alle_ typer forespørgsler (jeg har dog ikke testet Stored Procedures!):

recs.First;
repeat
{Lav lækre operationer her}
recs.Next
until (recs.Eof);

Således får man altid kun gennemløbet det antal tupler, som forespørgslen
rent faktisk returnerede.

Mvh.
Mikael Rune Jensen

--
Mikael Rune Jensen
Department of Computer Science
Aalborg University
http://www.cs.auc.dk/~mrj







"Mikael Rune Jensen" <mrj@cs.auc.dk> wrote in message
news:3d66687d$0$242$ba624c82@nntp03.dk.telia.net...
> Hejsa
>
> Jeg har lige et rpørgsmål som vedrører brugen af dbExpress og
> aggregeringsfuntioner i sin SQL.
> Jeg benytter Delphi 6 / Kylix 2.
>
> Jeg har et program som tilgår en database (postgreSQL). For at hente data
> fra databasen bruger jeg et TSQLQuery objekt. Problemet jeg har er flg:
>
> - Jeg ønsker at udføre en aggregeringsforespørgsel (f.eks. "SELECT
> COUNT(*) FROM minTabel").
> - Hvis jeg eksekverer denne forespørgsel med mit TSQLQuery objekt, så
kan
> jeg ikke bruge RecordCount
> til at få at vide hvor mange tupler min forespørgsel rent faktisk
> returnerede!!! Jeg får f.eks. for ovenstående
> forespørgsel at vide at der er 3000 tupler, selvom forespørgslen rent
> faktisk kun returnerer een tupel!!!
>
> Så kan man jo bare sige at jeg ved jeg laver en
"..COUNT(*).."-forespørgsel
> og derfor ved jeg at der kun kommer een tupel retur fra databasen! MEN
dette
> er ikke helt godt - hvis man f.eks kigger på grupperingsforespørgsler
(SQL:
> GROUP BY), så ved man jo ikke hvor mange tupler der kommer retur :(
>
> Er der nogen der ved, hvordan man kan få at vide hvor mange tupler ens
> aggregerings-forespørgsel rent faktisk returnerer? Kan dette bare ikke
lade
> sig gøre med aggregeringsforespørgsler (når man bruger dbExpress)?
>
> Med venlig hilsen
> Mikael Rune Jensen
>
>
> --
> Mikael Rune Jensen
> Department of Computer Science
> Aalborg University
> http://www.cs.auc.dk/~mrj
>
>



Mikael Rune Jensen (25-08-2002)
Kommentar
Fra : Mikael Rune Jensen


Dato : 25-08-02 09:33

Hej igen

Hvad tænkte jeg dog på da jeg foreslog den "repeat-until"-løkke?!? Man kan
jo ikke altid garantere at en forespørgsel returnerer tupler, så derfor
trækker jeg det forslag tilbage. Som en erstatning foreslår jeg flg.
while-løkke:

recs.First;
while (not recs.Eof) do
begin
{Lav lækre operationer her}
recs.Next;
end;

Mvh.
Mikael Rune Jensen

--
Mikael Rune Jensen
Department of Computer Science
Aalborg University
http://www.cs.auc.dk/~mrj

"Mikael Rune Jensen" <mrj@cs.auc.dk> wrote in message
news:3d688ce2$0$1427$ba624c82@nntp02.dk.telia.net...
> Hej
>
> Jeg har fundet en løsning på mit problem! :)
> Jeg poster lige løsningen her i tilfælde af, at andre har samme problem!
>
> Iflg. Delphi/Kylix hjælpen skal man hente records ud fra et TSQLQuery
(eller
> TSQLDataSet) objekt således
> (det forudsættes at jeg har flg. variabel "recs : TSQLQuery"):
>
> recs.first
> for i := 0 to recs.RecordCount-1
> begin
> {Lav lækre operationer her}
> recs.Next;
> end;
>
> Men som jeg har skrevet i mit indlæg, så virker det ikke med
> aggregeringsforespørgsler!
> Jeg foreslå istedet at man _altid_ benytter flg. stump kode, da det virker
> med _alle_ typer forespørgsler (jeg har dog ikke testet Stored
Procedures!):
>
> recs.First;
> repeat
> {Lav lækre operationer her}
> recs.Next
> until (recs.Eof);
>
> Således får man altid kun gennemløbet det antal tupler, som forespørgslen
> rent faktisk returnerede.
>
> Mvh.
> Mikael Rune Jensen
>
> --
> Mikael Rune Jensen
> Department of Computer Science
> Aalborg University
> http://www.cs.auc.dk/~mrj
>
>
>
>
>
>
>
> "Mikael Rune Jensen" <mrj@cs.auc.dk> wrote in message
> news:3d66687d$0$242$ba624c82@nntp03.dk.telia.net...
> > Hejsa
> >
> > Jeg har lige et rpørgsmål som vedrører brugen af dbExpress og
> > aggregeringsfuntioner i sin SQL.
> > Jeg benytter Delphi 6 / Kylix 2.
> >
> > Jeg har et program som tilgår en database (postgreSQL). For at hente
data
> > fra databasen bruger jeg et TSQLQuery objekt. Problemet jeg har er flg:
> >
> > - Jeg ønsker at udføre en aggregeringsforespørgsel (f.eks. "SELECT
> > COUNT(*) FROM minTabel").
> > - Hvis jeg eksekverer denne forespørgsel med mit TSQLQuery objekt, så
> kan
> > jeg ikke bruge RecordCount
> > til at få at vide hvor mange tupler min forespørgsel rent faktisk
> > returnerede!!! Jeg får f.eks. for ovenstående
> > forespørgsel at vide at der er 3000 tupler, selvom forespørgslen
rent
> > faktisk kun returnerer een tupel!!!
> >
> > Så kan man jo bare sige at jeg ved jeg laver en
> "..COUNT(*).."-forespørgsel
> > og derfor ved jeg at der kun kommer een tupel retur fra databasen! MEN
> dette
> > er ikke helt godt - hvis man f.eks kigger på grupperingsforespørgsler
> (SQL:
> > GROUP BY), så ved man jo ikke hvor mange tupler der kommer retur :(
> >
> > Er der nogen der ved, hvordan man kan få at vide hvor mange tupler ens
> > aggregerings-forespørgsel rent faktisk returnerer? Kan dette bare ikke
> lade
> > sig gøre med aggregeringsforespørgsler (når man bruger dbExpress)?
> >
> > Med venlig hilsen
> > Mikael Rune Jensen
> >
> >
> > --
> > Mikael Rune Jensen
> > Department of Computer Science
> > Aalborg University
> > http://www.cs.auc.dk/~mrj
> >
> >
>
>



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

Månedens bedste
Årets bedste
Sidste års bedste