Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
SQL Server 2000/2005/2008, Express, Access, MySQL, Oracle
[VBA] Campo calcolato
mercoledì 07 marzo 2012 - 17.05
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Elenco Tags
Windows XP
|
Access (.mdb)
|
Office 2007
mmjc23
Profilo
| Newbie
47
messaggi | Data Invio:
mer 7 mar 2012 - 17:05
Buona sera a tutti...
Scusatemi la domande sempre più strane ma...capitano tutte a me
Vengo al dunque...
Ho un database Access che si collega mediante ODBC a un Database SQL
All'avvio dell'applicazione, vado a fare una query (access) risultante di 2/3 tabelle ed il risultato viene caricato in un Recordset ADO.
Avendo la necessità poi di modificare il contenuto del recordset (ma non delle tabelle su DB), ho creato un nuovo recordset (globale a livello di modulo) utilizzando il metodo clone del primo recordset ed ho settato la proprietà "***Connection" del recordset clonato.
Tutto questo, è stato fatto per avere un Recordset in memoria popolato con i dati del DB ma svincolato dal DB così da poterlo modificare e aggiornare i dati del form senza modificare i dati su DB.
Il tutto, sembra funzionare correttamente, se non fosse che ho dovuto aggiungere alla query che visualizza dei valori in base ad alcune verifiche...il famoso "Campo calcolato".
Il problema, è che adesso, quando a modificare il valore di quel campo mediante l'istruzione "recordset.fields("Nomecampo").value = valore", mi viene restituito l'errore "Si sono verificati errori in un'operazione costituita da più passaggi....".
Questo errore, sembra sia dovuto proprio al fatto che si tenta di aggiornare il valore di un campo calcolato e quindi non Updatable
Ma mi chiedo...il clone del recordset principale, non dovrebbe effettuare un clone di dati e struttura e fregarsene di come è stato ottenuto quel valore?
Ho provato ad osservare la proprietà Status del Field incriminato credendo di trovarmi lo stato
"adFieldIntegrityViolation-10-Indicates that the field cannot be modified because it is a calculated or derived entity" ma invece me lo trovo comunque a "0"
Ho pensato quindi di "fregare" access in questo modo...creo il recordset sul risultato di una query (select * o select "tutte le colonne") della query originale in modo che il risultato non sia più un campo calcolato...ma comunque il problema persiste.
L'unico modo che ho trovato per farlo funzionare (ma preferirei non utilizzarlo per particolari motivi mooolto lunghi da spiegare), è fare eseguire la query a SQL...quindi, creare una vista all'interno del DB SQL che esegua quanto eseguito precedentemente dalla query Access e poi importare la tabella (tabelle collegate) in access (e da questa, ottenere il recordset).
Così funziona, anche se, apparentemente, non è cambiato nulla...probabilmente però, essendo una tabella collegata, Access non riesce a riconoscere che è un campo calcolato.
Qualche idea?
Grazie
renarig
Profilo
| Expert
517
messaggi | Data Invio:
gio 8 mar 2012 - 11:37
> L'unico modo che ho trovato per farlo funzionare
> (ma preferirei non utilizzarlo per particolari motivi mooolto lunghi da spiegare),
> è fare eseguire la query a SQL...quindi, creare una vista all'interno del DB SQL
Questo lo eviterei anch'io
meglio far fare al DB esclusivamente il suo lavoro di Base di Dati
_______________________________________________________________________
> Ho pensato quindi di "fregare" access in questo modo...creo il recordset
> sul risultato di una query (select * o select "tutte le colonne") della query originale
> in modo che il risultato non sia più un campo calcolato...ma comunque il problema persiste.
Persiste perche se il risultato è calcolato all'origine anche
tutte le query discendenti da quella origine hanno gli stessi vincoli
________________________________________________________________________
Proverei a fregarlo cosi:
Crei una tabella di appoggio nella applicazione di Access
Senza disturbare il DB SQLServer fai una Query in Access
ottenendo cosi il tuo RecordSet con il campo calcolato
Fai una INSERT del tuo RecordSet dalla Query nella Tabella
A questo punto i tuoi dati in tabella non sono piu originati
da un calcolo ma sono semplicemente scritti dalla INSERT
Puoi lavorare sulla tabella di access.
NB; Devi pensare anche a svuotare la tabella alla fine
o meglio immediatamente prima di fare la INSERT
___________________________________________________________________
mmjc23
Profilo
| Newbie
47
messaggi | Data Invio:
gio 8 mar 2012 - 16:48
Grazie mille per la risposta...
Ci avevo pensato ma mi sembrava una soluzione "poco pulita" in quanto tira in ballo una query di inserimento che scrive su una tabella temporanea da mantenere aggiornata/cancellata
Ma se non c'è altra via d'uscita...farò come mi consigli
Grazie mille
Ciao
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !