Newsgroup: it.comp.www.asp
Titolo: query che ottiene i primi 100 record di un DB

Ciao a tutti,
volevo sapere se sapete suggerirmi qualcosa:
eseguo una query estraendo i primi 100 record da un db access, ma mi capita
che il mio recordSet contiene 103 record, secondo voi perchč??
la query é: SELECT TOP 100 * FROM tabella where ......
rst.RecordCount mi restituisce 103 elementi
cosa mi suggerite per ottenere al massimo 100 elementi??
in ogni caso grazie
-- 
Posted from [213.156.59.6] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

impossibile

cosa mi suggerite per ottenere al massimo 100 elementi??
mah, mi sembra strano che top non funzioni...  piuttosto č piů
probabile che sia recordcount ad essere inaffidabile...  li hai
proprio contati?  hai scorso tutto il recordset con un .movelast prima
del recordcount?
-- 
non studio non lavoro non guardo la tv
non vado al cinema non faccio sport

rst.RecordCount mi restituisce 103 elementi
e ci credo!
A parte che non ho mai sentito SELECT Top 100... Sarň ignorante... 
Se non riesci a venirne fuori, non ti basare su recordcount, fai
piuttosto un ciclo: valorizzare una variabile non costa niente e il
ciclo while lo devi fare comunque, quindi:
dim i
i=0
do while (NOT recordset.EOF) AND (i<=100)
i=i+1
...
...
Loop
cosě funziona anche se recordcount vale piů di 100
Ciao!
Davide
-- 
Volontario Anti-Troll (TM) 
SecurFaq: 
http://members.nbci.com/gouldukat/
DocTrolls: 
http://it.geocities.com/roccopapaleo/faq/italiano/Troll.html
Netiquette: 
http://www.inferentia.it/netiquette/dis.html

Sě, ma č una pazzia: se hai una tabella di 100.000 record cosa fai, li
estrai tutti per visualizzare i primi 100????
select top 100 * č la soluzione corretta.

 wrote in
message news:000a01c1314d$5efbfd20$69bd...@icn.siemens.it...


 wrote in
message news:000a01c1314d$5efbfd20$69bd...@icn.siemens.it...


A parte che non ho mai sentito SELECT Top 100... Sarò ignorante... 
E' possibile che tu non abbia mai sentito parlare di SELECT TOP XXX,
ma che ti costa informarti prima di scriverlo? Bhooo!!
Ciao

 che il mio recordSet contiene 103 record, secondo voi perchč??
Forse perchč li hai ordinati secondo un campo che usi nel criterio...
Prova a non ordinarli o ordinali per un altro campo.
Ciao!
Massimo

 Ciao a tutti,

-- 
Posted from  [213.156.59.10] 


 select top 100 * č la soluzione corretta.
-- 
Posted from  [213.156.59.10] 


DALL'ALTRO)
controlla il Caps Lock, forse si è inchiodato. ;-)
Se scrivi in maiuscolo, vuol dire che stai urlando, come da netiquette.
Il testo non diventa più leggibile e puoi dare fastidio a qualcuno che,
inevitabilmente, non leggerà più il tuo articolo (me, ad esempio).


 wrote in message
news:wEIj7.58676$vC1.7...@news1.tin.it...

-- 
Posted from  [213.156.59.10] 


 POSSIBILISSIMO, A ME ACCADE.
Ci credo che ti accade ma l'errore è da qualche altra parte
Uso select top da credo 10 anni senza mai aver rilevato un bug (perché se é
vero di bug si tratta) simile
Ho cercato in support e msdn di Microsoft ma non ho trovato nulla, solo un
riferimento a recordcount dove suggerisce di spostarsi all'ultimo record
prima di leggere questa proprietà (che però hai già tentato senza successo)


Cosa? ORDER BAY? Immagino sia un errore di battitura in questo Post!
In effetti gli esempi del comando TOP di access fanno riferimento alla
combinazione con il comando ORDER BY, quindi come hai detto, devi
pretendere che i risultati ti siano dati ordinati per data!
Ciao


Hai provato ad inserire la query direttamente in ACCESS (se usi
questo) e farla girare?
Ciao

 
-- 


 wrote in message
news:9mnp9s$5ac$1...@fe1.cs.interbusiness.it...

-- 


 vero di bug si tratta) simile
No, no, non è un bug... anzi, ha un senso.
SELECT TOP 100 ID, campodata
FROM tabella
WHERE campodata<=Now()
ORDER BY campodata DESC;
In presenza di 103 campi che soddisfano il criterio dovrebbe escludere gli
ultimi 3, ma in base a cosa?
Il predicato TOP non ha "potere discriminante" in quel senso, in presenza di
valori uguali in campodata non può escluderne alcuni perchè sarebbe in
contraddizione con la clausola WHERE.
A prima vista è illogico, ma pensandoci bene...
Con l'ORDER BY campodata DESC si esclude l'ordinamento di default secondo la
chiave primaria e i record vengono restituiti in modo "casuale" se presi dal
punto di vista dell'ID.
Ora, per le ID (i record) che provocano il risultato in eccesso e che hanno
tutte campodata uguale, quale criterio dovrebbe usare per escluderne una
piuttosto che un'altra?
Non è specificato da nessuna parte e quindi le restituisce tutte :-)
Se l'ORDER BY non c'è è implicito l'ordinamento secondo l'ID crescente:
quello si che è un fattore discriminante!!
Infatti vengono eliminate possibili contraddizioni e restituiti esattamente
100 record.
Sottile, eh?
Chissà se è davvero così! ^__^;;
Un possibile workaround è quello di ordinare i record secondo l'ID
decrescente, se la struttura dei dati è tale che ID e campodata seguono lo
stesso andamento (l'ultimo record inserito contiene l'ultima data).
Altrimenti non c'è altra soluzione che agire via script visualizzando solo i
primi 100 record di un recordset comunque ristretto...
Ciao!
Massimo


wrote:

La tua tesi e chiaramente riportata nell'HELP di Access.
Perche' la gente non legge prima la documentazione?
La riporto ora con un Cut & Paste:
Restituisce un determinato numero di record che rientrano all'inizio o
alla fine di un intervallo specificato da una proposizione ORDER BY.
Si supponga di voler conoscere i nomi dei 25 studenti migliori
dell'anno 1994: 
SELECT TOP 25
Nome, Cognome
FROM Studenti
WHERE AnnoDiLaurea = 1994
ORDER BY VotazioneMedia DESC;
Se non si include la proposizione ORDER BY, la query restituirà dalla
tabella Studenti un set arbitrario di 25 record che soddisfano la
proposizione WHERE.
Il predicato TOP non effettua una scelta tra valori uguali.
Nell'esempio precedente, se la venticinquesima e la ventiseiesima
votazione media sono uguali, la query restituirà 26 record.
Ciao a Tutti

:-O
Farà lo stesso anche sql server? (non ci ho mai fatto caso, access non lo
uso)

 uso)
-- 


secondo la data
"ORDER BY data, id"
o cmq sostituisci ad id un campo che hai senza doppioni
in quetso modo ti restituisce gli x record nel top
ByEz...;->

Prova a non ordinarli o ordinali per un altro campo.
Anch'io penso sia un problema di ordinamento.
probabilmente hai ordinato per un campo che non ha valori distinti,
quindi se il record 99 ha lo stesso valore, per il campo di
ordinamento, del 100, 101, 102 e 103 te li mostra tutti.
prova a ordinare per chiave primaria e vedi cosa esce.
ByEz...;->

probabilmente hai ordinato per un campo che non ha valori distinti,
e se uno facesse select distinct?


e se uno facesse select distinct?
ti prende solo i record i cui campi della distinct siano diversi l'uno
dall'altro...
una sorta di record "rappresentanti". come decida questi
rappresentanti non lo so per certo ma penso prenda il primo che trova
secondo l'ordinamento, implicito, per chiave primaria.
es:  "select distinct col2, col3 from db", e il db e' con col1 =
chiave primaria
1, pippo, pluto, paperino
2, pippo, minnie, topolino
3, topolino, pluto, paperino
4, pippo, pluto, clarabella
credo restituisca i record 1, 2, 3 ma non il 4...almeno quetso e'
quello che mi aspetto  faccia, ma non avendolo mai provato,qualcuno
semntisce/conferma? tra l'altor non mi e' mai servita nemmeno la
distinct su due campi!
In sostanza e' ben diverso dalla top, questo e' piu' selettivo.
ByEz...;->

 la query é: SELECT TOP 100 * FROM tabella where ......
č impossibile, almeno che il tuo server non si sia drogato. Il comando SQL
Select top 100 serve proprio a quello! Forse ti fai ingannare dall'ID del
record!
Ciao
--
Lino Mari
Intermedia srl
http://www.viadeimercanti.com
 - Il nuovo portale dell'e-business
http://www.imbnet.it
 - Intermedia Srl - Telematica e Multimedia

 RIBADISCO, GLI ELEMENTI RESTITUITI SONO 103 SENZA OMBRA DI DUBBIO ,
[cut]
La cosa strana è che questo post sia passato... forse Daniele ha chiuso
un'occhio!


record!
ehm, Lino, se ti leggi tutto il thread vedrai che la cosa non č poi
cosě strana.


distinct su due campi!
Mi corrego da solo la boiata che ho scritto! distinct e distinctrow,
alemno in jet, funzionano solo su una select di un campo. in effetti
per fare quello che ho scritto sarebbero servite delle subquery.
ma allora il distinct mi serve solo per fare dei menu a tendina...
(ed in effetti li ho sempre usati per quello),  non vedo altre utili
applicazioni.
ByEz...;->