Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Istruzioni SQL con VB6 e MDB con DAO

19 views
Skip to first unread message

Sauro

unread,
Oct 1, 2020, 2:52:39 AM10/1/20
to
Ho una tabella "Rilevamenti" che contiene tutte le lavorazioni
effettuate dai dipendenti da parecchi anni.
Tra gli altri la tabella contiene i sequanti campi:
Dip campo stringa codice dipendente è un campo indicizzato
Comm campo stringa numero commessa è un campo indicizzato
DataEff campo data data della lavorazione

Sono presenti 400 mila record con un massimo di 50 mila record
per un singolo dipendente.
La funzione incriminata è quella che mi deve far vedere le lavorazioni
di un dipendente per l'ultimo mese.
Ho quindi spezzato la ricerca in due fasi.
La prima per trovare la data dell'ultima registrazione per il dipendente
scelto e la seconda per trovare effettivamente le lavorazioni dell'ultimo
mese.
Tutto è andato bene fino a qualche giorno fà con tempi di esecuzione
accettabili (qualche secondo) poi improvvisamente, solo per i
dipendenti con molti record, si è arrivati a superare il minuto.
Sto tuttora facendo delle prove ed ho verificato che è la prima ricerca
(quella per trovare la data) che impiega tanto tempo.

Prima l'istruzione era:
StringaSQL="SELECT DataEff FROM Rilevamenti WHERE Dip='CodDip' ORDER BY
DataEff DESC"
ListaRec=PublicDB.OpenRecordSet(StringaSQL)
UltimaData=ListaRec.Fields(0)

Adesso andrò a provare le seguenti due prove:
StringaSQL="SELECT TOP 1 DataEff FROM Rilevamenti WHERE Dip='CodDip' ORDER
BY DataEff DESC"
StringaSQL="SELECT Max(DataEff) FROM Rilevamenti WHERE Dip='CodDip'"

Secondo voi quale sarà la più veloce?
C'è poi una terza istruzione ancora più veloce?
Io mi stò concentrando sull'istruzione SQL ma forse il problema è
da qualche altra parte?

Grazie a tutti
Saluti
Sauro


Freccia (VegetaSSj)

unread,
Oct 2, 2020, 3:57:51 PM10/2/20
to
Su "it.comp.lang.visual-basic", ==Sauro=> ha scritto:

> Adesso andrò a provare le seguenti due prove:
> StringaSQL="SELECT TOP 1 DataEff FROM Rilevamenti WHERE Dip='CodDip' ORDER
> BY DataEff DESC"
> StringaSQL="SELECT Max(DataEff) FROM Rilevamenti WHERE Dip='CodDip'"
>
> Secondo voi quale sarà la più veloce?
> C'è poi una terza istruzione ancora più veloce?
> Io mi stò concentrando sull'istruzione SQL ma forse il problema è
> da qualche altra parte?

Premesso che access è tutto fuorchè prevedibile, devi prelevare le
rilevazioni del mese solare, e dell'ultimo mese in cui il dipendente ha
rilevamenti, perchè altrimenti trovo inutile cercarsi la data prima.
Ad ogni modo il TOP 1 dovrebbe essere più veloce, prova ad indicizzare
la data anche.


--
Freccia@Bulldozer63 :D

Sauro

unread,
Oct 3, 2020, 3:22:21 AM10/3/20
to
Ciao Freccia e grazie per la tua risposta.

> Premesso che access è tutto fuorchè prevedibile, devi prelevare le
> rilevazioni del mese solare, e dell'ultimo mese in cui il dipendente ha
> rilevamenti, perchè altrimenti trovo inutile cercarsi la data prima.

Per cercare le rilevazioni dell'ultimo mese devo prima capire di quale
mese si tratta.


0 new messages