Borrar con 3 IBQuerys.
Publicado por ComoLeHago (42 intervenciones) el 22/06/2005 17:50:08
La pregunta es la siguiente.
Tengo un programa que debe borrar registros repetidos, pero no funciona como debe ser
utilizo tres IBquery
IBquery1. tiene la lista de todos los registros, lo recorro uno por uno.
Ibquery2 contiene la lista de todos los registros repetidos por nombre o email, de un registro en el ibquery1.
IBquery3 lo utilizo para borrar los repetidos. con una instruccion UPDATE o DELETE.
Mi algoritmo lo tengo de la sig manera .
Ibquery.sql.add = 'SELECT * FROM CLIENTES';
mientras no ibquery1.eof hacer
actual = Ibquery1.fieldbyname('CVE_CLIENTE').assTring;
Consulta2 = 'SELECT * FROM CLIENTES WHERE EMAIL=''%s'' OR NOMBRE=''%s''
AND CVE_CLIENTE<>actual;
ibquery2.sql.add(Consulta2);
ibquery2.open;
mientras no ibquery2.eof hacer
borrar = MD.ibquery2.fieldbyname('CVE_CLIENTE').asString;
ibquery3.sql.add('DELETE FROM CLIENTE WHERE CVE_CLIENTE=borrar');
ibquery3.execsql;
end while
(Transaccion de ibquery2 y 3) .CommitRetaining;
ibquery1.next
end; //finmientras ibquery1 no eof
Esa es la idea de como esta mi codigo. Alguna observacion ?
Porque borra los repetidos y el que no debia borrar.
Veran probe el resultado usando un campo de borrado, pero resulta que al encontrar un registro y borrar sus repetidos los borra o marca como borrados, pero al llegar a un registro que debe estar borrado me borra al que no debia borrar. Parece que el Commit y/o CommitRetaining no estan actualizando los registros. que deben estar borrados.
Cualquier ayuda , Gracias de antemano
Tengo un programa que debe borrar registros repetidos, pero no funciona como debe ser
utilizo tres IBquery
IBquery1. tiene la lista de todos los registros, lo recorro uno por uno.
Ibquery2 contiene la lista de todos los registros repetidos por nombre o email, de un registro en el ibquery1.
IBquery3 lo utilizo para borrar los repetidos. con una instruccion UPDATE o DELETE.
Mi algoritmo lo tengo de la sig manera .
Ibquery.sql.add = 'SELECT * FROM CLIENTES';
mientras no ibquery1.eof hacer
actual = Ibquery1.fieldbyname('CVE_CLIENTE').assTring;
Consulta2 = 'SELECT * FROM CLIENTES WHERE EMAIL=''%s'' OR NOMBRE=''%s''
AND CVE_CLIENTE<>actual;
ibquery2.sql.add(Consulta2);
ibquery2.open;
mientras no ibquery2.eof hacer
borrar = MD.ibquery2.fieldbyname('CVE_CLIENTE').asString;
ibquery3.sql.add('DELETE FROM CLIENTE WHERE CVE_CLIENTE=borrar');
ibquery3.execsql;
end while
(Transaccion de ibquery2 y 3) .CommitRetaining;
ibquery1.next
end; //finmientras ibquery1 no eof
Esa es la idea de como esta mi codigo. Alguna observacion ?
Porque borra los repetidos y el que no debia borrar.
Veran probe el resultado usando un campo de borrado, pero resulta que al encontrar un registro y borrar sus repetidos los borra o marca como borrados, pero al llegar a un registro que debe estar borrado me borra al que no debia borrar. Parece que el Commit y/o CommitRetaining no estan actualizando los registros. que deben estar borrados.
Cualquier ayuda , Gracias de antemano
Valora esta pregunta
0