Vamos a tratar de resumir un poco.
El método de usar un query tiene que ajustarse un poco ya que tal como está tendrías que ejecutar la consulta cada vez que cambies el NIF. En su lugar usa consultas parametrizadas:
Código:
select * from clientes
where nif = :nif
Los dos puntos (
:) indican que se trata de un parámetro cuyo valor se puede sustituir así:
Código:
Query.ParamByName('nif').AsString := valor del nif
Pero aquí el problema persiste en cuanto a que debes hacer la sustitución cada vez. Para llenar automáticamente este parámetro puedes usar la propiedad DataSource del Query asignándola al DataSource de donde estés listando los NIFs- el mismo que el que alimenta tu DBLookupComboBox. Al hacer esto, cuando cambies la selección en el combo automáticamente se mostrarán en el grid únicamente los registros asociados al nif escogido. Claro está que tu grid deberá estar ligado al Query via un DataSource.
Otra forma de hacer lo mismo,
sin utilizar un Query es usando dos tablas, una para los clientes y otra para los nifs. La primera la enlazas al grid y la segunda al combo via sendos datasource y estableces la de nifs como tabla maestra de la de clientes (propiedades MasterSource y MasterFields).
De cualquier forma no están de más las observaciones de mis compañeros en cuanto a una lectura de los conceptos básicos de las componentes de bases de datos y yo añadiría el uso de SQL y relación entre tablas.
// Saludos