PDA

Ver la Versión Completa : Consulta con un campo de un dbgrid


Ivan_25
17-11-2005, 10:05:41
Hola a tod@s!!!. Mi pregunta es la siguiente. Tengo un DBGrid en un formulario, que me muestra datos de una consulta a una bd access (conexion ADO). Estos datos son Id y Descripcion de proceso. Lo que quiero es que al pinchar en uno de los procesos, me muestre un formulario con todos los candidatos que hay en ese proceso. ¿Como capturo el Id para pasarlo al formulario nuevo para hacer la consulta?. Gracias.

alt126
17-11-2005, 10:18:18
en mi humilde opinion, lo mas sencillo que puedes hacer es:

1º en el dbgrid activar la opcion RowSelect a true, con esto solo puedes seleccionar una linea a la vez.

2º cada vez que pinches una linea de esas, te estas posicionando en un registro concreto de la consulta que muestras en el dbgrid, con lo que imagina esto:


ID descripcion

1 aaaa
2 bbbb
c cccc

si pinchas en la fila 2, puedes capturar el evento y si pones esto:


Consulta->FieldByName("ID")->AsString -> tiene que contener un 2
Consulta->FieldByName("descripcion")->AsString -> tiene que contener "bbbb"

Ivan_25
17-11-2005, 10:31:02
A ver, es que yo creo que no me has entendido bien.
Lo que tu dices es correcto, el problema es que yo no quiero capturar el id del formulario donde muestro los candidatos en el proceso, sino que quiero el id del proceso del formulario padre, y si lo capturo asi como tu dices, ¿como se lo paso luego al formulario hijo para hacer la consulta sql?. Me entiendes o no?
Venga nen, nos vemos, a ver si nos invitas ya a Sandra y a mi a algo, macho, jejejeje.

Ivan_25
17-11-2005, 10:40:19
Vale, vale, ya funciona, jejejejeje, ya lo he pillado:

String cadena;
String cod;
this->ADOQCandidatosenproceso->SQL->Clear();
cadena = "SELECT candidatos.Id, Nombre FROM procesos_candidatos, candidatos, descripcionprocesos WHERE descripcionprocesos.id = ";
cod = FProcesos->ADOQVerprocesos->FieldByName("id")->AsString;
cadena = cadena + cod;
cadena = cadena + " AND procesos_candidatos.IdProceso = descripcionprocesos.id AND candidatos.Id = procesos_candidatos.candidato";
ADOQCandidatosenproceso->SQL->Add(cadena);
ADOQCandidatosenproceso->ExecSQL();
ADOQCandidatosenproceso->Active = true;
this->DSCandidatosenproceso->DataSet = ADOQCandidatosenproceso;

alt126
17-11-2005, 12:14:20
pos lo que yo te decia...joe...

segun habia entendido, tenias un dbgrid donde mostrabas el resultado de una consulta. y querias que al pinchar en el dbgrid te salieran unos datos, en funcion de lo que habias pinchado no?

pos con lo que yo te habia dicho, tenias los datos de lo que habias pinchado, asi que solo tenias que hacer una nueva consulta a partir de los datos que ya tenias.

Ivan_25
17-11-2005, 13:12:06
Y otra cosa mas :)

A ver, he hecho una consulta para obtener datos, y algunos de los datos que obtengo son Si/No, de una base de datos access. Tambien tengo unos campos CheckBox, y quiero que si los datos que obtengo de la consulta estan marcados, me los marque en el checkbox, y si no, pues que no los marque. Yo lo hago asi:

CBActivo->Checked = ADOQDatos->FieldByName("Activo");

El problema es que siempre me lo marca como activo. ¿Como lo soluciono?
Enga neeeeeeeeeeeeeeeeeeeeeeeeeeeeen.

alt126
18-11-2005, 09:27:39
el problema a mi entender es que te falta el tipo de dato...lo raro es que no te de error :confused: , deberia ser asi:

CBActivo->Checked = ADOQDatos->FieldByName("Activo")->AsBoolean;

Eso suponiendo que el campo en la tabla sea tipo bool.

Si no te funciona, puedes probar esto:


if(ADOQDatos->FieldByName("Activo")->AsBoolean == true)
CBActivo->Checked = true;
else
CBActivo->Checked = false;

y asi te podria valer para un campo bool en la tabla, o integer, o texto...