ho copiato un mio precedente progetto che funzionava bene ed era questo
codice:
Private Sub Csalva_Click()
Csalva.Enabled = False
  ' CONTROLLO LA VALIDITA' DEI CAMPI
  If Len(Trim(nome_categoria.Text)) = 0 Then
    lblMessaggio.Caption = "Inserire il cliente"
    nome_categoria.SetFocus
  ElseIf Len(Trim(descrizione.Text)) = 0 Then
    lblMessaggio.Caption = "Inserire la data"
    descrizione.SetFocus
  Else ' SE TUTTE LE CONDIZIONI SONO STATE SODDISFATTE...

    ' COMANDO SQL A SECONDA CHE SI TRATTI DI UNA INSERT O DI UN UPDATE
    Dim SQL As String
    ' MESSAGGIO DI CONFERMA (SECONDO LO STESSO CRITERIO DESCRITTO SOPRA)
    Dim conferma As String

    ' COME SOPRA...
    s = Split(ricerca.Text, " ")

    Set cn = New ADODB.Connection
    Set rs = New ADODB.Recordset

    Const Provider As String = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source = C:\paghe.mdb"
    cn.Open Provider
    If ricerca.Text = "" Then ' ...ESEGUO LA INSERT
      SQL = "INSERT INTO categorie " _
      & "(nomecategoria, descrizione) " _
      & "VALUES " _
      & "('" & Replace(nome_categoria.Text, "'", "''") & "', " _
      & "'" & Replace(descrizione.Text, "'", "''") & "')"
      conferma = "Inserimento effettuato con successo"
    Else ' ...ESEGUO L'UPDATE
      SQL = "UPDATE categorie SET " _
      & "nomecategoria = '" & Replace(nome_categoria.Text, "'", "''") & "', " _
      & "descrizione = '" & Replace(descrizione.Text, "'", "''") & "' " _
      & "WHERE id = " & CInt(s(0))
      conferma = "Modifica effettuata con successo"
    End If

    ' ESEGUO IL COMANDO SQL CHE ARRIVA DELLA CONDIZIONE
    cn.Execute (SQL)
    lblMessaggio.Caption = conferma

    cn.Close

    ' PULISCO E RICARICO LA COMBO BOX
    ricerca.Clear
    Call Form_Load
  End If
End Sub