Visual Basic 6.0 y Crystal Reports 7.

Estoy intentando realizar listados en VB6 utilizando CR utilizando una tabla temporal creada por medio de la instrucción "create temp table".
La conexión a la BD la realizo por medio de ODBC.
El problema es que el CR no ve la tabla que yo he creado desde el VB debido a que abre una nueva conexión al gestor, ¿cómo puedo hacer para que el CR7 use la misma conexión que yo tengo abierta?.
Respuesta
1
Prueba con el siguiente código que me funciona en SQL Server usando la conexión que genero en Vb con el ADODB. Connection
set cnMiConexion = new ADODB.Connetcion
cnMiConnexion.ConnectionString = "DSN=dsBaseX;User Id=sa;Password=abc"
cnMiConexion.open
CrystalReport1.Connect = cnMiConexion
CrystalReport1.DataFiles(0) = "BaseX.dbo.Tabla1"
CrystalReport1.DataFiles(1) = "BaseX.dbo.Tabla2"
CrystalReport1.DataFiles(2) = "BaseX.dbo.Tabla2"
CrystalReport1.DataFiles(3) = "BaseX.dbo.Tabla1"
CrystalReport1.Reportfilename = app.path & "\MiReporte.rpt"
CrystalReport1.Action = 1
Si tienes problemas escríbeme de nuevo y explícame en general como es el procedimiento para generar la tabla temporal y como hiciste el reporte(pensando en que debió existir la(s) tabla(s) al momento de desarrollarlo)
He probado lo que me dices aquí, pero no parece funcionar. El gestor de BD, en mi caso, es Informix y, aunque al hacer "crystalreport1.connect = cnMiConexión" no da ningún error, es grande mi sorpresa al ver que al abrir el report tengo dos conexiones abiertas a pesar de todo, y claro no ve la tabla temporal.
Para realizar el diseño del listado he creado la tabla en la BD, generado el fichero .rpt y después la he borrado.
Necesito usar una tabla temporal, o algo parecido, debido a que los datos tengo que elaborarlos para realizar el listado.
El procedimiento para crear la tabla temporal no es más que la ejecución de una instrucción sql igual a cualquier creación de tabla, salvo que la instrucción es "create temp table ..." en lugar de "create table ..." habitual.
Había pensado en hacer la creación de la tabla normalmente, pero eso haría que cualquier usuario que entrara la vería y, por lo tanto, tendría que buscar otro artificio para separar los datos de los diferentes usuarios que intenten ejecutar el mismo listado. Al hacerlo de esta manera sería lo mismo crear la tabla y utilizar una columna discriminadora por usuario/conexión.
En fin, que estoy un poco atascado.
Gracias por tu respuesta.
Creo que no quedan muchas opciones.
Yo lo que hago es generar la tabla temporal en firme y cuando el usuario ingresa al sistema le genero un "código único de sesión" por fecha en que se registró y un número consecutivo.
Al usar cualquier reporte donde necesite tablas auxiliares o temporales todo va en base a ese código, así no importa si el usuario ingresa n veces al sistema, cada vez tendrá una sesión distinta.
Al salir, elimino todo lo que haya podido generar en los temporales.
Si por alguna causa finalizó anormalmente la ejecución del sistema y por lo tanto no pudo eliminar los temporales, puedo eliminarlos Yo mismo(o con una tarea programada) considerando la fecha de ingreso al sistema, así por ejemplo, elimino todos los anteriores al día de hoy.
En general son pocos los registros que puedan quedar por una finalización anormal, normalmente finalizan bien.
Espero que te sirva, si tienes algún otra duda o comentario dímelo
Hasta pronto.
Bueno, mi gozo en un pozo. La solución que me das es una de las que barajé desde el principio, pero quería utilizar la funcionalidad que da el gestor de BD para no tener que hacerlo yo por programa.
Hacer un listado utilizando esta facilidad del gestor desde otros lenguajes es muy sencillo, pero aquí el problema parece estar en la comunicación entre el VB y el crystal.
En fin, gracias por tu ayuda e interés, aunque sea para descartar una posibilidad.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas