La Web del Programador: Comunidad de Programadores
 
    Pregunta:  148 - BUSQUEDA RECURSIVA CON TQUERY O TTABLE
Autor:  Carlos
Delphi 3
Tengo creada una tabla la cual tiene unos subtipos relacionados con si misma ejemplo:

Familia (x) tiene (n) productos asociados y estos asu vez (m) partes. Las familias están realcionados con los productos por medio de otra tabla que hace el puente entre los registros. Esto genera niveles indeterminados de anidamiento.

Cómo hago una búsqueda recursiva con Tquery o Ttable, de tal manera que al encontrar el código relacionado lo envié como parámetro de búsqueda en la misma tabla, y de esta manera pueda encontrar las relaciones anidadas?


  Respuesta:  Edgar Fernando Rodriguez
Mira, lo que tienes que hacer para agrupar datos, es averiguar más sobre la cláusula GROUP BY de SQL y con eso se soluciona todito... Busca el archivo SQLREF.HLP, desde D1 hasta D7 encuentras información sobre SQL.
Ejemplo:
SELECT COUNT(*) FROM CLIENTES
GROUP BY CIUDAD
En este caso se cuenta todos los clientes agrupados por Ciudad suponiendo que CIUDAD exista.

  Respuesta:  jorge
para hacer lo que quieres la forma más rápida de hacerlo es mediante SQL con parámetros, para eso no podrás enlazar los querys entre ellos. te envio un trozo de código, si no te aclaras envia un e-mail:

Q1.Close;
Q1.SQL.Clear;
Q1.Params.ParamByName('<Nombre del parámetro').AsInteger:=
Q2.FieldByName('Campo con el código del otro query').ASInteger;
Q1.SQL.Add('Select * From <Nombre de la Tabla>);
Q1.SQL.Add('Where <Nombre del Campo>= :
<Nombre del Parámetro> ');
Q1.Prepare;
Q1.ExecSQL;
Q1.Open;

Antés de esto tendrás que haber definido el parámetro, y tener la propiedad RequestLive a True, ParamCheck a False y Filter a True del Query;
Si quieres crear los parámetros en tiempo de ejecución hzmelo saber, o crear una consulta en tiempo de ejecución


  Respuesta:  Jair A. Linares
Una manera de hacerlo es con el Database desktop abre las Tablas y creales "Referential Integrity"

Otra es que en el TTable, usa la propiedad MasterSource, ahi le das la tabla que de la que debe buscar, y en MasterFields. Recuerda que esta es una relacion de Hijo a Padre, no al reves. No es como Clipper, si lo conoces, en pocas palabras es algo como asi :

En el TTable de familia no hagas nada
en TProductos pon en MasterSource TFamilia
en TPartes pon TProductos

no olvides llenar MasterFields, ahi se selecciona el indice a usar, y los campos que se deben conectar o por los cuales se debe hacer la relacion.

Espero te haya servido de algo !


  Respuesta:  Kenneth Ureña Valverde
Bueno con el TQuery es un poco mas facil, esto lo haces con la prop[iedad SQL, de hecho si quires (imagino que tienesz unmodelo de la base de datos), si quieres me la mandas y yo te hago el texto que tienes que introducir a la propiedad SQL.