Al hacer la inserción desde un conjunto de registros obtenidos con el SELECT, puedes discriminar que registros quieres insertar y cuales no, así te evitas un bucle y molestar al usuario preguntando registro por registro. Si son tantos, imaginate! El usuario nunca va a terminar.
En lugar que que crees una QueryDef cada que insertas, crea un procedimiento almacenado en el servidor al que le pases los parametros de inserción y llamalo desde vb con un bucle, o bien
si quieres evitar insertar registros duplicados discrimina los que ya existan en la base de datos, por ejemplo (esto lo utilizo para actualizar la base de datos de trabajadores de mi empresa, insertando solo aquellos que no existen):
INSERT INTO comun.trabajadores SELECT * from comun."qry_TRABAJADOR_A_PGSTE" tsql where tsql.expediente not in (SELECT expediente FROM comun.trabajadores) AND nomina is not null
Donde:
comun.trabajadores es mi tabla destino (la tabla mas actualizada)
qry_TRABAJADOR_A_PGSTE es una vista obtenida de un servidor antiguo, y contiene tanto los trabajadores nuevos como los antiguos.
Si ejecutas unicamente el SELECT (excluyendo la parte del "INSERT INTO comun.trabajadores") obtendras los trabajadores que se insertarán, y con frecuencia, no son muchos.
Por otro lado, cuando quiero actualizar los demas trabajadores (que hayan cambiado su domicilio, telefono o algo), tengo que hacerlo registro a registro, y es así:
update comun.trabajadores SET nombre = t.nombre,
apellidopaterno = t.apellidopaterno,
apellidomaterno = t.apellidomaterno,
sexo = t.sexo,
fechanacimiento = t.fechanacimiento,
rfc = t.rfc,
curp = t.curp,
domicilio = t.domicilio,
delegacion = t.delegacion,
codigopostal = t.codigopostal,
estadocivil = t.estadocivil,
noafiliacionimss = t.noafiliacionimss,
telefonoparticular = t.telefonoparticular,
fechaingreso = t.fechaingreso,
cuentabancaria = t.cuentabancaria,
nomina = t.nomina,
idpuesto = t.idpuesto,
idarea = t.idarea
from comun."qry_TRABAJADOR_A_PGSTE" t
where comun.trabajadores.expediente = t.expediente AND t.nomina is not null
Si te fijas, lo hago campo por campo y solo para aquellos trabajadores que ya existen en mi tabla destino (comun.trabajadores)
En ambos casos, compruebo que su tipo de nomina (campo nomina) sea distinto de nulo.
Espero te sirva
Saludos,
Fer