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

Run-Time error '3219': La operación no está permitida en este contexto.

Estas en el tema de Run-Time error '3219': La operación no está permitida en este contexto. en el foro de Visual Basic clásico en Foros del Web. Hola tengo este problema... Run-Time error '3219' La operación no está permitida en este contexto. Les explico la situación, estoy haciendo un sistemita de presupuestos, ...
  #1 (permalink)  
Antiguo 05/03/2009, 11:29
 
Fecha de Ingreso: septiembre-2007
Mensajes: 55
Antigüedad: 16 años, 7 meses
Puntos: 0
Exclamación Run-Time error '3219': La operación no está permitida en este contexto.

Hola tengo este problema... Run-Time error '3219' La operación no está permitida en este contexto.

Les explico la situación, estoy haciendo un sistemita de presupuestos, el tema es el siguiente... cuando agrego un producto, este se guarda en una tabla temporal, y permite seguir agregando... cuando ya no se desean agregar mas productos al presupuesto, al cerrar ese form, el formulario principal contiene un MSHFlexGrid que se actualiza... lo lleno por una funcion creada en un modulo que realiza una consulta sql:

Function Actualiza_grilla()

id = Format(frm_presupuesto.lbl_numero.Caption, "000-00000")

If rst_actualiza.State = adStateOpen Then rst_actualiza.Close

rst_actualiza.Open "SELECT cantidad, codigo, descripcion, p_uni, importe " & _
"FROM Presu_tempo WHERE id='" & id & "'", cnn

rst_actualiza!p_uni = rst_actualiza!p_uni * 1

Set frm_presupuesto.MSHFlexGrid1.DataSource = rst_actualiza

frm_presupuesto.MSHFlexGrid1.Refresh

With frm_presupuesto.MSHFlexGrid1
.Cols = 5

.RowHeight(0) = 0

.ColWidth(0) = 1000
.ColAlignmentFixed(0) = 3
.ColAlignment(0) = 3

.ColWidth(1) = 1500
.ColAlignmentFixed(1) = 3
.ColAlignment(1) = 1

.ColWidth(2) = 3500
.ColAlignmentFixed(2) = 3
.ColAlignment(2) = 3

.ColWidth(3) = 1000
.ColAlignmentFixed(2) = 3
.ColAlignment(2) = 3

.ColWidth(4) = 1000
.ColAlignmentFixed(2) = 3
.ColAlignment(2) = 3
End With

For i = 0 To Val(frm_presupuesto.MSHFlexGrid1.Rows) - 1 Step 1
frm_presupuesto.MSHFlexGrid1.TextMatrix(i, 4) = CCur(Val(frm_presupuesto.MSHFlexGrid1.TextMatrix(i , 3)) * Val(frm_presupuesto.MSHFlexGrid1.TextMatrix(i, 0)))
frm_presupuesto.MSHFlexGrid1.TextMatrix(i, 3) = CCur(Val(frm_presupuesto.MSHFlexGrid1.TextMatrix(i , 3)) * 1)
frm_presupuesto.MSHFlexGrid1.TextMatrix(i, 4) = Format(frm_presupuesto.MSHFlexGrid1.TextMatrix(i, 4), "standard")
Next

End Function

al ejecutar por primera vez, esa consulta funciona... pero al ejecutarlo por 2da vez, me tira error en la siguiente linea...

If rst_actualiza.State = adStateOpen Then rst_actualiza.Close

marcandome lo que señale en rojo como el error... quisiera saber porque, es la primera vez que me pasa...

Espero una respuesta... gracias...
  #2 (permalink)  
Antiguo 05/03/2009, 23:15
 
Fecha de Ingreso: febrero-2009
Ubicación: Villa Ocampo - Santa Fe
Mensajes: 100
Antigüedad: 15 años, 2 meses
Puntos: 0
Respuesta: Run-Time error '3219': La operación no está permitida en este contexto.

prueba seteando el recordset cada vez que llamas a la función

Function Actualiza_grilla()

set rst_actualiza = New ADODB.RecordSet

id = Format(frm_presupuesto.lbl_numero.Caption, "000-00000")

If rst_actualiza.State = adStateOpen Then rst_actualiza.Close

rst_actualiza.Open "SELECT cantidad, codigo, descripcion, p_uni, importe " & _
"FROM Presu_tempo WHERE id='" & id & "'", cnn



cuentanos como te fue
  #3 (permalink)  
Antiguo 06/03/2009, 03:45
Colaborador
 
Fecha de Ingreso: enero-2008
Ubicación: Unas veces aquí, otras veces allí
Mensajes: 1.482
Antigüedad: 16 años, 3 meses
Puntos: 37
Respuesta: Run-Time error '3219': La operación no está permitida en este contexto.

Hola, como te dice Valentino, debes setear el recordset al entrar en la función, pero lo que ya no tiene sentido es poner esta instrucción:

If rst_actualiza.State = adStateOpen Then rst_actualiza.Close

Porque cuando se asigna el recordset a la variable 'rst_actualiza' el objeto recordset siempre está cerrado.

Por otra parte, hay algunas cosas que me llaman la atención:

rst_actualiza!p_uni = rst_actualiza!p_uni * 1

¿Qué es lo que quieres hacer? pues le estás asignando el mismo valor (el resultado de un número multiplicado por la unidad es siempre el mismo número).

For i = 0 To Val(frm_presupuesto.MSHFlexGrid1.Rows) - 1 Step 1

La función Val sobra, ya que la propiedad Rows del control MSHFlexGrid devuelve un Long.
La instrucción Step 1 sobra ya que en un bucle For..Next siempre se salta paso a paso (de uno en uno).
Esta instrucción se suele poner si quieres realizar el bucle de dos en dos (o mas) o si se quiere hacer de atrás hacia adelante (Step -1).

Saludos
  #4 (permalink)  
Antiguo 11/03/2009, 15:46
 
Fecha de Ingreso: septiembre-2007
Mensajes: 55
Antigüedad: 16 años, 7 meses
Puntos: 0
Respuesta: Run-Time error '3219': La operación no está permitida en este contexto.

antes que anda quería agradecer a Valentino por darme esa solució... funcó de maravilla ... Y en segundo lugar queria explicar el porque de la línea:

rst_actualiza!p_uni = rst_actualiza!p_uni * 1

Es algo que me olvide borrar xD... por andar probando cosas se ve que quedo colgada por ahi :D

Muchas gracias a todos!!!

:apla uso:
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 18:20.