Newsgroup: it.comp.appl.access
Titolo: order by in automatico

salve a tutti,
ho due tabelle di access abbastanza simili, la prima tab_a è formata da 
questo tipo di campi:
numerico, data/ora, testo, testo
la seconda tab_e è invece formata da questa serie di campi:
numerico, data/ora, testo, numerico, testo
Entrambe le tabelle hanno un campo id_pax come primo campo numerico; non 
esistono chiavi primarie ne indici ed i dati inseriti nelle tabelle sono 
cronologici ovvero con id_pax progressivo; questo campo può essere ripetuto 
più volte così come anche gli altri. Non esistono record duplicati, questo 
significa che l'indice primario è l'intero record.
Il problema è che nella seconda tabella quando faccio una query e ad esempio 
filtro per i due campi testuali o altre combinazioni i risultati vengono 
"ordinati" in automatico, forse dovrei dire mescolati; id_pax è 
correttamente crescente fino ad un certo punto poi ricomincia con valori 
bassi e così via fino alla fine. Mentre nella tabella i record sono stati 
inseriti in ordine cronologico e scorrendola non è possibile un record con 
id_pax minire ad uno qualsiasi dei record precedenti. Se faccio la stessa 
query nella prima tabella i record sono correttamente ordinati, ovvero non 
mescolati. Sembra quasi che in automatico la query venga ordinata per il 
secondo campo numerico, per escludere questa ipotesi ho provato a fare solo 
una "select id_pax from tab_e" ed anche in questo caso i risultati sono 
mescolati; se mettessimo su un grafico gli id ottenuti si vedrebbero una 
serie di cunei anziché un unico cuneo con i valori sempre più grandi.
come vi spiegate un comportamento simile? Ovvio se faccio ORDER BY vengono 
ordinati, ma vorrei capire con quale logica access mi mescola i risultati 
applicando un suo ordinamento; che forse abbia dei campi nascosti interni 
con un contatore che tiene traccia di come effettivamente ha scritto i dati 
nella tabella?
grazie a tutti,
-- 
Sia 


A me capitò una cosa simile, di cui mi accorsi perché un DlookUp mi
trovava i record in un ordine diverso da quello di inserimento. Non mi
ricordo come venni a capo del problema perché era un programmino che
poi non sviluppai.
Riccardo Baldinotti


vorrei aggiungere che ho fatto "compatta e ripristina" ed ora l'ordinamento 
ottenuto dalla query č nuovamente differente; nella tabella mi mostra i dati 
correttamente ma nelle query applica un ordinamento di propria iniziativa.. 


ho verificato ed in effetti il programma inserisce i dati "disordinati" 
ovvero l'ordinamento con cui sono inseriti non è id_pax mi ha ingannato il 
fatto che nella tabella i dati sono in automatico ordinati per id_pax ma 
l'ordine effettivo d'inserimento è differente. Come da mio ultimo post, un 
compatta e ripristina non sembra aver risolto; ora i dati belle query sono 
mescolati in modo differente da prima.
--
Sia 


forse ho risolto ma non ancora capito.
ho duplicato la struttura della tabella tab_e e ci ho copiato i dati dalla 
tabella tab_e (quella coi dati) indicando un order by. Ora le query della 
tabella ordinata vengono correttamente ordinati. Questo risolve il problema 
ma non mi fa capire dove access tenga traccia dell'ordine cronologico 
d'inserimento dei record..
--
Sia 

Zapp ha scritto:




Di solito i record vengono fisicamente scritti in ordine di chiave
primaria, almeno durante la compattazione. Nel tuo caso visto che non hai
chiavi primarie non lo so secondo che criterio vada a memorizzare i record
su disco, resta il fatto che l'unico sistema per avere la query
sicuramente sempre ordinata come vuoi tu è aggiungere un ORDER BY.
Ciao.
-Marco-
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

 -Marco-
Dimenticavo: se usi spesso query ordinate per id_pax ti conviene
aggiungere un indice su quel campo. Non necessariamente una chiave
primaria, mettici un indice con possibilità di valori duplicati.


 -Marco-
un indice rende più veloce la lettura della tabella anche se non accedo al 
DB tramite access? 

 DB tramite access?
Si, se il programma/driver che usi per accedere al mdb è programmato per
utilizzare anche gli indici. E non vedo perchè non dovrebbe esserlo, se ci
sono è logico usarli.
E se non li usasse non ci perderesti molto, solo un po' di spazio su
disco, quindi vale la pena metterlo.
E' doveroso dire però che un indice rallenta la scrittura, visto che oltre
ai dati il programma deve aggiornare anche quello.
