No me guarda los datos en la base de datos

Hola, soy novato en Visual Basic y estoy un poco desesperado porque no veo el error.
La cuestión es que cuando intento modificar o crear un nuevo registro no me lo crea en la Base de Datos real. Cuando modifico el registro parece que me lo ha modificado correctamente ya que navego por los registro y al volver al modificado me mantiene el cambio pero cuando salgo del programa y vuelvo a entrar no me ha cambiado nada y claro está que el la Base de Datos tampoco. Estoy un poco arto. Os pongo el código para que veáis en qué puede fallar.
Dim Bd As New ADODB.Connection
Dim Reg As New ADODB.Recordset
Dim RegAdmin As New ADODB.Recordset
Dim RegPos As Variant, RegFin As Variant, RegIni As Variant
Private Sub cmdFirst_Click()
Reg.MoveFirst
MostrarCliente
RegPos = Reg.Bookmark
End Sub
Private Sub cmdLast_Click()
Reg.MoveLast
MostrarCliente
RegPos = Reg.Bookmark
End Sub
Private Sub cmdModificar_Click()
Reg("Nombre_Fiscal") = Me.txtNombreF.Text
Reg("Cliente") = Me.txtDireccion.Text
Reg("NIF") = Me.txtNIF.Text
Reg("CPostal") = Me.txtCpostal.Text
Reg("Provincia") = Me.txtProvincia.Text
Reg("REF") = Me.txtRef.Text
RegAdmin.MoveFirst
RegAdmin.Find "Administrador= '" & Me.cboAdmin.Text & "'", , , 1
Reg("Administrador") = RegAdmin("id")
Reg.Update
Reg.Move 0
End Sub
Private Sub cmdNext_Click()
If RegPos < RegFin Then
 Reg.MoveNext
 MostrarCliente
 RegPos = Reg.Bookmark
End If
End Sub
Private Sub cmdPrevius_Click()
If RegPos > RegIni Then
    Reg.MovePrevious
    MostrarCliente
    RegPos = Reg.Bookmark
End If
End Sub
Private Sub cmdSalir_Click()
End
End Sub
Private Sub Command1_Click()
End Sub
Private Sub Form_Load()
InicializarBd
Form1.WindowState = 2
MostrarCliente
End Sub
Private Sub Form_Unload(Cancel As Integer)
Reg.Close
RegAdmin.Close
Bd.Close
End Sub
Sub InicializarBd()
Bd.Open "provider=Microsoft.jet.oledb.4.0;" & "Data source=BdViper.mdb"
Reg.Source = "BdClientes"
Reg.CursorType = adOpenKeyset
Reg.LockType = adLockBatchOptimistic
Reg.Open "SELECT * FROM BdClientes", Bd
RegAdmin.Source = "bdAdministradores"
RegAdmin.CursorType = adOpenKeyset
RegAdmin.LockType = adLockBatchOptimistic
RegAdmin.Open "select * from bdAdministradores", Bd
Reg.MoveLast
RegFin = Reg.Bookmark
Reg.MoveFirst
RegIni = Reg.Bookmark
Do While RegAdmin.EOF = False
    cboAdmin.AddItem RegAdmin("Administrador")
    RegAdmin.MoveNext
Loop
End Sub
Sub MostrarCliente()
Dim ad As Byte
ad = Reg("administrador")
If Len(Reg("nombre_fiscal")) > 0 Then
    Me.txtNombreF.Text = Reg("Nombre_Fiscal")
Else
    Me.txtNombreF.Text = ""
End If
Me.txtDireccion.Text = Reg("Cliente")
If Len(Reg("NIF")) > 0 Then
    Me.txtNIF.Text = Reg("NIF")
Else
    Me.txtNIF.Text = ""
End If
Me.txtCpostal.Text = Reg("CPostal")
Me.txtProvincia.Text = Reg("Provincia")
Me.txtRef.Text = Reg("REF")
RegAdmin.MoveFirst
RegAdmin.Find "ID= '" & ad & "'", , , 1
Me.cboAdmin.Text = RegAdmin("administrador")
Me.txtPoscion = Reg.Bookmark
End Sub

1 respuesta

Respuesta
En InicializarBd.
Antes del open de tu variable Conexión
Agrega esta linea y pruebas.
Bd.CursorLocation = adUseClient
Obviamente avisas sobre los resultados!
Mirando ejemplos por la web encontré una forma casi idéntica de conectar con la base de datos pero que me guardaba bien los datos en la base.
Dim Bd As New ADODB.Connection
Dim Reg As New ADODB.Recordset
Dim RegAdmin As New ADODB.Recordset
Sub InicializarBd()
Bd.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & _
                       App.Path & "\bdviper.mdb" & ";Persist Security Info=False"
Bd.Open
Reg.Open "Select * from bdClientes", Bd, adOpenKeyset, adLockOptimistic
RegAdmin.Open "select * from bdAdministradores", Bd, adOpenKeyset, adLockBatchOptimistic
End Sub
Todavía no se cual es el motivo por el cual ahora me funciona y con el anterior código no me guardaba los datos en la base.
De todas formas gracias.
Bien por ti. Que lo hayas resuelto.
Finaliza o descartar tu pregunta.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas