Estás usando el mismos dataset para gestionar el while y para hacer las inserciones. Al hacer el SQL.Clear, lo destripas.
Además, las instrucciones SQL no tienes que volverlas a crear. Simplemente, cambias los valores de los parámetros y las ejecutas.
Observa cómo he realzaido los bucles. Tu código no tiene mucha lógica, ya que no tiene las iteraciones hechas correctamente.
Echa un vistazo a este código y dinos qué te parece. Indenta el código correctamente, tú mismo lo agradecerás.
Código Delphi
[-]Procedure TF_CargosA.InsertaRegistros;
var fccodigo : string;
begin
DataM.Q_Clientes.SQL.Clear;
DataM.Q_Clientes.Close;
DataM.Q_Clientes.SQL.Add('SELECT FC_CODIGO FROM SCLIENTES');
DataM.Q_CargosF.SQL.Clear;
DataM.Q_CargosF.Close;
DataM.Q_CargosF.SQL.Add('INSERT INTO SCARGOSFIJOS (FCF_CLIENTE,FCF_CODIGOPRODUCTO)');
DataM.Q_CargosF.SQL.Add('VALUES (
aram1,
aram2)');
DataM.Q_Clientes.Open;
First;
while not DataM.Q_Clientes.Eof do
begin;
fccodigo := FieldByName('FC_CODIGO').AsString;
DataM.Q_CargosF.ParamByName('param1').AsString := fccodigo;
DataM.Q_CargosF.ParamByName('param2').AsString := Edit1.Text;
DataM.Q_CargosF.ExecSQL;
Next;
end;
end;
Espero que te sirva de ayuda
Un saludo