PDA

Ver la Versión Completa : Usar consulta para varios formularios


jlrdz
04-02-2011, 20:05:52
Tengo 2 formularios(usuarios y categorias) y un data module, estoy usando el componente mydac para conectarme a mi base de datos en MySQL, en la base de datos tengo 2 tablas una de nombre usuarios y otra de nombre categoria.
La tabla usuarios tiene tres campos que son id, numero y nombre_usuario.
La tabla categorias tres campos id, categoria y salario.
En el Data Module tengo el componente TMyconnection de name "conn" donde establesco los datos del servidor, usuario, password y la base de datos que voy a utilizar y un TMyQuery de name "query2" para generar consultas.
En el formulario de usuarios muestro los datos y tengo un DBNavigator pero propio no usé el que biene ahí. Con el evento onCreate para el formulario hago lo siguiente:

mysql es el nombre del data module, aquí selecciono todo de la tabla usuarios con la consulta y lleno correctamente los TEdit, con eso no tengo problema


mysql.query2.Close;
mysql.query2.SQL.Clear;
mysql.query2.SQL.Text:='select * from usuarios order by id asc';
mysql.query2.Open


En el formulario categorias hago exactamente lo mismo con el evento onCreate pero con una consulta diferente, lleno los TEdit correctamente y el DBnavigator propio funciona bien.


mysql.query2.Close;
mysql.query2.SQL.Clear;
mysql.query2.SQL.Text:='select * from categoria order by categoria asc';
mysql.query2.Open;


Al correr la aplicacion abro primero categorias y me carga los datos y todo anda bien, cierro ese formulario y abro el de usuarios y la primera vez que se llena los campos lo hace bien pero al recorrer el siguiente registro con el DBNavigator me marca un error, en si se refiere a que los campos numero y nombre de usuario no existen en la consulta que sería en "query2" y quiero suponer que hace eso porque aun está cargada con los datos del formulario categorias pero se supone que al crear el formulario se debe borrar ( con el mysql.query2.close, mysql.query2.SQL.Clear) y ejecutar la nueva consulta o al menos eso es lo que creo pero seguro estoy en un error. Lo que quiero es usar esa misma "query2" para varios formularios y no tener que crear una para cada formulario. Aclaro lo que sí tengo para cada formulario es un TMyDataSource. Espero haberme explicado y puedan ayudarme, saludos.

ElKurgan
04-02-2011, 23:02:55
Pues... Lamento decirlo pero no, no he entendido bien lo que necesitas.

Si nos pusieras al menos el código de error que te marca nos daría alguna idea, pero así, a bote pronto, es difícil saber que está pasando.

Como bien dice el amigo Neftali:


Más tiempo dedicado a la pregunta=Mejores respuestas.


Saludos

jlrdz
04-02-2011, 23:14:01
Quiero usar el mismo componente TMyQuery para varios formularios pero obviamente cada formulario tiene una diferente consulta y esto lo quiero para no tener que agregar muchos TMyQuery osea uno para cada formulario. El error que me da es:
EDatabaseError with message 'query2: Field' 'numero_usuario' not found.

Como lo dice es por que no encuentra esa columna en query2.

Caral
04-02-2011, 23:21:36
Hola
Si usas un query para varias consultas NO puedes añadirle campos en la casilla de verificacion, osea, en la ventana pequeña donde se colocan los campos.
El error es muy probable que sea por que tienes una sentencia sql en el string del query y ademas estan los campos en la ventanita que mencione.
Quita todo eso y veras que funciona.
Saludos

jlrdz
04-02-2011, 23:31:17
No entedí, cual ventanita? cual campo?, el TMyQuery está en un Data Module y los campos que lleno con los datos son TEdit, con eso no tengo ningun problema, el problema está en que cuando abro primero el formulario de categorias hace la consulta y me muestra los datos correctamente, lo cierro y abro el formulario de usuarios que también usa el mismo TMyQuery para hacer la consulta y la hace bien pues me muestra los campos llenos con la informacion correcta pero al querer avanzar al segundo registro ya es donde me marca ese error que indica que no se encuentra esa columna en query2.

Caral
04-02-2011, 23:32:49
Hola
Entonces no entiendo donde esta el problema.
Las cosas si funcionan una vez, funcionan dos.
No entiendo.
Saludos

jlrdz
05-02-2011, 02:16:51
Yo tampoco y es por eso que hice un nuevo hilo en este foro.