Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
Exclamation Error al recorrer registros de tabla

Buen dia a todos. Por favor lo que a continuacion planteo tengo ya 2 dias sin resolver si alguien me da una piesta se lo agradecere siempre!!

Estoy tratando de hacer un bucle para borrar registros de una tabla que esta enlazada a otra via MasterSource de manera simple:

procedure BorrarRegistros;
begin
Form1.tbl8.First;
while Form1.tbl8.Eof = False do
begin
Form2.tbl8.Delete;
Form2.tbl8.Next;
end;
end;


Y sencillamente la tabla no esta moviendo el puntero de manera correcta cuando hago la navegacion. He hecho todo tipo de verificaciones a ver donde esta el problema; hasta le pegue un grid a la tabla para ver haciendo break en el procedure para ver la navegacion y el borrado y no salta el puntero cuando se lo indico.

Lo mas extrano de todo esto es que cuando le pego un DBNavigator para hacer el movimiento del puntero esta si responde de manera correcta

Que puede ser lo que este pasando?

PD: Como veran estoy trabajando con tablas planas y Delphi7
Responder Con Cita
  #2  
Antiguo 14-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Código Delphi [-]
procedure BorrarRegistros;
begin
Form1.tbl8.First;
while Form1.tbl8.Eof = False do
begin
Form2.tbl8.Delete;
Form2.tbl8.Next;
end;
end;
me parece que debes eliminar esa linea, puesto que cuando borras un registro el puntero pasa al registro siguiente y si encima le haces un next entonces no estaria borrando todos los registros

supongo que es un ejemplo verdad? Form1.tbl8 y Form2.tbl8 ??
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #3  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
Gracias por responder... Si solo un ejemplo, el codigo en realidad tiene otros objetos pero en esencia es eso, corrijo:

procedure BorrarRegistros;
begin
Form1.tbl8.First;
while Form1.tbl8.Eof = False do
begin
Form1.tbl8.Delete;
Form1.tbl8.Next;
end;
end;

Pero creo que el error no esta ahi, el teoria el Next es necesario para mover el puntero hacia el proximo registro a borrar y seguir con el bucle. Tengo codigo como ese en otros formularios y si funciona.

Insisto en lo que mencionaba antes: si en vez de usar codigo para mover el puntero uso un DBNavigator la tabla se recorre perfectamente.

Que podria ser?

Última edición por cheche358 fecha: 14-07-2011 a las 16:34:20. Razón: Enlace defectuoso
Responder Con Cita
  #4  
Antiguo 14-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
has probado? o solo estas suponiendo que el error debe ser otra cosa
te recomiendo que lo pruebes y comentes
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #5  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
He probado un monton de cosas, pero el problema pareciera estar que la tabla no se esta moviendo al primer registro cuando llamo el:

Form1.tbl8.First;

Sera que alguien ha tenido el mismo problema?

Seran problemas con Indices?

Agrego otro detalle, esta segunda tabla es el Detail de una tabla Maestra, en este caso: Es la tabla que contiene los articulos de los documentos de factura. Es decir que el puntero de esta tabla es inicialmente movido por el movimiento efectuado en la tabla Master...

De que manera podria estar eso afectando el movimiento del puntero en la segunda tabla?
Responder Con Cita
  #6  
Antiguo 14-07-2011
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Si es una tabla detalle, porque no borras todos los registros donde el id del detalle sea el id del maestro.

Asi es como lo hago yo, lanzo una consulta parametrizada con el id y ya está.

SAludos
Responder Con Cita
  #7  
Antiguo 14-07-2011
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
El Next no es necesario porque al borrar el registro, el dataset pasa a apuntar al siguiente registro automáticamente (no se va a quedar apuntando al limbo).

Pero vamos, dado que estás usando una tabla, sería mejor usaras el método Clear para borrar todo, o incluso una SQL que es más eficiente "delete from tabla" y listo, todo borrado.
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
Gracias de nuevo jafera y Lepe por responder...

Podrian por favor darme un pequeno ejemplo de codigo de la consulta para borrar los datos asociados de la tabla detalle?

Ya tire la toalla recorriendo la tabla manualmente
Responder Con Cita
  #9  
Antiguo 14-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
mas o menos asi
Código SQL [-]
 
delete from tabladetalle where CampoComun = TablaCabecera.CampoComun
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #10  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
Gracias a todos por su tiempo... Resolvi haciendo la consulta y borrando los datos asociados a ella.

Les comento que aun con la inquietud del codigo anterior segui investigando codigo similar por ahi y agregandole un Refresh y sin el Next a la tabla despues de borrar funciono:

procedure BorrarRegistros;
begin
Form1.tbl8.First;
while Form1.tbl8.Eof = False do
begin
Form1.tbl8.Delete;
Form1.tbl8.Refresh;
end;
end;

Me quedara para una proxima situacion similar.

Gracias de nuevo

Última edición por cheche358 fecha: 14-07-2011 a las 19:00:28. Razón: Error en el codigo
Responder Con Cita
  #11  
Antiguo 14-07-2011
Avatar de oscarac
[oscarac] oscarac is offline
Miembro Premium
 
Registrado: sep 2006
Ubicación: Lima - Perú
Posts: 2.010
Poder: 20
oscarac Va por buen camino
Probaste quitandole el Next como te sugeri?
Lepe tambien te menciono que cuando borras un registro el puntero pasa al siguiente porque no se puede quedar en el limbo
__________________
Dulce Regalo que Satanas manda para mi.....
Responder Con Cita
  #12  
Antiguo 14-07-2011
Avatar de cheche358
cheche358 cheche358 is offline
Miembro
 
Registrado: mar 2010
Ubicación: Valencia - Venezuela
Posts: 35
Poder: 0
cheche358 Va por buen camino
Si al final se lo quite, pero por las pruebas que hice el problema no era exactamente que se quedara en el "limbo", el problema es que cuando ya habia borrado 5, 10 articulos o los que fuera y quedaban solo 2, entonces con ese NEXT se movia al final de la tabla y se cerraba el WHILE, quedandome siempre un registro por borrar.

Asi que ese ultimo codigo que puse funciona perfect para el que lo necesite
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Recorrer Registros de dos Tablas comprobando STOCK Lenny Varios 1 18-01-2011 18:25:19
Recorrer registros golf2008 MySQL 3 17-04-2008 15:56:44
Recorrer Tabla, contar registro repetidos y escribir totales en otra Tabla Lucas_diaz1810 Conexión con bases de datos 1 25-12-2006 13:04:34
Recorrer todos los registros de una tabla que tengan el mismo campo Sayuri Conexión con bases de datos 3 08-12-2005 16:07:46
recorrer tabla acrophet Conexión con bases de datos 7 30-04-2004 00:03:06


La franja horaria es GMT +2. Ahora son las 10:05:41.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi