Principales respuestas
agregar un nuevo registro usando ADODB.Recorset en visual basic 6.0

Pregunta
-
Hola soy nuevo en esto y quiero agregar un registro nuevo pero no me lo permite, este es mi codigo:
Dim Cn As New ADODB.Connection
Private WithEvents Rs As ADODB.Recordset
_________________________________________________
Private Sub CmdAnterior_Click()
If Rs.BOF = False Then
Rs.MovePrevious
End If
End Sub
_________________________________________________
Private Sub CmdCerrar_Click()
Rs.Close
Cn.Close
End
End Sub
_________________________________________________________________________________
Private Sub CmdNuevo_Click()
If Rs.EOF = False Then
Rs.MoveLast 'TENGO UN BOTON LLAMADO NUEVO PERO NO ME AGREGA NADA
Rs.AddNew 'Y MARCA ERROR, Y NO SE COMO HACERLE
End If
End Sub
_________________________________________________________________________________
Private Sub CmdPrimero_Click()
Rs.MoveFirst
End Sub
__________________________________________________
Private Sub CmdSiguiente_Click()
If Rs.EOF = False Then
Rs.MoveNext
End If
End Sub
__________________________________________________
Private Sub CmdUltimo_Click()
Rs.MoveLast
End Sub
__________________________________________________
Private Sub Form_Load()
Set Rs = New ADODB.Recordset
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Archivos de programa\Microsoft Visual Studio\VB98\EJERCICIOS\EJERCICIOprueba\BaseDatos\Codex.mdb;Persist Security Info=False"
Rs.Source = "CArticulos"
Rs.CursorType = adOpenKeyset
Rs.LockType = adLockOptimistic
Rs.Open "select * from CArticulos", Cn
Rs.MoveFirst
TxtClave.Text = Rs.Fields(0)
TxtBarra.Text = Rs.Fields(1)
TxtMarca.Text = Rs.Fields(2)
TxtTipo.Text = Rs.Fields(3)
TxtCodigo.Text = Rs.Fields(4)
TxtDescripcion.Text = Rs.Fields(5)
TxtUnidad.Text = Rs.Fields(6)
End Sub
_____________________________________________________________
Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Rs.BOF = True Then
Rs.MoveFirst
ElseIf Rs.EOF = True Then
Rs.MoveLast
Else
TxtClave.Text = Rs.Fields(0)
TxtBarra.Text = Rs.Fields(1)
TxtMarca.Text = Rs.Fields(2)
TxtTipo.Text = Rs.Fields(3)
TxtCodigo.Text = Rs.Fields(4)
TxtDescripcion.Text = Rs.Fields(5)
TxtUnidad.Text = Rs.Fields(6)
End If
End Sub
Espero me puedan ayudar gracias
Respuestas
-
En el código del botón de añadir registro no tiene sentido que hagas un movelast
Private Sub CmdNuevo_Click()
If Rs.EOF = False Then
Rs.AddNew
End If
End SubEn el load puedes quitar la linea Rs.Source = "CArticulos" porque ya se define la tabla en la clausula Open.
¿Que error te muestra al hacer rs.AddNew ?
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
-
El error te lo da porque estás asignando un valor nulo. Puedes controlar esta situación haciendo
Txtmarca.Text = vbNullString & Rs.Fields(2)
Esto debes hacerlo en todas las asignaciones.
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
-
Deberías usar los nombres de los campos en lugar de los números para ver el código más claro.
Bueno, se trata de un campo que no puede estar vacío. Puedes controlarlo con
If Not String.IsNullOrEmpty(TxtMarca.Text) Then
Rs.Fields(2) = TxtMarca.Text
Endif
Como en la respuesta anterior te aconsejo que hagas esto con todos los campos que no puedan tener valores vacíos.
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
Todas las respuestas
-
En el código del botón de añadir registro no tiene sentido que hagas un movelast
Private Sub CmdNuevo_Click()
If Rs.EOF = False Then
Rs.AddNew
End If
End SubEn el load puedes quitar la linea Rs.Source = "CArticulos" porque ya se define la tabla en la clausula Open.
¿Que error te muestra al hacer rs.AddNew ?
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
-
Hola Javier J, ya puse la parte que me marcaste en el boton Nuevo pero me sigue mandando el error
Error '94' en tiempo de ejecucion:
Uso no valido de Null
y al depurar me muestra la linea siguiente:
Private Sub rs_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, ByVal pError As ADODB.Error, adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
If Rs.BOF = True Then
Rs.MoveFirst
ElseIf Rs.EOF = True Then
Rs.MoveLast
Else
TxtClave.Text = Rs.Fields(0)
TxtBarra.Text = Rs.Fields(1)TxtMarca.Text = Rs.Fields(2) ------esta linea es la que me marca
TxtTipo.Text = Rs.Fields(3)
TxtCodigo.Text = Rs.Fields(4)
TxtDescripcion.Text = Rs.Fields(5)
TxtUnidad.Text = Rs.Fields(6)
End If
End SubTodos los campos son de texto y admiten valores nulls, solamente el primer campo llamado "clave" es "autonumerico" y tiene clave principal,
-
El error te lo da porque estás asignando un valor nulo. Puedes controlar esta situación haciendo
Txtmarca.Text = vbNullString & Rs.Fields(2)
Esto debes hacerlo en todas las asignaciones.
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
-
Muchas Gracias, Javier J, ya no aparece el error '94'
ya agrega el registro nuevo, pero solo agrega el campo de clave "Principal"y los demas datos no, entiendo que al dar click en el boton "Nuevo" agrega todo, solo que no comprendo como limpiar las cajas de texto antes de dar click al boton "Nuevo"
hice lo siguiente pero me marca error: "El campo "marca" no puede tener longitud cero"
Private Sub CmdNuevo_Click()
If Rs.EOF = False Then
Rs.AddNew ---------------- aquí anexa el nuevo registro
Rs.Fields(0) = TxtClave.Text
Rs.Fields(1) = Val(TxtBarra.Text)
Rs.Fields(2) = TxtMarca.Text
Rs.Fields(3) = TxtTipo.Text
Rs.Fields(4) = TxtCodigo.Text
Rs.Fields(5) = TxtDescripcion.Text
Rs.Fields(6) = TxtUnidad.Text
End If
End Sub
________________________________________
Private Sub CmdGuardar_Click()
Rs.Update --------------------------- al dar click en "Guardar" me marca el error
End SubTe agradeceria contar con tu ayuda nuevamente
-
Deberías usar los nombres de los campos en lugar de los números para ver el código más claro.
Bueno, se trata de un campo que no puede estar vacío. Puedes controlarlo con
If Not String.IsNullOrEmpty(TxtMarca.Text) Then
Rs.Fields(2) = TxtMarca.Text
Endif
Como en la respuesta anterior te aconsejo que hagas esto con todos los campos que no puedan tener valores vacíos.
Saludos, Javier J
- Marcado como respuesta 2014juan2014 miércoles, 12 de noviembre de 2014 15:08
-