Che, ¿porqué la insistencia en tomar los tipos como si fueran strings? Si en la tabla tienes campos integer, floats, etc. En tu código debes pasarles variables del mismo tipo, o la equivalente en delphi para dicho tipo.
Por otro lado cuando uno trabaja con ADO debe pasarle en .Value el valor correspondiente, pero más importante, previamente indicarle el tipo esperado:
Código Delphi
[-]ADOQuery1.Parameters.ParamByName(NombreParametro).DataType := ftInteger;
ADOQuery1.Parameters.ParamByName(NombreParametro).Value := 40;
Hace un tiempo que no uso Delphi asi que no estoy completamente seguro si así se llamaba la propiedad DataType. Consulta la ayuda por las dudas.
No creo, ni debiera, que sea problema que al SQL que le pasas al ADOQuery veo espacio entre la comilla de inicio y fin. Pero por las dudas, corrige eso.
MAL:
Código Delphi
[-]ADOQuery1.SQL := ' INSERT INTO ... ';
BIEN:
Código Delphi
[-]ADOQuery1.SQL := 'INSERT INTO ...';
Saludos,