Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Busqueda usando un DBLookupComboBox (https://www.clubdelphi.com/foros/showthread.php?t=36270)

esimon 06-10-2006 17:21:33

Busqueda usando un DBLookupComboBox
 
Saludo para todos los del foro.

estoy tratando de hacer una busqueda usando un DBLookupComboBox, para mostral el resultado de esta busqueda en un DBGrisd, acontinuacion pongo las forma como lo hago.

este es el codigo del Query
Código:

SELECT * FROM Informacion_Convenio
WHERE Descripcion_Pais = :pPais
ORDER BY Descripcion_Pais


y este es el codigo del Boton
Código:

  Qry_Consulta_TipoAcuerdo.Close;
  Qry_Consulta_TipoAcuerdo.Parameters.ParamByName('pPais').VAlue := DBLokupComboBox1.Text;
  Qry_Consulta_TipoAcuerdo.Open;



maeyanes 06-10-2006 17:57:41

Y tu duda es? Algún problema? Algún error?

Si no especificas exactamente cual es el problema, duda y/o error, no te podemos ayudar... a menos claro, que alguién en estos foros sea psiquico... :p



Saludos...

esimon 06-10-2006 18:05:49

jajajajaja, gracias marcos por tu repuesta disculpame tiene razon,
el problema es que cuando preciono el boton del cual habla, en el DBGrisd no me prsenta nada.

Caral 06-10-2006 18:20:15

Hola
Acabo de consultar mi bolita magica y con un poco de incienzo (Del bueno), me parece extraño que en la consulta Sql pongas esto:

Código SQL [-]
SELECT * FROM Informacion_Convenio
WHERE Descripcion_Pais = :pPais
ORDER BY Descripcion_Pais




Veo (En La Bolita) dos puntos extraños ? Que son ?
Creo deberia ser:

Código SQL [-]
SELECT * FROM Informacion_Convenio
WHERE Descripcion_Pais = pPais
ORDER BY Descripcion_Pais




o

Código SQL [-]
SELECT * FROM Informacion_Convenio
WHERE Descripcion_Pais = 'pPais'
ORDER BY Descripcion_Pais




Salvo que los dos puntos esten en el campo.
No se creo yo.
Saludos

maeyanes 06-10-2006 18:26:51

La consulta está bien...

Cuando en una consulta SQL pones algo como :Variable, le estás diciendo que ahí vas a pasar un parámetro:

Código Delphi [-]
Query1.SQL.Add('select * from Tabla where Campo1 = :Valor');
Query1.Prepare:
Query1.ParamByName('Valor').AsString := 'México'; //  Aquí estoy poniendo un valor al parámetro "Valor"
Query1.Open;


Saludos...

Caral 06-10-2006 18:35:54

Ves Siempre he dicho que esta bolita hay que cambiarla, se le escapan muchas cosas, la verdad si es asi, no veo en donde este el fallo, tendria que devolver el valor, lo que pasa es que se quiere el valor en un DBGrid, si no me equivoco, Donde esta este ? (Qry_Consulta_TipoAcuerdo) es el nombre de este ?, me parece que no. o falta informacion ?.
No se aqui aprendiendo, maestro
Saludos

maeyanes 06-10-2006 18:41:03

Cita:

Empezado por esimon
jajajajaja, gracias marcos por tu repuesta disculpame tiene razon,
el problema es que cuando preciono el boton del cual habla, en el DBGrisd no me prsenta nada.

Solo para verificar...

El TQuery está conectado con un TDataSource y este conectado al TDBGrid?



Saludos...

Caral 06-10-2006 18:51:51

Exacto Maeyanes.
El Query (Qry_Consulta_TipoAcuerdo) contiene la consulta sql, envia los parametros (Ya aprendi), los recibe y los traslada al dbgrid, que tiene que estar conectado al datasource (Conetado al query) que a su vez tiene que estar conectado al dbgrid, de lo contrario nunca vera nada el dbgrid.
Hay que verificar la conexion si la sentencia es la correcta.
Saludos

esimon 06-10-2006 19:16:17

Gracias Caral por la sugerencia hice una consulta en Access y funciona de las dos formas, el problema esta en el codigo que pongo en el boton, el cual no veo que tiene de estraño para que no funciones.

Caral 06-10-2006 19:41:38

Una de las cosas que te tienes que preguntar es si el campo pPais es String o compatible con el text del DBLokupComboBox1, osea campo tipo texto, porque de lo contrario deverias cambiar la sentencia del boton, en esa parte.
Saludos

esimon 06-10-2006 20:40:45

si ese parametro es string y el DBLookupComboBox1.Text tambien maneja el campo string.

que diferencia hay entre el DBLookupComboBox1 y ComboBox, si uso el ComboBox, funciona.

lo que quiero hacer es, tengo una tabla de Pais en Access y como el ComboBox no me permite relacionarlo con la base de tados utilizo el DBLookupComboBox1, entoce lo que seleccion en este componente lu muestre en un DBGrisd y para esto utiliso el boton.

egostar 06-10-2006 20:55:26

Prueba con este código:



Código Delphi [-]
 
Qry_Consulta_TipoAcuerdo.Parameters.ParamByName('pPais').VAlue := Table1Campo.AsString;

Table1 debe ser la tabla que tiene el dato asignado al DBLookup y campo el dato asignado al DBLookup, por ejemplo si la tabla se llama PAISES y el campo PAIS entonces sería:


Código Delphi [-]
 
Qry_Consulta_TipoAcuerdo.Parameters.ParamByName('pPais').VAlue := PAISESPAIS.AsString;

Espero haberme explicado.

Saludos

maeyanes 06-10-2006 20:57:05

Y en haciendo un seguimiento de tu programa (F7 o F8), la propiedad Text del TDBLookupComboBox tiene algún valor?

No recuerdo bien como funciona el TDBLookupComboBox, pero al ser un control de datos, este se supone que sirve para modificar un cambo usando los datos de otra tabla...

Ahora, para usa un TComboBox, puedes hacer lo siguiente:

Código Delphi [-]
procedure TForm1.FormCreate(Sender: TObject);
begin
  with TQuery.Create(nil) do
    try
      Database := TDatabase1;
      SQL.Text := 'select PaisNombre from Paises'; // Estoy suponiendo el nombre de la tabla y sus campos
      Prepare;
      Open;
      First;
      while not Eof do
      begin
        ComboBox1.Items.Add(Fields[0].AsString);
        Next
      end
    finally
      Free
    end
end;

Con esto llenas el TComboBox con los valores de la tabla paises y lo puedes usar como deseas...


Saludos...

esimon 06-10-2006 21:21:30

gracias marcos.

la sentencia me esta dando el siguiente error.

[Error] Un_Con_Pais.pas(317): Undeclared identifier: 'Prepare'

maeyanes 06-10-2006 21:27:03

Que componentes estás usando para el acceso a los datos?

La verdad que yo supuse que fueran los basados en BDE, pero podrían ser otros. Si es así, solo elimina la línea donde dice Prepare y debería funcionar...



Saludos...

esimon 06-10-2006 21:35:12

estoy usando un ComboBox, para llenarlo con los campos q tiene la base de datos pais.

maeyanes 06-10-2006 21:46:30

Me refiero a los componentes para conectarte a la base de datos, así como las tablas, queries...

Por ejemplo, existen los basados en BDE, los cuales son TDatabase, TTable, TQuery, etc... los basados en Interbase: TIBDatabase, TIBDataSet, TIBQuery, etc...



Saludos...

esimon 08-10-2006 16:16:03

Marcos te agradesco muchisimo tu ayuda.

Lo que estoy usando es ADOQuery y ADOTable, este momento esoy usando una tabla por que como te dige anteriormente uso un DBLookCombBox, para llenarlo con la tabla pais y aparentemente no puedo usar este componente para seleccionar un campo y hacer una consulta por dicho campo, aparentemente.

pero si yo uso un comboBox me funciona perfectamente, pero que sucede cuando se agrege un nuevo campor a la tabla pais, voy a tener que agregarlo manualmente al ComboBoxy eso no es logico.

Pregunto, Puedo llenar el ComboBox, con los datos de una tabla Automaticamente?

como puedo hacerlo.

gracias

Lepe 08-10-2006 19:14:21

Cita:

Empezado por esimon

como te dige anteriormente uso un DBLookCombBox, para llenarlo con la tabla pais y aparentemente no puedo usar este componente para seleccionar un campo y hacer una consulta por dicho campo, aparentemente.

En un DBLookComboBox, cuando seleccionas un elemento, tienes la propiedad KeyValue que se actualiza, y te dará el valor del campo que tenga en su propiedad KeyField.

Ejemplo:
KeyField = idpais
DisplayField = nombrePais

Cuando seleccionas un pais, la propiedad Dblookupcombobox1.KeyValue tendrá el código de ese pais. Normalmente el código del pais suele ser clave primaria, por lo que tiene un índice y su acceso en búsquedas es muy rápido; además será un Integer o Autoincrement, por lo que no se tiene problemas con mayúsculas, acentos, etc.

Espero te sirva.

esimon 08-10-2006 22:31:42

Ok. Lepe mucha gracias por tu comentario, lo que quiero hacer es lo siguiente.

yo estoy usando el DbLookCombBox y compilo, corro el programa y no me da error, cuando llamo la aplicacion me da el siguiente error

el nombre del proyecto "Missing connetion or connetionstring"

yo quiere hacer una consulta por pais, el resultado lo muestro en un DBGrisd, pero que sucede como tengo una tabla de pais, no puedo usar el ComboBox porque cadabes q instroduca un pais tengo q hacerlo manualmente en el ComboBox, el DBLookComboBox si me permite llenarlo con con tabla como tu me explica, pero no me funciona con este componente.

gracias


La franja horaria es GMT +2. Ahora son las 20:28:51.

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