Problemas con el DataReport de Visual Basic 6.0

Ojala y me pudieras ayudar, mira estoy haciendo un programa en el cual saco un reporte de una orden, en la cual incluyo refacciones, mano de obra y reparación y pintura.
El reporte debe de agrupar por cada una de las categorías que te menciono arriba, para eso ocupo un command_Grouping y lo hace perfectamente ya que esta enlazado con una tabla temporal que lleno antes de mostrar el datareport, el problema que tengo es que no se actualiza, es decir imaginate que ocupo un faro y una defensa en las refacciones, al modificar por ejemplo a dos faros y una defensa, el data report se queda con los datos anteriores (un faro y una defensa)tengo que cerrar completamente el programa para que se actualize la información desplegada en el data report. Como le hago o que instrucción(es) pongo para que la información se actualize en el datareport sin tenerme que salir del programa ya que tengo enlazados los campos directamente a una tabla temporal la cual la limpio y la lleno antes de desplegar el datareport y esta esta enlazada a los text del datareport.

1 respuesta

Respuesta
1
Creo que me he equivocado y los "arboles me han impedido ver el bosque". La solución finalmente va a ser más sencilla. Prueba a escribir el siguiente código en tu DataReport:
Private Sub DataReport_Initialize()
DataEnvironment1.rsCommand1.Requery
End Sub
Donde Command1 es el comando de tu DataEnvironment que utilizas para extraer los datos. Con esto debería ser suficiente para que se actualice el informe.
Hola, mira ya puse la instrucción que me indicaste, lo hago de la siguiente manera:
Private Sub DataEnvironment_Initialize()
DataEnvironment1.rsCommand1_Grouping.Requery
End Sub
Al parecer es la mejor opción pero me marca un error diciéndome lo siguiente:
Run-time error '3704':
La Operación no esta permitida si el objeto está cerrado.
Me podrías decir como se puede verificar si el objeto esta abierto o cerrado para poder indicarle cuando ejecutar la linea DataEnvironment1. rsCommand1_Grouping.Requery, ya que cuando me marca el error que te indico arriba me marca de amarillo la linea de código del dataenvironment
Gracias y Saludos, disculpa las molestias.
Disculpa que no te haya entendido, el reporte lo tengo enlazado desde diseño es decir no lo enlazo desde código.
Con este código borro la tabla:
SQL = "DELETE * FROM _tempDatosReporte"
db.Execute SQL
Con este For lleno otra vez la tabla, haciendo un barrido a un Msflex:
For I = 1 To Renglon - 1
For J = 0 To 0
uno = Form1.MSF.TextMatrix(I, J)
dos = Form1.MSF.TextMatrix(I, J + 1)
tres = Form1.MSF.TextMatrix(I, J + 2)
cuatro = Form1.MSF.TextMatrix(I, J + 3)
cinco = Form1.MSF.TextMatrix(I, J + 4)
seis = Form1.MSF.TextMatrix(I, J + 5)
SQL = "INSERT INTO _tempDatosReporte(Num_Orden,Cantidad,concepto,importe,unitario,clasificacion) VALUES('" & uno & "','" & dos & "','" & tres & "','" & cuatro & "','" & cinco & "','" & seis & "')"
db.Execute SQL
Next
Next
Y después de hacer todo lo anterior con esto muestro el reporte(cabe aclarar que el código que aquí te muestro esta dentro de un botón (command1) de un formulario):
DROrden.Show
DROrden.WindowState = vbMaximized
Ojala y me pudieras explicar como hago una transacción y un commit, o cerrar y abrir la conexión con el dataenvironment o el retardo, ya que no conozco muy bien los trucos del datareport.
Muchas Gracias y Saludos
Se me ocurre que el problema puede deberse a una cuestión de sincronización entre conexiones distintas, es decir, por un lado utilizas una conexión a la base de datos para operar con tu aplicación y por otro utilizas el DataEnvironment para lanzar el informe (son 2 conexiones distintas). Independientemente de que esta sea tu situación o no yo probaría lo siguiente:
* El código que se encarga de borrar la temporal e insertar la nueva información debería estar incluido dentro de una transacción, asegurándote de hacer el Commit antes de hacer nada con el Datareport.
* Si lo anterior no fuera suficiente cerraría/abriría la conexión del DataEnvironment justo después de hacer el Commit anterior.
* Como último recurso añadiría un retardo (un par de segundos sería suficiente) entre el commit y el lanzamiento del informe.
Si nada de esto funciona pásame el trozo de código que realiza estas tareas para buscar otras posibles causas.
Muchas gracias, ya quedo resuelto puse la linea de código en el lugar correcto ya que me había equivocado, para ello tuve que agregar la linea comprobando si esta cerrado o no el objeto, espero seguir contanto con tu ayuda posteriormente, te sacaste un 100, Muchas Gracias, Saludos
Puedes comprobar el estado del objeto mediante la siguiente comparación:
DataEnvironment1.rsCommand1_Grouping.State = adStateClosed
Ahora bien, no es al inicializar el DataEnvironment donde tienes que hacer el Requery, debes hacerlo cada vez que lanzas el DataReport, no has colocado la instrucción en el sitio correcto, observa nuevamente el código.
Private Sub DataReport_Initialize() 'El evento es el de DataReport, no el de DataEnvironment
DataEnvironment1.rsCommand1.Requery
End Sub
Tranquilo que no es molestia ninguna, además, prefiero que preguntes nuevamente hasta solucionar el problema a que te conformes con una primera respuesta y me des una valoración pobre.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas