Comparar Campos entre dos Bases

De Ante mano Gracias por todas la ayuda que me has brindado has sido una de mis principales guías en Delphi..
Tengo un problemita quiero comparar dos campos entre dos Tablas DBF para saber cual registro hace falta en que Tabla es como un numero verificador el cual existe en las dos pero hay que comprobar que todo haya pasado de replica aproduccion.
Lo que se me ocurrió fue entrar con un while a la tabla1 y dentro de este otro while a la tabla 2 y comparar los registros si es igual que los borre sino que los deje así solo quedaran los que hacen falta. El código es el siguiente el problema es que se vuelve un lazo infinito y no se porque ya hice todo lo que se me ocurrió y he topado
Table1.Open;
Table1.First;
Table2.Open;
While not Tzble1.Eof do
begin
Match:=copy(BASEVISAAuth.Value,1,6);
Table2.First;
While not Table2.Eof do
begin
Match2:=copy(BASEBANCAAuth.Value,1,6);
if Match= Match then
begin
BASEVISA.Delete;
BASEBANCA.Delete;
break;
end
else BASEBANCA.Next;
end;
end;
end;
Me ayudas...
Respuesta
1
Ok se te volvió infinito, porque nunca lo terminas; mira así debe ser los ciclos que intentas hacer:
Table1.Open;
Table2.Open;
Table1.First;
While Not Table1.Eof do
begin
if Table2.Locate(NombreCampo,MATCH,0) then
//si entro aqui significa que lo encontro y haces lo que tengas que hacer como borrar
else
//Significa que no lo encontro
Table1.NExt;
end;
Si te das cuenta ya no ocupo el ciclo 2 con el locate voy a buscar el registro por medio del campo y listo
Funcionó! Gran Tips...
Mira la función la hace pero fíjate que hay un penqueñisimo inconveniente y es que las base a hacer match son grandes, yo tengo una Pc Dell a 2.8 GHz con 512 en Ram y con ser así satura el Microprocesador y en donde pondré esta aplicación es en una maquina inferior, por lo tanto se me ocurrió la idea de ordnar las dos tablas en Ascendente para que no se tarde en la búsqueda, esto lo logre hacer con lenjuage Sql con un Query, ¿pero el problema es que cuando la búsqueda la hago con la tabla se desordena de nuevo como hago para ordenarlo con un TTable?
El código del Tquery que he hecho es el siguiente:
BGrid1.DataSource:=DataSource3;
QueryVisa.Active:=True;
With QueryVisa do begin
Active:=False;
with SQL do begin
clear;
Add('SELECT * FROM BASEVISA');
Add('ORDER BY AUTH ASC');
end;
ExecSQL;
Active:=True;
end;
DBGrid2.DataSource:=DataSource4;
QueryBanca.Active:=True;
With QueryBANCA do begin
Active:=False;
with SQL do begin
clear;
Add('SELECT * FROM BASEBANCA');
Add('ORDER BY AUTH ASC');
end;
ExecSQL;
Active:=True;
¿Me ayudas?
Gracias de Antemano..
Bueno el TTable tiene sus propios indices para ordenar, pero no te compliques el asunto tanto, elimina los TTable y usa puros TQuery. Y así no se te desordena, el TQuery tienes las mimas propiedades de Next, insert, post, delete etc... pero para que funcionen debes activar la propiedad RequestLive := true y listo.
Esta muy raro, a menos que tu SQL esta muy complejo, ¿pero no creo verdad? Me imagino que es un select * from tabla, es decir solo tienes una tabla. Bueno pero no os preocupéis, si no te funciona el RequestLive entonces vas a enlazar tu Query con UpdaSQL que es otro componente, lo pones y en el query buscas la propiedad UpdateObject y ahí debe aparecer tu UpdateSql que pusiste ahora una ves conectado le das doble click al UpdateSQL y te abrir una ventana en la cual tu vas a poner tus SQL de Insert de Update y de Delete en su correspondiente pestaña, esto es muy bueno, de hecho el usar TTables ya no es correcto para las aplicaciones ya que son muy lentos, y de esta manera tu controlas a que campos hacerles insert y updates el delete pues simplemente borra el registro.
Ahora un ejemplo para poner tu Update sera de la siguiente manera:
Update tabla set campo=:campo
where idcampo =:idcampo
Si te das cuenta son parámetros, el tip es que estos parámetros debe ser igual al nombre del campo o al alias si es que usaste alias en tu query, ¿te preguntaras porque iguales? Bueno porque así los tomara automáticamente del query y si tu le pones nombre cualquiera al parámetro y no es igual al campo pues te marcara error o nunca lo actualizara si me explico..
Por ultimo tienes que activar la propiedad CacheUpdates de tu query, y listo.
Una ves que ya tengas tu updateSQL configurado con sus SQL ya te olvidas de el, y ya podrás manejar tu query como si fuera un TTable. Es decir si quieres insertar primero pones Query1. Insert; y para grabar Query1. Post ahora recuerda que el post solo te graba de manera temporal, tienes que darle un Query. ApplyUpdates en el evento AfterPost para que así se registren los datos en la base de datos. Ok

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas