error 3021 en tiempo de ejecución
Hola como están sigo con el mismo error a la hora de agregar un registro a la base de datos.
sucede que hago la conexion a la base de datos manualmente por código y entonces este es el código que utilizo
Option Explicit
Private cnn As ADODB.Connection
Private WithEvents rst As ADODB.Recordset
Private Sub Form_Load()
'Crear los objetos
Dim ruta As String
Dim strBarra As String
cmdCancelar.Visible = False
cmdUpdate.Visible = False
Text1(0).Enabled = False
Text1(1).Enabled = False
cmdCancelar.Visible = False
cmdAdd.Visible = True
cmdMover(0).Enabled = True
cmdMover(1).Enabled = True
cmdMover(2).Enabled = True
cmdMover(3).Enabled = True
cmdRPTCocinero.Enabled = True
cmdSalir.Enabled = True
cmdDelete.Enabled = True
cmdEdit.Visible = True
strBarra = Right(App.Path, 1)
If strBarra = "" Then
ruta = "DIJO """ + App.Path + "ESCANDALLO(Ia).mdb"
Else
ruta = App.Path + "ESCANDALLO(Ia).mdb"
End If
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
'
'Crear la conexion manualmente
' Usar "Provider=Microsoft.Jet.OLEDB.3.51;" para bases de Access 97
' Usar "Provider=Microsoft.Jet.OLEDB.4.0;" para bases de Access 2000
With cnn
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & ruta & ";"
.Open
End With
' Indicarle de que tabla vamos a leer los datos
rst.Open "SELECT * FROM cocinero", cnn, adOpenDynamic, adLockOptimistic
'
' Asignar los nombres de los campos a las etiquetas
cmdMover_Click 0
End Sub
Private Sub rst_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)
' Cada vez que el registro actual cambie,
' se producirá este evento (igual que con el DataControl)
With rst
'----------------------------------------------------------------------
' Nota aclaratoria del 18/Dic/2003:
' Cuando en un Recordset no hay datos, tanto BOF como EOF devuelven True
'----------------------------------------------------------------------
If .EOF And .BOF Then
lblData.Caption = "No hay ningún registro activo"
.MoveFirst
ElseIf .EOF Then
cmdMover(2).Enabled = False
ElseIf .BOF Then
cmdMover(3).Enabled = False
Else
Text1(0) = .Fields("codcocin").Value
' Por si el dato es nulo, añadirle una cadena vacia
Text1(1) = .Fields("nombre") & ""
End If
End With
End Sub
Private Sub cmdMover_Click(Index As Integer)
' Mover según el botón pulsado
'On Error Resume Next
'
With rst
If Index = 0 Then ' Primero
.MoveFirst
cmdMover(2).Enabled = True
ElseIf Index = 1 Then ' Anterior
.MoveLast
cmdMover(3).Enabled = True
ElseIf Index = 2 Then ' Siguiente
.MoveNext
cmdMover(3).Enabled = True
ElseIf Index = 3 Then ' Último
.MovePrevious
cmdMover(2).Enabled = True
End If
'
If .BOF Then
.MoveFirst
lblData.Caption = "Es el principio de la base de datos"
ElseIf .EOF Then
.MovePrevious
lblData.Caption = "Es el final de la base de datos"
End If
End With
'
Err = 0
End Sub
Private Sub cmdAdd_Click()
On Error GoTo adderr
addnew:
rst.addnew
Exit Sub
adderr:
GoTo addnew
End Sub
la conexion es manualmente
saludos
llanes
sucede que hago la conexion a la base de datos manualmente por código y entonces este es el código que utilizo
Option Explicit
Private cnn As ADODB.Connection
Private WithEvents rst As ADODB.Recordset
Private Sub Form_Load()
'Crear los objetos
Dim ruta As String
Dim strBarra As String
cmdCancelar.Visible = False
cmdUpdate.Visible = False
Text1(0).Enabled = False
Text1(1).Enabled = False
cmdCancelar.Visible = False
cmdAdd.Visible = True
cmdMover(0).Enabled = True
cmdMover(1).Enabled = True
cmdMover(2).Enabled = True
cmdMover(3).Enabled = True
cmdRPTCocinero.Enabled = True
cmdSalir.Enabled = True
cmdDelete.Enabled = True
cmdEdit.Visible = True
strBarra = Right(App.Path, 1)
If strBarra = "" Then
ruta = "DIJO """ + App.Path + "ESCANDALLO(Ia).mdb"
Else
ruta = App.Path + "ESCANDALLO(Ia).mdb"
End If
Set cnn = New ADODB.Connection
Set rst = New ADODB.Recordset
'
'
'Crear la conexion manualmente
' Usar "Provider=Microsoft.Jet.OLEDB.3.51;" para bases de Access 97
' Usar "Provider=Microsoft.Jet.OLEDB.4.0;" para bases de Access 2000
With cnn
.ConnectionString = _
"Provider=Microsoft.Jet.OLEDB.3.51;" & _
"Data Source=" & ruta & ";"
.Open
End With
' Indicarle de que tabla vamos a leer los datos
rst.Open "SELECT * FROM cocinero", cnn, adOpenDynamic, adLockOptimistic
'
' Asignar los nombres de los campos a las etiquetas
cmdMover_Click 0
End Sub
Private Sub rst_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _
ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, _
ByVal pRecordset As ADODB.Recordset)
' Cada vez que el registro actual cambie,
' se producirá este evento (igual que con el DataControl)
With rst
'----------------------------------------------------------------------
' Nota aclaratoria del 18/Dic/2003:
' Cuando en un Recordset no hay datos, tanto BOF como EOF devuelven True
'----------------------------------------------------------------------
If .EOF And .BOF Then
lblData.Caption = "No hay ningún registro activo"
.MoveFirst
ElseIf .EOF Then
cmdMover(2).Enabled = False
ElseIf .BOF Then
cmdMover(3).Enabled = False
Else
Text1(0) = .Fields("codcocin").Value
' Por si el dato es nulo, añadirle una cadena vacia
Text1(1) = .Fields("nombre") & ""
End If
End With
End Sub
Private Sub cmdMover_Click(Index As Integer)
' Mover según el botón pulsado
'On Error Resume Next
'
With rst
If Index = 0 Then ' Primero
.MoveFirst
cmdMover(2).Enabled = True
ElseIf Index = 1 Then ' Anterior
.MoveLast
cmdMover(3).Enabled = True
ElseIf Index = 2 Then ' Siguiente
.MoveNext
cmdMover(3).Enabled = True
ElseIf Index = 3 Then ' Último
.MovePrevious
cmdMover(2).Enabled = True
End If
'
If .BOF Then
.MoveFirst
lblData.Caption = "Es el principio de la base de datos"
ElseIf .EOF Then
.MovePrevious
lblData.Caption = "Es el final de la base de datos"
End If
End With
'
Err = 0
End Sub
Private Sub cmdAdd_Click()
On Error GoTo adderr
addnew:
rst.addnew
Exit Sub
adderr:
GoTo addnew
End Sub
la conexion es manualmente
saludos
llanes