PDA

Ver la Versión Completa : Problema con DBGrid y BDE


jairoath
02-03-2008, 23:19:22
Hola como están mi problema es el siguiente: estoy guardando info en una tabla de una base de datos en access, esa información la muestro usando un DBGrid y una sentencia SQL, el problema es que el Grid me muestra toda la info de esa tabla, si yo quisiera que me mostrara solo los datos que deseo pues modifico la consulta SQL o utilizo un filtro, pero hay alguna manera de poder condicionar la información por medio de código, lo que pasa es que los datos que quiero mostrar dependen de una variable y un proceso dentro del programa que luego debo comparar con la tabla para ver lo que necesito.....

el query es estatico: select * from usuario where codigo=1210
yo quisiera esto: select * from usuario where codigo= (numero generado en el programa) y que luego el grid muestre solo ese y no todos, no se si sea posible, ya que el grid depende de un query fijo. gracias de antemano.

Caral
02-03-2008, 23:28:12
Hola
De donde sacas el numero generado por el programa?
Donde presentas ese numero o lo guardas en una variable?.
Es solo cuestion de poner en vez del numero el nombre o de la variable.
Saludos

Delphius
02-03-2008, 23:34:14
Hola jairoath,
Bienvenido a Cludelphi. Como recien ingresas te informo sobre la guia de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), te pediría que dediques unos minutos para leerla.

Con respecto a tu pregunta: ¿Deseas construir una consulta en tiempo de ejecución? O sólo quieres que en tiempo de ejecución se suministre el valor?

De cualquier manera lo que se hace es usar parámetros:

select *
from tu_tabla
where campo = :parametro
Los dos puntos indican que lo que sigue es un parámetro.

Y luego en Delphi bastará con hacer:

TuQuery.Parameters.ParamByName(parametro).Value := Edit1.text;
TuQuery.Parameters.ParamByName(parametro).DataType := ftString;
TuQuery.Open;


En el ejemplo asumí que se espera un string (desde un Edit), y se usa ADO. Sugiero que busques (http://www.clubdelphi.com/foros/search.php) en los foros bajo la palabra clave Parametros y/o ParamByName.

Tu consulta se puede hacer en tiempo de ejecución:

TuQuery.Sql.Clear;
TuQuery.Sql.Add('select .... ');
TuQuery.Open;

El código lo escribí a mano... no tengo Delphi en estos momentos abierto... pero creo que va a andar sin problemas.

Saludos,

Caral
02-03-2008, 23:46:45
Hola
Solo un pequeño cambio.

TuQuery.Parameters.ParamByName('parametro').Value := Edit1.text;
TuQuery.Parameters.ParamByName('parametro').DataType := ftString;
TuQuery.Open;
No estoy muy seguro si bde acepta ese concepto, de no ser asi, se puede hacer asi:

TuQuery.Parameters[0].Value := Edit1.text;
TuQuery.Parameters[0].DataType := ftString;
TuQuery.Open;
Saludos

Delphius
02-03-2008, 23:56:33
¡Ups! No me di cuenta de que especificó que era DBE!:(

Lo tuyo funciona bien. Y si no me falla la memoria, bastaría con un AsString y el DataType está demás.

Saludos,

Caral
03-03-2008, 00:01:26
Hola
En realidad funciona con solo el value sin necesidad del datatype, pero asi tambien funciona.
Me parece que es mejor usar, ya lo dije antes, ado en vez de bde, para access se estable una conexión directa.
Pero que te voy a explicar a ti, hombre si tu eres el que sabe de esto, lo que pasa es que no tienes delphi a mano.:)
Saludos

eduarcol
03-03-2008, 00:03:45
resumiendo lo qe dice Delphius:

en el query escribe esto:

select * from usuario where codigo=:cod

luego cuando lo vayas a ejecutar, escribes asi

miQuery.Active := False;
miQuery.ParambyName('cod').AsInteger := nValor;
miQuery.Active := True;

jairoath
03-03-2008, 05:16:25
wow muchas gracias a los tres por haberse tomado el tiempo de responderme tan rapido, efectivamente pude solucionar mi problema, lo que decian lo probe y de una funciono, monte un grid e hice la consulta y luego al ejecutar el proceso pude mandar el numero por referencia y el grid solo mostro los datos que necesitaba asi:

query: select * from clientes where cliente=:cod
luego dentro de un botonclick ejecute la consulta asi:

ADOQuery1.Active := False;
ADOQuery1.Parameters.ParamByName('cod').Value:= 12;
ADOQuery1.Active := True;

gracias por su ayuda, saludos desde pereira y los voy a molestar mucho mas jejejeje