Salve. Chiedo cortesemente aiuto su un problema che non riesco a risolvere. Premetto che non sono un programmatore, diciamo che quando è indispensabile mi arrangio scrivendo qualche riga di codice in vba prendendo spunto dalla rete, ma stavolta non riesco a venirne a capo.
Riducendo all'osso il problema, ho un db con 2 tabelle:
1) Impiegati, con i campi:
- id_impiegato, chiave progressivo numerico;
- Nome: testo;
- Cognome: testo;
- id_mansione: codice della mansione.
2) Mansioni:
- id_mansione: chiave, testo;
- tipo_ansione: testo.
Le due tabelle sono legate in fk 1 a molti tramite il campo id_mansione. Volutamente banalissimo.
Sulla maschera Estrai_Dati ho piazzato un bottone premendo il quale viene creato un recordset tramite il quale vengono popolati i campi della sottomaschera Dati_Estratti. Il codice sull'evento on_click del bottone è il seguente:
Private Sub Comando4_Click()
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.AccessConnection
Set rs = New ADODB.Recordset
With rs
Set .ActiveConnection = cn
.Source = "SELECT Impiegati.id_impiegato, Impiegati.nome, Impiegati.cognome, Impiegati.id_mansione, Mansioni.tipo_mansione FROM Mansioni left JOIN Impiegati ON Mansioni.id_mansione = Impiegati.id_mansione"
.LockType = adLockOptimistic
.CursorType = adOpenKeyset
.Open
End With
Set Me.Dati_Estratti.Form.Recordset = rs
Set rs = Nothing
Set cn = Nothing
End Sub
I 4 campi della sottomaschera visualizzata in formato foglio dati sono:
- Nome: textbox con origine controllo nome;
- Cognome: textbox con origine controllo cognome;
- C.Mansione: combobox con origine controllo id_mansione e origine riga la query select * from Mansioni ;
- Tipo Mansione: una textbox con origine controllo tipo_mansione.
Il motivo per il quale ho messo la texbox Tipo Mansione subito dopo la combo C.Mansione è ovvio: nella sottomaschera in formato foglio dati la combo conterrà il codice della mansione, modificabile, mentre la textbox la descrizione della mansione.
Ora , premendo il bottone il recordset viene caricato regolarmente, e questo va bene, però non è aggiornabile, e questo è un guaio!
Il recordset diventa aggiornabile se elimino dalla sottomaschera il campo Tipo Mansione. Ma la cosa che mi lascia veramente perplesso è che se eseguo la stessa query del codice vba che carica il recordset dalla sezione Query di Access, questa produce un recordset che è regolarmente aggiornabile, perchè?