Hola Andrés:
Perdona que mi respuesta se demorara tanto pero he estado de Vacaciones

, lástima que ya se terminaran

.
Te cuento, entiendo lo que me cuentas, lo de la Query me parece bien, el problema es que no domino las querys. Intenté hacer algo así, pero no he sido capaz de llevarlo a "buen puerto".
Código:
Procedure ActualizarTablaVisitas;
var
aux : integer;
nueva : TDataSource;
Pregunta : TQuery;
Begin
with modulodedatos do
Begin
Pregunta:= TQuery.create(Application);
Pregunta.DatabaseName := Modulodedatos.Tablavisitas.DatabaseName;
Pregunta.SQL.Text := 'select max (indice_visitas) from Tablavisitas';
Pregunta.open;
aux := pregunta.fieldbyname(tablavisitasindice_visitas.value).asinteger;
TablaVisitas.Append;
aux := aux+1;
TablaVisitasIndice_visitas.value := aux;
TablaVisitasClave_Cliente.value := TablaClientesCodigo_Cliente.value;
TablaVisitasfechavisita.value := date;
Tablavisitasempleado.value := Tablaempleadosclaveempleado.value;
Tablavisitas.post;
Tablavisitas.FlushBuffers;
End;
End;
Pero (además de no saber si el procedimiento utilizado es correcto o no) no puedo compilar porque me dice que los tipos integer y string son incompatibles en la línea
aux := pregunta.fieldbyname(tablavisitasindice_visitas.value).asinteger;
Para la primera solución que propones tengo el problema de que no se como asignarle el índice primario.
Mira a ver si me puedes echar un cable y si de paso me recomiendas algún sitio donde leer algo sencillo para comenzar a manejarme con las Querys.
Gracias por tu atención.