Newsgroup: it.comp.lang.visual-basic
Titolo: Id Record su ADO

Buonasera a tutti,
utilizzo ado per una connessione ad un db access con un programmino su Vb6.
Con il metodo AddNew, preparo l'inserimento del nuovo record ma mi trovo di 
fronte al seguente problema:
Ho due campi
ID
CODICEID
Id � il contatore automatico, CodiceID � un ulteriore identificativo non 
univoco che in taluni casi deve essere  uguale all'ID.
Io tuttavia, non possa sapere qual � l'ID prima di aver updatato il 
record... Come � possibile risolvere?
Conm DAO, appena chiamato il metodo addnew, l'id record era gi� disponibile, 
ma con DAO le condizioni sono diverese e non so come risolvere.
In questo casa avrei
RsCliente!ID = ?
RsCliente!CodiceID = RsCliente!ID e cio� valore nullo.
Spero di essere stato chiaro.
Grazie
 

 Grazie
Buongiorno...
http://database.html.it/articoli/leggi/715/recuperare-lid-dellultimo-record-inserito/

In ADO devi per forza invocare l'Update del recorset per avere l'id.
In net la cosa invece � totalmente diversa perche il dataset � slegato dal 
DB.

 ha scritto nel messaggio 
news:c2ff219e-8e0a-4bc5...@k41g2000yqm.googlegroups.com...

Grazie Wodka...sei come sempre EXTRAFORTE!!
Purtroppo non ho risolto con quell'articolo...o meglio, � esattamente quello 
che ho sempre fatto ma non mi da il risultato voluto,
quindi desumo di essermi spiegato come un libro chiuso :D
Il campo ID che � un contatore, che non ammette duplicati, lo potr� avere 
solo dopo aver dato l'istruzione UPDATE, e fin qui ...
Il problema sta l�...contestualmente, io ho un campo dello stesso recordset 
che deve (anzi...pu�) essere uguale alla chiave univoca dell'ID,
ma questo dovrei saperlo gi� prima di aver dato l'update, no?
Ecco che nasce la domanda...'ma come sfacc..faccio m�?" :-((
Sossio 

Forse dovresti dare pi� indizi su cosa stai facendo, magari c'� un modo 
diverso.
Non vedo che fastidio ti dia di chiamare l'update, ottenere l'id e poi 
riaggiornare il tuo recordset.
In alternativa potresti adottare un tabella secondaria su che ha un solo 
campo Id.
Ogni volta in questa tabella inserisci un record e ti prendi l'id 
sicuramente univoco e lo usi nell'altra tabella dove sarai tu ad assegnare 
l'id e non access in automatico. 

 riaggiornare il tuo recordset.
Si, mi piace. Potrebbe essere una soluzione. Come faccio? Dopo l'update 
eseguo una execute?
In questo caso come riferimento, utilizzerei l'id appena trovato, giusto?
Grazie comunque a tutti.
Sossio


Tieni presente che se usi ADO, hai COMUNQUE a disposizione la variabile 
@@IDENTITY anche per Access (e non solo per SQL Server).
Quindi basta una sola update (niente recordset eh):
CommandText = "INSERT INTO Tabella (IDRif, Campo2, etc etc) VALUES 
([@@IDENTITY] + 1, '" & txtCampo2.Text &"', ...)"
Connection.Execute CommandText
HTH
Bye
Raf
 

 Quindi basta una sola update (niente recordset eh):
qui non ti ho seguito bene...cosa vuoi dire con niente recordset?
Dovrei effettuare la normale archiviazione del record con
addnew
campi
campi
campi
update
e immediatamente l'istruzione commandtext etc?
Merci
Sox 

 e immediatamente l'istruzione commandtext etc?
Significa che per aggiungere la riga nella tabella in questo modo, invece di 
usare un recordset ADO come hai descritto tu, si esegue una query di INSERT 
INTO (tramite il metodo Execute dell'oggetto Connection o Command).
In tal modo con UNA SOLA istruzione esegui l'append della riga, quello che 
devi fare prima ï¿½ comporre opportunamente la stringa da passare alla 
Execute.
Es.
Dim conn As New Connection
conn.Open ...
Dim CommandText As String
CommandText = "INSERT INTO <Tabella> (<campo1>,<campo2>,...) VALUES 
(<valore1>,<valore2>,...)"
conn.Execute CommandText
Tutto qui.
Ciao
Raf