Newsgroup: it.comp.lang.visual-basic
Titolo: [Repost] Aggiornare un campo calcolato in un recordset

Ciao. Riposto un messaggio della settimana scorsa relativo all'aggiornamento
dei campi calcolati in un recordset.
Grazie.
Il mio promblema principale è l'ordinamento di un recordset in base a campi
testo che dovrebbero contenere solo numeri.
Supponiamo di avere questa semplice tabella in un MDB con 3 campi, Campo1,
Campo2 e Campo3 di tipo testo di 10 caratteri.
SELECT * FROM MiaTabella mi restituisce questi record
Campo1  Campo2  Campo3
4              45           12
2              125         47
21            58           1
12            1             18
Se ordino i record in base a campo1 ovviamente non ottengo 2, 4, 21, e 12 ma
12, 2, 21, 4
Allora avevo pensato di creare un campo calcolato che unisse i valori di
Campo1, Campo2 e Campo3 allineandoli a destra ottenendo quindi i seguenti
campi (i puntini in CampoOrd sono gli spazi):
Campo1  Campo2  Campo3 CampoOrd
4              45           12           .........4........45........12
2              125         47           .........2.......125........47
21            58           1             ........21........58.........1
12            1             18           ........12.........1........18
Eseguendo quindi l'ordinamento su CampoOrd viene correttamente. Il mio
problema è quando aggiungo un nuovo record al recordset ADO (come ho già
detto devo utilizzare il recordset e non voglio scrivere le modifiche
direttamente nella tabella con SQL perchè l'utente potrebbe alla fine
decidere di annullare tutte le operazioni). Sul nuovo record il campo
CampoOrd sarà vuoto ed il tentativo di riempirlo via codice genera un
errore.
Grazie a tutti.
Skysurfer

 12, 2, 21, 4
[CUT]
se sei sicuro che campo1, oppure campo2 ecc... conterrano
solo valori numerici interi, potresti provare con:
SELECT campo1, campo2, campo3, campo4
FROM <tabella>
ORDER BY CInt([campo1])
con access funziona, con altri DB non saprei
--
bye BlackMagic
ICQ# 85485468

 con access funziona, con altri DB non saprei
Grazie per la risposta
Ho provato con Acces ed in effetti potrebbe essere una buona soluzione. Il
problema è che comunque il campo potrebbe contenere anche caratteri
alfabetici e in questo caso la conversione con CInt provoca errore.
Ciao.
Skysurfer


continuando sulla stessa strada:
SELECT campo1, campo2, campo3, campo4
FROM <tabella>
ORDER BY String(<lungezza campo>-Len([campo1]),"<carattere>") & [campo1];



Ok, questo è l'ordinamento che avevo provato all'inizio. Ma il problema non
è tanto l'ordinamento iniziale, quanto che i nuovi record aggiunti al
recordset non risultano ordinati correttamente.
Come scrivevo nel primo post il mio problema è quando aggiungo un nuovo
record al recordset ADO (come ho già
detto devo utilizzare il recordset e non voglio scrivere le modifiche
direttamente nella tabella con SQL perchè l'utente potrebbe alla fine
decidere di annullare tutte le operazioni). Sul nuovo record il campo
CampoOrd sarà vuoto ed il tentativo di riempirlo via codice genera un
errore.
Praticamente io vorrei che quando eseguo un AddNew nel recordset, il nuovo
record venga posizionato tenendo conto dell'ordine originale.
Ciao.
Skysurfer

 nuovo record venga posizionato tenendo conto dell'ordine originale.
Provato a cercare in direzione dei recordset disconnessi?
Ti carichi i dati (ovviamente lato client) e ti stacchi dal db
Ci fai quello che vuoi, senza modificare il db, che č staccato
Se l'utente conferma le modifiche ti riagganci e effetui l'updatebatch
hth
--
Salutoni
Sergio


Avevo già provato, ma anche così non mi permette di modificare il campo
calcolato. Non mi sembra un'operazione così strana, una volta che ho un
recordset in memoria, senza più nessun legame con il database!
Grazie e ciao.
Skysurfer