Puedes hacer un procedimiento que copie campo a campo dos registros de dos tablas distintas.
Luego aplicas ese procedimiento a la cabecera y luego a los registros de detalle.
No tengo un Delphi a mano, pero sería algo asi:
Código Delphi
[-]TPresupuesto.Open;
TContrato.Insert;
for i := 1 to TPresupuesto.FieldCount do
TContrato.Field[i] := TPresupuesto.Field[i];
TContrato.Post;
Con SQL sería más fácil:
Código SQL
[-]
insert into cabecera_contrato (numero,nombre,preciototal,...)
select numero,nombre,preciototal,... from presupuesto
where numero=?numero
y lo mismo con la tabla detalle.