Newsgroup: it.comp.appl.access
Titolo: (A2K) Propietà UnderlyingValue, OriginalValue non funzionano?

Come da oggetto, dopo aver aperto 2 copie dello stesso file adp, eseguo
queste operazioni
1 - apro i 2 adp
2 - apro il Recordset Rc e posiziono sul record 1 dal 1° adp
3 - apro lo stesso Recordset Rc dal 2° adp e mi posiziono sul 1° record
4 - dal 2° adp modifico e salvo il record (nessuna transazione)
5 - dal 1° adp eseguo questo codice:
Modificati = False
For Each Fi In Rc.Fields
    If Nz(Fi.UnderlyingValue, "") <> Nz(Fi.OriginalValue, "") Then
        Modificati = True
        Exit For
    End If
Next Fi
Debug.Print Modificati
'********* torna sempre false ********
6 - allora provo così:
Modificati = False
For Each Fi In Rc.Fields
    If Nz(Fi.UnderlyingValue, "") <> Nz(Fi.OriginalValue, "") Or _
        Nz(Fi.UnderlyingValue, "") <> Nz(Fi.Value, "") Or _
        Nz(Fi.Value, "") <> Nz(Fi.OriginalValue, "") Then
        Modificati = True
        Exit For
    End If
Next Fi
Debug.Print Modificati
'********* torna ancora sempre false ********
Dove sto sbagliando?
Ciao, omnitow

 ha scritto nel messaggio
news:RFAga.53544$Lr4.1...@twister2.libero.it...

Ciao omnitow
Per curiosità ho provato i tuoi test e a me funzionano, che versione di ADO
utilizzi ?.
Hai preso in esame la possibilità di utilizzare BINARY_CHECKSUM per
controllare se il record è cambiato ?
Ciao Giorgio.


Ciao, omnitow


Io l'ho provato con il seguente codice e credo che il non funzionamento di
UnderlyingValue sia provocato dal cursore statico sul lato client  (cursore
che utilizzo anche io per gli oggetti dell ADP)
Il codice Che ho usato è
----------------------------------------------------
Sub Prova()
Dim Rs As ADODB.Recordset
Dim Cn As ADODB.Connection
Set Cn = New ADODB.Connection
Set Rs = New ADODB.Recordset
Cn.Open "PROVIDER=SQLOLEDB.1;" & _
        "Data Source=(local);" & _
        "Initial Catalog=p00012003sql;" & _
        "User Id=sa;" & _
        "Password=Pwd"
    Rs.Open "Select Top 1 * FROM CO_Clienti Order By Codice", _
    Cn, adOpenKeyset, adLockOptimistic
    'Punto di interruzione per eseguire la variazione da altro ADP
    Debug.Print Rs!R_Sociale
   'Chiamo la funzione da te postata che controlla se il record è cambiato
    Debug.Print RsModificato(Rs)
   Rs.Close
   Cn.Close
   Set Rs = Nothing
   Set Cn = Nothing
Exit sub
Function RsModificato(Rc As ADODB.Recordset) As Boolean
Dim Modificati As Boolean
Dim Fi As ADODB.Field
  Modificati = False
  For Each Fi In Rc.Fields
      If Fi.UnderlyingValue <> Fi.OriginalValue Then
            Modificati = True
            Exit For
      End If
   Next Fi
RsModificato = Modificati
End Function
---------------------------------------------------
Ciao Giorgio.


Sfortunatamente Profiler non ce l'ho, ho la versione MSDE compresa nei cd di
office 2k professional,
In ogni modo ADO dovrà pure andare a leggere qualcosa :-)

Ho provato il tuo codice e mi sono accorto che non è il cursore Static lato
client il problema, utilizzando la CurrentProject.Connection per aprire il
recordset la propietà Underlyingvalue non funziona mentre aprendo una
seconda Cn si... sto access non finisce mai di stupirmi...
In ogni modo, anche a quanto detto su .it.sql, non mi sembra il caso di
utilizzare un'altra connessione oltre a quelle che access si apre da se,
metto da parte anche l'UnderlyingValue, ora provo con calma la
BINARY_CHECKSUM, che ripensandoci... :-)
A proposito ho provato quanto dicevi sul disconnetere e riconettere un adp,
funziona anche se ovviamente, visto i tempi di riconnessione di un adp, non
è applicabile nel contesto dei recordset disconnessi, mi servirà sicuramente
in altre occasioni
Ciao e grazie, omnitow