[VBA] Campo calcolato

mercoledì 07 marzo 2012 - 17.05
Tag Elenco Tags  Windows XP  |  Access (.mdb)  |  Office 2007

mmjc23 Profilo | Newbie

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


> 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

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
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 !
Copyright © dotNetHell.it 2002-2017
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5