Newsgroup: it.comp.lang.visual-basic
Titolo: ADO: Reperire campo contatore

Io uso VB6-SP1 ADO-Jet.
In ADO esiste la proprietà Bookmark ma non la LastModified.
Come reperire quindi il campo contatore appena creato con Addnew-Update ?
Dopo l'update il puntatore rimane sull'ultimo record creato ma il contatore
non è aggiornato e risulta Null.
Si puo' memorizzare il bookMark, fare un requery ed ottenere così il
contatore (metodo anche alquanto dispendioso se considero il piccolo valore
da recuperare).
Tuttavia se l'operazione viene eseguita su un recordset la cui istruzione
SQL contiene WHERE, non posso più avvalermi del metodo requery.
Considerato che è un'operazione di cui si ha bisogno spesso penso che sia un
argomento importante.
ADO: sempre più semplice, veloce ed immediato  rispetto a DAO !!!!
Grazie,
Ciao,
Riccardo Guirrini
Web :          
http://space.tin.it/computer/rguirrin
E-Mail:         
del...@tin.it

non è aggiornato e risulta Null.
Probabilmente utilizzi un Recordset non adatto allo scopo.
Penso che tu stia utilizzando un Recordset con CursorLocation = adUseClient;
in questo caso il Counter non è disponibile perchè il Recordset utilizza la
libreria dei cursori messa a disposizione direttamente dagli ADO e i dati
sono una specie di istantanea scattata al momento dell'apertura e conservata
sul client (che poi nel tuo caso il Client ed il Server coincidano, non fa
differenza). Per vedere i dati diversi da quelli che hai inserito tu (ovvero
quelli inseriti da altri o dallo stesso motore del DataBase, e il Counter
rientra in questa categoria) non c'è altro modo che scattare di nuovo la
foto.
Se invece utilizzi un cursore lato server il Contatore è disponibile
regolarmente dopo l'Insert o l'Update. Più sotto c'è un esempio minimale
funzionante.
Ho visto anche un tuo messaggio successivo sull'argomento con un articolo
tratto dalla Knowledge Base.
In verità anche lì il problema è reperire il Counter con un cursore lato
Client, oppure utilizzando in SQL delle stored procedure che aggiornano più
tabelle. Penso che il tuo problema sia più limitato.
In molti casi i cursori lato Client sono convenienti in quanto risultano più
performanti e liberano più alla svelta il Server di DataBase garantendo una
migliore scalabilità, però c'è un rovescio della medaglia, come hai potuto
notare.
Io per i recordset aggiornabili utilizzo per lo più cursori lato server,
cercando di farmi restituire meno record possibile (spesso uno solo).
Esempio di recupero del Contatore
---------------------------------
Su una form metti due TextBox (Text1 e Text2) e un Command Button
(Command1).
Poi inserisci queste routine che utilizzano a titolo di esempio il file
Biblio.mdb che dovresti avere nella directory del VB.
Option Explicit
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Private Sub Command1_Click()
Dim strNuovo As String
strNuovo = InputBox("Inserisci il nuovo autore")
If strNuovo <> "" Then
    rs.AddNew "Author", strNuovo
    Text1 = rs!Au_Id
    Text2 = rs!Author
End If
End Sub
Private Sub Form_Load()
Set cn = New ADODB.Connection
cn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Data
Source=Biblio.mdb"
cn.Open
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseServer
rs.Open "SELECT * FROM Authors ORDER BY Author;", cn, adOpenKeyset,
adLockOptimistic, adCmdText
Text1 = rs!Au_Id
Text2 = rs!Author
End Sub
Private Sub Form_Unload(Cancel As Integer)
rs.Close
Set rs = Nothing
cn.Close
Set cn = Nothing
End Sub
--------------------------------
Dopo l'inserimento vedrai in Text2 il nome del nuovo autore che hai inserito
ed in Text1 l'ID che il Jet ha attribuito al nuovo record.
Ciao,
   <--< Nik >-->
Per rispondermi in E-Mail togliere "deleteme" dall'indirizzo.
To reply me by E-Mail remove "deleteme" from my address.

.....