Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Problema con consultas usando ADO (https://www.clubdelphi.com/foros/showthread.php?t=51865)

Garry 02-01-2008 18:48:14

Problema con consultas usando ADO
 
Hola, amigos.
Quiero realizar un formulario de altas, bajas y modificaciones. Como soy principiante en esto seguro que doy muchas vueltas...
Asocio a cada componente del formulario un DataSource dependiendo del origen de los datos:
DataSource1 a un ADOTable para el proceso Altas.
DataSource2 a un ADOQuery para todo aquello que requiera consultas.
El proceso de Altas funciona correctamente. Pero en las Consultas...
Tengo los componentes conectados de la siguiente forma con un DBEdit:
Código Delphi [-]
DataSource2.DataSet := ADOQuery;
DBEdit.DataSource   := DataSource2;
ADOQuery.SQL.Text   := 'SELECT Tabla.*, ...';

DBEdit.Text toma el valor correcto del formulario pero...:
Código Delphi [-]
ADOQuery.SQL.Text := 'SELECT Tabla.*, ...';
... pierde el valor anterior, pasando a valer NULL.

:confused:¿Puede alguien decirme el porqué, si aún no he ejecutado la consulta?

Pre-gracias por todo :D

enecumene 02-01-2008 19:01:08

Código Delphi [-]
ADOQuery.close;
ADOQuery.SQL.Text   := 'SELECT Tabla.*, ...';
ADOQuery.Open;
DataSource2.DataSet := ADOQuery;
DBEdit.DataSource   := DataSource2;

intentalo en ese orden a ver.

Saludos.

Garry 02-01-2008 19:38:57

Creo que para lo que yo quiero no me vale ese orden
 
Al tener un DBedit en el FORM, tiene que estar asociado a un DataSource para poder escribir en él y darle el dato por el que consultar, ¿no? Recuerda que utilizo el mismo formulario para pedir los datos de la consulta y para mostrarlos.

Mientras no asocie un DataSource al DBedit, funciona como si su propiedad Enabled fuera False (esto me ocurre cuando pongo la solución que me has enviado).

Gracias por ser tan rápido.

Garry 18-01-2008 11:31:29

Nada, que no me apaño...
 
Vaya, tras 2 semanas sigo atascado con esto... A ver si alguien puede echarme un cable.

Quiero consultar y dar de altas con los mismos campos, pero, al usar los DBEdit para consultar, actualiza con los valores a buscar. Mi intención era permitir consultar por cualquier campo con un botón Buscar. Debería poder "desactivar" estas actualizaciones mientras no se pulse el botón de Grabar.

Los DBedit actualizan cuando les da la gana y me desespera. He visto que Caral tenía un formulario aparte para buscar en su ejemplo de facturación, pero yo prefiero usar el mismo. Imagino que será un tema ya manido. ¿Pistas? ¿Se puede evitar esa grabación cómodamente? ¿Algún enlace recomendado? Aquí me habían hablado de Cache Updates. Ignoro cómo se utiliza, además ¿es esa la solución?

He pensado en la posibilidad de pasar de los DBEdit, pero eso supondría demasiado chollo extra, y ya tengo bastante. Además, tampoco sé resolver muchas cosas que ya hace solas el controlador de ADO... snif!

Lepe 18-01-2008 13:30:42

El inconveniente que veo a este método, es que una búsqueda suele mostrarse en un Grid para facilitar la visualización, si tienes DBEdits, la búsqueda puede ser algo engorrosa.

De todas formas, los pasos los haría así:
- Cerrar tabla
- Cerrar query
- Asignar el sql al query.
- Asignar Datasources a todo.
- Abrir query.

Saludos

Garry 23-01-2008 10:07:08

Perdón por tardar tanto en responder.

Hombre, yo pienso que las DBGrid no son la única solución, aparte de que exigen diseñar otro apartado para la consulta. Como apunto, mi intención es usar lo mismo para consultas y modificaciones, para que el usuario no tenga que navegar por múltiples formularios. Quiero una interfaz que le resulte cómoda e intuitiva. He preparado un sencillo diagrama de estados para realizar las acciones según los valores y en función de los botones pulsados.

En cualquier caso, tengo el problema que comentaba de que el DataSource debe estar asociado para que el campo esté activado y me permita preparar una consulta, así que debería tenerlo activado para teclear la consulta y eso permite que el usuario cambie datos sin mi permiso porque los DBEdit graban de inmediato.

Actualmente estoy optando (muy a mi pesar, pero es lo que se me ocurre) por usar MaskEdit, pero prefería una opción más automática que tener que controlar yo todo, como dije anteriormente.

Por favor, no dejéis de comentar algo que posibilite la otra opción, si se os ocurre, claro. Saludos.


La franja horaria es GMT +2. Ahora son las 09:09:49.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi