Problemas con el Control ADODC.
Buenas a todos,
Verán, tengo un problema:
He diseñado una aplicación que controla todos los movimientos de almacén y lleva un control de stock de los artículos.
La base de datos está hecha en Microsoft Access 2000.
Diseñé una aplicación que conecta mediante adodc a la bbdd de access pero sin usar código, directamente usando las propiedades de los controles. (record_source)
El problema lo tengo con los reportes y es un asunto que me trae de cabeza hace dias ya que no he podido terminar la aplicacion precisamente por eso.
Miren, me creo un Dataenvironment y un objeto command.
En el Dataenvironment enlazo a la bbdd en el connection1. Seleccione Microsoft Jet 4 OLE DB Provider. Pulso Siguiente y seleccione la bbdd de mi carpeta. Hago una prueba de conexión y me dice q es satisfactoria.
Luego creo un command y en sus propiedades hago lo siguiente:
En nombre de comando pongo : "report_articulos"
En conexión selecciono connection1 (la que enlacé con la bbdd)
Y luego, para seleccionar la tabla, campos, etc, en el origen de datos, en instrucción sql escribo algo parecido a esto:
Select * from articulos order by cod_articulo
Le doy a aceptar, luego creo el datareport, lo enlazo al dataenvironmen1 y todo funciona ok.
¿Cuál es mi problema?
Pues que cadena sql q escribí la tengo que poner en el momento que estoy escribiendo el programa...
¿Yo no podría hacer que se cambie esa cadena en tiempo real? Lo que necesito es por ejemplo, hacer que coja los datos de una tabla en concreto, pero de una que el usuario elija en ese momento, o un campo, o lo que sea... entienden??
Por ejemplo, imaginen que me piden los artículos que han entrando en la tabla (articulos) entre dos fechas.... y q las fecha las seleccione el usuario.... entienden? O que me pidan un listado de artículos clasificado por una categoría que el usuario seleccione en tiempo de ejecución...
Si alguien me puede ayudar le estaría muy agradecido ya que estoy bloqueado. :(
Mi direccion de email es [email protected]
Gracias a todos por leerme.
Un saludo,
pop.
Verán, tengo un problema:
He diseñado una aplicación que controla todos los movimientos de almacén y lleva un control de stock de los artículos.
La base de datos está hecha en Microsoft Access 2000.
Diseñé una aplicación que conecta mediante adodc a la bbdd de access pero sin usar código, directamente usando las propiedades de los controles. (record_source)
El problema lo tengo con los reportes y es un asunto que me trae de cabeza hace dias ya que no he podido terminar la aplicacion precisamente por eso.
Miren, me creo un Dataenvironment y un objeto command.
En el Dataenvironment enlazo a la bbdd en el connection1. Seleccione Microsoft Jet 4 OLE DB Provider. Pulso Siguiente y seleccione la bbdd de mi carpeta. Hago una prueba de conexión y me dice q es satisfactoria.
Luego creo un command y en sus propiedades hago lo siguiente:
En nombre de comando pongo : "report_articulos"
En conexión selecciono connection1 (la que enlacé con la bbdd)
Y luego, para seleccionar la tabla, campos, etc, en el origen de datos, en instrucción sql escribo algo parecido a esto:
Select * from articulos order by cod_articulo
Le doy a aceptar, luego creo el datareport, lo enlazo al dataenvironmen1 y todo funciona ok.
¿Cuál es mi problema?
Pues que cadena sql q escribí la tengo que poner en el momento que estoy escribiendo el programa...
¿Yo no podría hacer que se cambie esa cadena en tiempo real? Lo que necesito es por ejemplo, hacer que coja los datos de una tabla en concreto, pero de una que el usuario elija en ese momento, o un campo, o lo que sea... entienden??
Por ejemplo, imaginen que me piden los artículos que han entrando en la tabla (articulos) entre dos fechas.... y q las fecha las seleccione el usuario.... entienden? O que me pidan un listado de artículos clasificado por una categoría que el usuario seleccione en tiempo de ejecución...
Si alguien me puede ayudar le estaría muy agradecido ya que estoy bloqueado. :(
Mi direccion de email es [email protected]
Gracias a todos por leerme.
Un saludo,
pop.
Buenas, he leido tu extensa explicacion y he comprendido perfectamente lo que usted pedía.
Para poder cambiar un comando de tu dataenvironment has de referirte al comando en cuestión y cambiarle la propiedad commandtext que va a ser la sql que quieres pasarle para que ejecute.
Esto te permitirá cambial la consulta sql en tiempo de ejecucion (jejeje) en fin aqui tienes:
Nombre_de_tu_Environment.Commands("Nombre_de_tu_comando").CommandText = (consulta sql)
ejemplo:
EnvironmentOfertas.Commands("Lista").CommandText = "select * from ofertas where precio>100"
No tienes ni que refrescarlo ni nada, solo llamar al report y ya lo tendrás.
Solo encontrarás un problema. Y es que la primera vez funciona de puta madre, pero a una segunda en tiempo de ejecucion no se actualiza. Con lo que tienes que cerrar el recordset del comando antes de hacer una nueva consulta
EnvironmentOfertas.rs_nombre_de_comando.Close
cuidado con la primera vez que el recordset está cerrado y no puedes cerrar algo que está cerrado, con lo que te producirá un error.
te aconsejo que uses para la primera vez el metodo
On Error Resume Next
Justo antes de cerrar el recordset para que no casque la primera vez que lo ejecuta
a partir de ahí no habrá fallo
Resumen:
consulta = "select * from .......(consulta)"
On Error Resume Next
EnvironmentOfertas.rsConexion.Close ' el rsconexion es el recordset de tu comando
EnvironmentOfertas.Ofertas.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ruta_Base_Datos
'esta linea tan larga es por si necesitas cambiar la cadena de conexion en tiempo de ejecucion
EnvironmentOfertas.Commands("conexion").CommandText = consulta
'esto lo de antes de cambiar la consulta de tu comando
Report.Show
'mostrar el report
En fin, espero haberte aportado la ayuda que necesitabas. Hace un tiempo me encontré así con este tema y me comí mucho el coco.
Si no entiendes algo si quieres puedes mandarme un email o preguntarme algo por acá. Byte¡¡
Para poder cambiar un comando de tu dataenvironment has de referirte al comando en cuestión y cambiarle la propiedad commandtext que va a ser la sql que quieres pasarle para que ejecute.
Esto te permitirá cambial la consulta sql en tiempo de ejecucion (jejeje) en fin aqui tienes:
Nombre_de_tu_Environment.Commands("Nombre_de_tu_comando").CommandText = (consulta sql)
ejemplo:
EnvironmentOfertas.Commands("Lista").CommandText = "select * from ofertas where precio>100"
No tienes ni que refrescarlo ni nada, solo llamar al report y ya lo tendrás.
Solo encontrarás un problema. Y es que la primera vez funciona de puta madre, pero a una segunda en tiempo de ejecucion no se actualiza. Con lo que tienes que cerrar el recordset del comando antes de hacer una nueva consulta
EnvironmentOfertas.rs_nombre_de_comando.Close
cuidado con la primera vez que el recordset está cerrado y no puedes cerrar algo que está cerrado, con lo que te producirá un error.
te aconsejo que uses para la primera vez el metodo
On Error Resume Next
Justo antes de cerrar el recordset para que no casque la primera vez que lo ejecuta
a partir de ahí no habrá fallo
Resumen:
consulta = "select * from .......(consulta)"
On Error Resume Next
EnvironmentOfertas.rsConexion.Close ' el rsconexion es el recordset de tu comando
EnvironmentOfertas.Ofertas.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & ruta_Base_Datos
'esta linea tan larga es por si necesitas cambiar la cadena de conexion en tiempo de ejecucion
EnvironmentOfertas.Commands("conexion").CommandText = consulta
'esto lo de antes de cambiar la consulta de tu comando
Report.Show
'mostrar el report
En fin, espero haberte aportado la ayuda que necesitabas. Hace un tiempo me encontré así con este tema y me comí mucho el coco.
Si no entiendes algo si quieres puedes mandarme un email o preguntarme algo por acá. Byte¡¡
