Foros del Web » Programación para mayores de 30 ;) » Programación General » Visual Basic clásico »

Error "3021" en tiempo de Ejecucion VB 6

Estas en el tema de Error "3021" en tiempo de Ejecucion VB 6 en el foro de Visual Basic clásico en Foros del Web. Hola amigos q tal soy nuevo por aca. mi duda es la siguiente estoy haciendo mi TESIS y es sobre un sistema de compra y ...
  #1 (permalink)  
Antiguo 16/02/2010, 14:54
Avatar de chiper1  
Fecha de Ingreso: febrero-2010
Ubicación: Maracay, Venezuela
Mensajes: 16
Antigüedad: 14 años, 2 meses
Puntos: 0
Error "3021" en tiempo de Ejecucion VB 6

Hola amigos q tal soy nuevo por aca. mi duda es la siguiente estoy haciendo mi TESIS y es sobre un sistema de compra y venta de mercacia. todo lo demas esta super bn mi problema es este. tengo un FORMULARIO q es de eliminar pedidos alli tengo un boton de eliminar todos los pedidos pero al hacer click en el me lanza este error:

Error "3021" en tiempo de Ejecucion : el valor de BOF O EOF es True, o el actual registro se elimino; la operacion solicitada requiere un registro actual.


A mi parecer es que el sistema sigue leyendo la base de datos pero como no encuentra nada te lo dice pero COMO hago para corregirlo eso me aparece al eliminar los reistros Ayuda por favor... Urgentee. aca les dejo el codigo para que vean donde me aparece el error!

Dim rs_F16_Solicitante As New ADODB.Recordset
Dim rs_F16_CAB As New ADODB.Recordset
Dim rs_F16_DET As New ADODB.Recordset

Dim RS1 As New ADODB.Recordset
Dim RS2 As New ADODB.Recordset

Dim TXT1 As String
Dim TXT2 As String

Friend Sub Command1_Click()

If rs_F16_CAB.State = 1 Then rs_F16_CAB.Close
If Me.Option1.Value = True Then
rs_F16_CAB.Open TXT1 + " and pedido.idPersonal='" + Me.DataCombo1.BoundText + "'", nc, adOpenStatic, adLockOptimistic
End If
If Me.Option2.Value = True Then
d1 = Trim(CStr(DateValue(Me.DTPicker1.Value)))
D2 = Trim(CStr(DateValue(Me.DTPicker2.Value)))

cq = " (PEDIDO.FECHA>=DATEVALUE('" & d1 & "') AND PEDIDO.FECHA<=DATEVALUE('" + D2 + "')) "
rs_F16_CAB.Open TXT1 + " and " + cq, nc, adOpenStatic, adLockOptimistic
End If

Set RS1 = CrearTMPCAB1
If rs_F16_CAB.RecordCount > 0 Then
rs_F16_CAB.MoveFirst
Do
RS1.AddNew

RS1.Fields("ID_PEDIDO") = rs_F16_CAB.Fields("ID_PEDIDO")
RS1.Fields("NOMBRES") = rs_F16_CAB.Fields("NOMBRES")
RS1.Fields("FECHA") = rs_F16_CAB.Fields("FECHA")
RS1.Fields("DESCRIPCION") = rs_F16_CAB.Fields("DESCRIPCION")
RS1.Fields("AUTORIZADO") = rs_F16_CAB.Fields("AUTORIZADO")

RS1.Update
rs_F16_CAB.MoveNext
Loop While Not rs_F16_CAB.EOF
End If
Set Me.DataGrid1.DataSource = RS1
End Sub
Private Sub Command2_Click()
' CANCELAR ARTICULO

ID2 = RS1.Fields("ID_PEDIDO")
XX1 = RS2.Fields("COD_ARTICULO")
CNT1 = Trim(CStr(RS2.Fields("CANTIDAD")))

TX1 = "UPDATE ARTICULOS SET STOCK=STOCK+" + CNT1 + " WHERE CODIGO='" + XX1 + " '"
nc.Execute (TX1)
nc.Execute ("DELETE FROM DETALLE_PEDIDO WHERE ID_PEDIDO='" + ID2 + "' AND COD_ARTICULO='" + XX1 + " '")
Detalle
End Sub

Private Sub Command3_Click()
'ELIMINA PEDIDO

ID2 = RS1.Fields("ID_PEDIDO")

If RS2.RecordCount > 0 Then
RS2.MoveFirst
Do

XX1 = Trim(RS2.Fields("COD_ARTICULO"))
CNT1 = Trim(CStr(RS2.Fields("cantidad")))
TX1 = "UPDATE ARTICULOS SET STOCK=STOCK+" + CNT1 + " WHERE CODIGO='" + XX1 + " '"
nc.Execute (TX1)
nc.Execute ("DELETE FROM DETALLE_PEDIDO WHERE ID_PEDIDO='" + ID2 + "' AND COD_ARTICULO='" + XX1 + " '")

RS2.MoveNext
Loop While Not RS2.EOF

End If
nc.Execute ("DELETE FROM PEDIDO WHere id_pedido='" + ID2 + "'")
Me.Command1_Click
Me.Detalle
End Sub
Private Sub DataGrid1_RowColChange(LastRow As Variant, ByVal LastCol As Integer)
Detalle
End Sub

Private Sub Form_Load()
With ShockwaveFlash1

.Movie = App.Path & "\Inversiones.swf"

End With


TXT1 = "select pedido.id_pedido,solicitante.nombres,pedido.fecha, area.descripcion,pedido.autorizado from pedido,area,solicitante where pedido.idpersonal=solicitante.idPersonal and pedido.destino=area.idDepartamento"
TXT2 = "select detalle_pedido.COD_ARTICULO,articulos.descripcion, detalle_pedido.cantidad,detalle_pedido.estado from detalle_pedido,articulos where detalle_pedido.cod_articulo=articulos.codigo"

If rs_F16_Solicitante.State = 1 Then rs_F16_Solicitante.Close
rs_F16_Solicitante.Open "select IDPERSONAL,NOMBRES FROM SOLICITANTE", nc, adOpenStatic, adLockOptimistic
Set Me.DataCombo1.RowSource = rs_F16_Solicitante
Me.DataCombo1.BoundColumn = "IDPERSONAL"
Me.DataCombo1.ListField = "NOMBRES"
End Sub


Sub Detalle()
XX1 = RS1.Fields("ID_PEDIDO") aqui me da el error

If rs_F16_DET.State = 1 Then rs_F16_DET.Close
rs_F16_DET.Open TXT2 + " AND id_pedido='" + XX1 + "'", nc, adOpenStatic, adLockOptimistic

'COD_ARTICULO,descripcion,cantidad,estado
Set RS2 = CrearTMPDET1
If rs_F16_DET.RecordCount > 0 Then
rs_F16_DET.MoveFirst
Do
RS2.AddNew

RS2.Fields("COD_ARTICULO") = rs_F16_DET.Fields("COD_ARTICULO")
RS2.Fields("DESCRIPCION") = rs_F16_DET.Fields("DESCRIPCION")
RS2.Fields("CANTIDAD") = rs_F16_DET.Fields("CANTIDAD")
RS2.Fields("ESTADO") = rs_F16_DET.Fields("ESTADO")
RS2.Update
rs_F16_DET.MoveNext
Loop While Not rs_F16_DET.EOF
End If
Set Me.DataGrid2.DataSource = RS2
End Sub
  #2 (permalink)  
Antiguo 16/02/2010, 15:08
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: Error "3021" en tiempo de Ejecucion VB 6

No lo entiendo bien pero parece que te falta volver a setear el RS1 Set RS1 = CrearTMPCAB1 o quizas lo has cerrado por eso ya no puedes acceder a ese campo
  #3 (permalink)  
Antiguo 16/02/2010, 15:31
Avatar de chiper1  
Fecha de Ingreso: febrero-2010
Ubicación: Maracay, Venezuela
Mensajes: 16
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error "3021" en tiempo de Ejecucion VB 6

hola amigo weno el problema es el siguiente yo realizo un pedido al hacerlo se guarda en la base de datos luego me dirijo al form de pedidos y procedo a eliminarlos pero al hacer click en el boton de eliminar todos los pedidos me tira ese error ! es como si la base de datos sigue leyendo luego de eliminar el ultimo registro pero como no tiene nada me tira ese error no soy un crack en Vb solo se poco ayuda please q es para mi tesis de grado
  #4 (permalink)  
Antiguo 16/02/2010, 17:35
Avatar de chiper1  
Fecha de Ingreso: febrero-2010
Ubicación: Maracay, Venezuela
Mensajes: 16
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error "3021" en tiempo de Ejecucion VB 6

hola amigo weno el problema es el siguiente yo realizo un pedido al hacerlo se guarda en la base de datos luego me dirijo al form de pedidos y procedo a eliminarlos pero al hacer click en el boton de eliminar todos los pedidos me tira ese error ! es como si la base de datos sigue leyendo luego de eliminar el ultimo registro pero como no tiene nada me tira ese error no soy un crack en Vb solo se poco ayuda please q es para mi tesis de grado
  #5 (permalink)  
Antiguo 18/02/2010, 09:46
 
Fecha de Ingreso: mayo-2009
Mensajes: 238
Antigüedad: 15 años
Puntos: 7
Respuesta: Error "3021" en tiempo de Ejecucion VB 6

Antes que nada utiliza la etiqueta code cuando pongas codigo por que es dificil de leer utiilza el boton #

El problema ocurre al precionar el command3 el error sucede al llegar al sub Me.Detalle y por alguna razon el XX1 = RS1.Fields("ID_PEDIDO") ya no contiene nada por eso te da el error.
Código:
Private Sub Command3_Click()
'ELIMINA PEDIDO

ID2 = RS1.Fields("ID_PEDIDO")

If RS2.RecordCount > 0 Then
RS2.MoveFirst
Do

XX1 = Trim(RS2.Fields("COD_ARTICULO"))
CNT1 = Trim(CStr(RS2.Fields("cantidad")))
TX1 = "UPDATE ARTICULOS SET STOCK=STOCK+" + CNT1 + " WHERE CODIGO='" + XX1 + " '"
nc.Execute (TX1)
nc.Execute ("DELETE FROM DETALLE_PEDIDO WHERE ID_PEDIDO='" + ID2 + "' AND COD_ARTICULO='" + XX1 + " '")

RS2.MoveNext
Loop While Not RS2.EOF

End If
nc.Execute ("DELETE FROM PEDIDO WHere id_pedido='" + ID2 + "'")
Me.Command1_Click
Me.Detalle
End Sub
Todavia no capto bien lo que pasa aunque prueba asi para verificar que el valor de XX1 todavia contiene algo.

Código:
Private Sub Command3_Click()
'ELIMINA PEDIDO

ID2 = RS1.Fields("ID_PEDIDO")

If RS2.RecordCount > 0 Then
RS2.MoveFirst
Do

XX1 = Trim(RS2.Fields("COD_ARTICULO"))
CNT1 = Trim(CStr(RS2.Fields("cantidad")))
TX1 = "UPDATE ARTICULOS SET STOCK=STOCK+" + CNT1 + " WHERE CODIGO='" + XX1 + " '"
nc.Execute (TX1)
nc.Execute ("DELETE FROM DETALLE_PEDIDO WHERE ID_PEDIDO='" + ID2 + "' AND COD_ARTICULO='" + XX1 + " '")

RS2.MoveNext
Loop While Not RS2.EOF

End If
nc.Execute ("DELETE FROM PEDIDO WHere id_pedido='" + ID2 + "'")
Me.Command1_Click
Text1= RS1.Fields("ID_PEDIDO")  'Este valor se pierde por alguna razon me parece que ocurre por que un par de lineas arriba utilizas DELETE y ahi se borra
End Sub
  #6 (permalink)  
Antiguo 18/02/2010, 09:51
Avatar de chiper1  
Fecha de Ingreso: febrero-2010
Ubicación: Maracay, Venezuela
Mensajes: 16
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Error "3021" en tiempo de Ejecucion VB 6

gracias hermano por la ayuda...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 23:40.