Newsgroup: it.comp.lang.visual-basic
Titolo: Order BY

In una form di inserimento fatture c'è un data control  dao con origine dati
"select * from fatture" il cui unico scopo è quello di visualizzare l'ultima
fattura inserita e consentire la navigazione.
Inserimento e modifica sono gestiti da codice.
Tutto bene fino al record 8402, aggiungo l'8403 ma il datacontrol fa vedere
come ultimo record il 402; verifico nel database access97 che il record
effettiomante esista ed esitste, ma come ultimo record continuo a vedere il
402.
Ho cancellato e resinserito l'ultimo record ed il problema è sparito; adesso
il datacontrol fa vedere correttamente il 403 come ultime record.
A questo punto pensavo che il database fosse corrotto, non era mai capitato
prima, e ho cominciato a analizzare una copia con la condizione di errore,
senza trovare nulla che non andasse bene.
Sono allora tornato a rivedere il codice, e modicando la query che popola il
recorset in "select * from fatture order by IdFattura desc" anche la copia
del database che sembrava corrotta ha ripreso a funzionare bene.
Domanda: come mai per 8 mila record ha funzionato correttamente la query
ordinando implicitamente sul campo IdFattura che è chiave primaria e poi ha
smesso? Non se ne sa mai abbastanza!
Grazie
Greg

guarda bene.....secondo me il controllo Data è troppo stretto, ti tronca l'8
a sinistra......
:-))))
-- 
Damiani Liborio Igor
ig...@igordamiani.it
 - 
soft...@igordamiani.it
 - 
idam...@hotmail.com
http://www.igordamiani.it
ICQ : 11847262

 :-))))
============
Simpatica :))
No, l'8 lo tronco io nel discorso per semplicità, in realtà l'IdFattura si
legge in una label abbastanza lunga, non nella caption del datacontrol

 smesso? Non se ne sa mai abbastanza!
Come dicevi tu, poteva esser eil database corrotto e magari proprio
cancellando e reinserendo il record la consistenza è tornata Ok, il baco,
che probabilmente riguardava strettamente quel record, è stato sistemato.
La prossima volta, invece di cancellare e riscrivere il record, prova a
compattare il Db, se così risolvi allora è proprio un problema di
consistenza, però ti consiglio di indicare sempre l'ordinamento, senza
fidarti troppo di quello implicito per chiave.
--
David Ruscelli
Oh... My dog!

 che probabilmente riguardava strettamente quel record, è stato sistemato.
==========
Si ma ho ancora una copia dove non ho cancellato nulla....
e con l'order by funzia anche questa copia presunta "bacata".... quindi è o
non è bacata?
Lunedi me la guarderò meglio, intanto chiedevo per sapere il vostro parere
Greg

 non è bacata?
Se è bacata, non ci sarà verso (nel senso che non ti potrà dare risultati
certi), se non è bacata fai delle prove con e senza order by.
In ogni caso, segui il buon consiglio di David: Mai, mai dare per scontato
nessun ordinamento implicito, nemmeno se la guida lo cita, esplicitarlo
sempre!

 sempre!
Eh, non facevo order by perchè temevo di ripetere l'operazione...
Greg

 Eh, non facevo order by perchè temevo di ripetere l'operazione...
Sinceramente il dubbio c'è, magari proprio non di ripetere, ma di fargli
fare qualcosa in più, ma in genere il motore sottostante tende a sfruttare
(chi più chi meno, chi meglio chi peggio) gli indici presenti. In ogni caso,
anche se impiegasse il triplo (e, chiaramente, così non è), pretendo quello
che gli dico, non quello che farebbe senza dirglielo.

 struttura del db) qualche autoincrementante. Tutto qui.
Non è neanche questo caso, poichè numero io in fase di insert, prendo il max
e aggiungo 1
Greg

*Tyss* ha scritto:

Salvati un'altra copia del db nel suo stato attuale. Cancella tutti gli
indici (almeno quelli della tabella interessata) e ricreali. Vedi come si
comporta dopo.

 recorset in "select * from fatture order by IdFattura desc" ...
[CUT]
In ogni caso farei una "select max(IdFattura) from fatture"  sempre che ti
serva solo l'ultima fattura e null'altro. Penso che cosě tu possa evitare
tutti i problemi ed accelerare la Query. Se l'indice č ordinato Discendente,
la query legge un solo record dall'indice per risponderti.
La mia esperienza č basata su SQL/Oracle  e SQL/DB2, ma penso che tutto ciň
non cambi se applicato ad altri tipi di Database
Saluti, Il Sora!!