Para la primera lo que necesitas es un maestro detalle, tal vez te sirva este link
http://www.clubdelphi.com/foros/showthread.php?t=53416.
Para la segunda me parece que lo que necesitas es implementar una búsqueda incremental (lo cual es un poco más complicado)
1) Pones en un formulario un edit y un dbgrid.
2) Pones el componente de conexión y un consulta (una query) y en la sentencia SQL ponés:
Código SQL
[-]Select *
from Articulos
where (upper(desc_articulo) like upper(:buscar))
Los dos
Upper sirven para que cuando el usuario escriba se haga una comprobación insensible a mayúsculas (no se si es tu caso).
3) Ponés un DatSource y lo atás con la query y con el DBGrid.
4) En el evento OnKeyPress del edit ponés:
Código Delphi
[-] if Length(ed1.Text)>2 then
begin
q1.Close;
q1.ParamByName('buscar').AsString:=ed1.Text+'%';
q1.Open;
end;
En este caso la consulta se abre recién a la tercera letra pulsada.
Esto se podría pulir un poco así:
Código Delphi
[-] if Length(ed1.Text)>2 then
begin
q1.Close;
q1.ParamByName('buscar').AsString:=ed1.Text+'%';
q1.Open;
if q1.recordcount=0 then
begin
end
end;
Con esta modificación podés hacer alguna acción cuando no encontrás lo que el usuario busca.
Saludos y espero te sirva.
