No indicas que tipo de tabla es, pero si es paradox o dbase, es infinitamente mas rapido usar un TTable y asignar los campos directamente.
Otra problema con esa query es que la estas limpiando y recreando continuamente (el Sql.Clear y Sql.Add) por cada registro, esto obliga al engine a parsear la sentencia cientos de veces, lo que aumenta tambien la lentitud, deberias asignar una sola vez la sentencia sql al principio, y despues simplemente solo asignar los parametros en el bucle.
La forma mas rapida es algo como esto:
Código:
// Tabla es un objeto TTable , creado previamente y con los campos
// añadidos en tiempo de diseño: Click boton derecho
// sobre el objeto TTAble -> Edit Fields -> Add Fields
Tabla.Append;
TablaCodMay.AsString := Datos.CMay;
TablaCodAux.AsString := Datos.CAux;
TablaDescrip.AsString := Datos.Desc;
TablaRef.AsString := Datos.Ref;
...
...
Tabla.Post;
Si no quieres usar variables persistentes para los campos, podrias hacer algo como lo siguiente (aunque la funcion FieldByName es mucho mas lenta que simplemente acceder directamente a los campos como en el ejemplo anterior):
Código:
Tabla.Append;
Tabla.FieldByName('CodMay').AsString := Datos.CMay;
Tabla.FieldByName('CodAux').AsString := Datos.CAux;
Tabla.FieldByName('Descrip').AsString := Datos.Desc;
Tabla.FieldByName('Ref').AsString := Datos.Ref;
...
...
Tabla.Post;
Ten en cuenta tambien los indices que haya definidos en la tabla temporal, cuantos mas indices tenga definidos mas lenta es la insercion de registros.
Saludos