Autore Topic: [RISOLTO] L'order by di SQLite3 non funziona  (Letto 405 volte)

Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
[RISOLTO] L'order by di SQLite3 non funziona
« il: 08 Luglio 2014, 00:07:07 »
Non ci avevo fatto mai caso. Oggi, esaminando attentamente i dati rilevati da un programma di verifica sul contenuto del DB tenuto in continuo aggiornamento dal mio ContabFam,  ho avuto la sensazione che i record letti da una tabella non venissero sequenzializzati secondo il criterio del comando "ORDER BY" dato nell'istruzione SQL relativa:
Codice: [Seleziona]
 RecMovgg = ApriDB.DB_Connection.EXEC("SELECT * FROM movimgg ORDER BY CoVocMovvgg AND DtCoMovgg, DtSolMovgg, OraSolMovgg")

Secondo quando capito a suo tempo, l'ordine con cui i record sarebbero stati letti avrebbe dovuto seguire le seguenti priorità
1) Lettura dei record della tabella "movimgg" in ordine crescente del contenuto colonna "CoVocMovvgg"
  2) Per tutti i record con lo stesso valore di  "CoVocMovvgg", secondo l'ordine crescente del contenuto colonna "DtCoMovgg"
    3) Per tutti i record con lo stesso valore di  "CoVocMovvgg" e "DtCoMovgg", secondo l'ordine crescente del contenuto colonna "DtSolMovgg"
      4) Per tutti i record con lo stesso valore di  "CoVocMovvgg", "DtCoMovgg" e "DtSolMovgg", secondo l'ordine crescente del contenuto colonna "OraSolMovgg"

Invece tutto questo non è avvenuto ed i record sono stati passati al programma in maniera piuttosto disordinata:
Citazione
=========================================================================
Livelli teorici di ordinamento:                                    |       2°       |      3°        |       4°      |------|       1°         |
---------------------------------------------------------------------------------------------------------------------------------------------------
TestaMovimgg--> RecMovgg!IdMovvgg.'22709' ==> '20011230' | '20110626' | '211540' | '1' | '101601010' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22710' ==> '20011230' | '20110626' | '211839' | '2' | '101505012' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22711' ==> '20011230' | '20110626' | '214703' | '3' | '101300027' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22712' ==> '20011230' | '20110626' | '214748' | '4' | '101603012' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22713' ==> '20011231' | '20110704' | '152506' | '1' | '101300027' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22714' ==> '20011231' | '20110723' | '152637' | '2' | '101590002' |
TestaMovimgg--> RecMovgg!IdMovvgg.'22715' ==> '20011231' | '20110723' | '162559' | '3' | '101403004' |
TestaMovimgg--> RecMovgg!IdMovvgg.'26364' ==> '20110725' | '20110727' |   '83304' | '1' | '101295003' |
TestaMovimgg--> RecMovgg!IdMovvgg.'26365' ==> '20110725' | '20110727' |   '83339' | '2' | '101295003' |
TestaMovimgg--> RecMovgg!IdMovvgg.'26366' ==> '20110725' | '20110727' |   '83449' | '3' | '101710002' |

Basta guardare l'ultima colonna di quelle riportate, corrispondente al  "CoVocMovvgg", per accorgersi che i codici vanno su è giù senza mantenere alcun ordine crescente.
Se non manca qualche parametro di ulteriore puntualizzazione nell'istruzione SQL, direi che SQLite3 non funziona come dovrebbe.
E allora? Come stare tranquilli durante l'esecuzione di un programma. se non si sa dove andrà a parare?
 :evil:
« Ultima modifica: 08 Luglio 2014, 10:00:21 da Picavbg »
:ciao:

Offline milio

  • Senatore Gambero
  • ******
  • Post: 1.273
  • Chi parla poco dice tanto...
    • Mostra profilo
Re: L'order by di SQLite3 non funziona
« Risposta #1 il: 08 Luglio 2014, 05:31:17 »
Prova da così
RecMovgg = ApriDB.DB_Connection.EXEC("SELECT * FROM movimgg ORDER BY CoVocMovvgg AND DtCoMovgg, DtSolMovgg, OraSolMovgg")

A così
RecMovgg = ApriDB.DB_Connection.EXEC("SELECT * FROM movimgg ORDER BY CoVocMovvgg, DtCoMovgg, DtSolMovgg, OraSolMovgg")


Offline Picavbg

  • Senatore Gambero
  • ******
  • Post: 1.620
    • Mostra profilo
Re: L'order by di SQLite3 non funziona
« Risposta #2 il: 08 Luglio 2014, 09:59:51 »
 :hard:
Che svista!... Mi era proprio sfuggito quell'errore.
Quando si dice che lo stesso occhio a volte legge e rilegge sempre quello che vuole leggere e non quello che c'è veramente scritto.

Grazie Milio! Tutto risolto. Ora funziona bene.
 :ciao:
:ciao: