Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Borrado masivo de registros

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Borrado masivo de registros Responder citando

A ver si me explico bien. Tengo dos tablas paradox, que tienen entre otros estos campos.
Tabla 1: Tipos.db
    Codigo
    Mes
    Tipo

Tabla 2: Datos.db
    Codigo
    Mes
    Operacion
    Importe

Bien. La tabla Tipos.db siempre tiene, en principio, más registros que Datso.db y necesito borrar de Tipos.db los códigos que no estén en Datos.db para un mes concreto; se me había ocurrido una consulta SQL como esta:
Código:
DELETE FROM 'Tipos.db'
 WHERE Mes = '200309'
   AND Codigo NOT IN (SELECT Codigo FROM 'Datos.db'
                       WHERE Mes = '200309')

Pensaba meter este código en un elemento UpdateSQL, pero no acabo de entender bien como funcionan. ¿Me podéis echar una mano, aunque sea al cuello? Smile
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

tambien te seriviría poner la consulta en un TQUERY, las activas y listo.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Sí, con unTQuery saco los que tengo que borrar, ¿pero como lo hago luego? Me interesa elminarlos de la tabla para que no crezca de forma desmesurada. Ahora mismo, sin borrar, tiene como 600.000 registros. No es broma
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

no entiendo lo que quieres hacer luego.

Yo te sugería un TQuery para que ejecutes la instrucción y se borren los registros. Pero evidentemente no te entedí.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Hola Angel , si lo que no entiendes es como hacer un delete con un TQuery, que es lo unico que se me ocurre estas preguntando, es de la siguiente forma(Usando tu instruccion sql):

Código:
Query1->SQL->Clear();
Query1->SQL->Add("DELETE FROM 'Tipos.db' ");
Query1->SQL->Add("WHERE Mes = '200309' ");
Query1->SQL->Add("AND Codigo NOT IN (SELECT Codigo");
Query1->SQL->Add("FROM 'Datos.db' ");
Query1->SQL->Add(" WHERE Mes = '200309')");
Query1->Close();
Query1->ExecSQL();


Si tu consulta esta bien, esto deberia eliminar los registros que cumplan con tu condicion....

Si no era eso, dejanos saber a que te refieres exactamente...

Saludos!
_________________
"Ser inteligente no es ser mas, solo equivocarse menos y no usar Visual Basic"
Atte.
Victor Yañez

Apoyen el Proyecto OpenSource del Club Builder. Ya tenemos componentes Listos!!!
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email Yahoo Messenger MSN Messenger
Mensaje    Asunto: Responder citando

Yo no había contestado antes porque tampoco entendí bien la pregunta, pues me pareció que Angel se contestaba así mismo, es decir si su consulta inicial hace lo que el quiere, como bien dicen los demás foreros, solo tendrás que ejecutarla. Es decir meterla en un query y hacer un ExecSQL(), y ya está, automaticamente habrás borrado X registros.

Vamos creo que la solución que dice _Victor es la correcta para lo que creo entender que preguntas.

Ciao.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Perdón. perdón y más perdón Confused
Al leer vuestras respuesta me he dado cuenta que no he explicado bien lo que está pasando. El código que puse antes si lo ejecuto desde Database Desktop funciona perfectamente y me borra los registros que quierop. Sin embargo, si lo incluyo en un query en el programa me da el siguiente error:
Cita:
Project Project1.exe raised exception class ENoResultSet with message 'Error creating cursor handle'

Me temo que esto se debe a que como se crea una tabla temporal para la carga de los registros tratados, por alguna razón, no se habilita bien. Y por eso preguntaba el tema del elemento UpdateSQL.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

pero te borrar los registros?

porque yo recuerdo que también al insertar una instrucción delete con un TQuery, el cual estaba asociado a una grilla me aparecía un error pero me borraba bien los registros, y pienso que tal vez la cosa se vea bien sin ninguna grilla asociada.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor
Mensaje    Asunto: Responder citando

Se usan dos querys, el query asociado a los objetos de edicion, rejillas, text, check box etc, si usas una consulta de actualizacion debes cerrar el query asociado, ejecutar la consulta de actualizacion y volver a abrir el query (que ahora estara vacio) asociado a los controles

En mi caso por lo general uso un query llamado qry don e hago mis consultas de actualizacion (pero si tienes tables o algun otro query, debes cerrarlo y abrir lo para que no tengas problemas )

Supuestamante para eviar esto se usa el UpdateSQL pero yo nunca lo he usado Sad

Espero te sirva
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Eso es lo que me parecía al leer las ayudas de Builder, pero como no me queda nada claro... Confused Gracias a los dos por las pistas.

Lo que no he probado es a tener cerradas las tablas antes; a lo mejor viene por ahí el problema. Os mantendré informados... Y mira: un idea para otro componente del proyecto: utilidad de borrado masivo de datos.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Haciendo un repaso de lo que es un query, en pocas palabras en un "vector" de indices asociado a una archivo fisico o a un conunto de archivos definidos en una consulta .. Estan Memoria obviamente..pero si haces una consulta de actualizacion afectas el o los archivo(s) FISICO PERO EL QUERY EN LA MEMORIA no se ha ENTERADO..para cuando se "entere" se dispara una excepcion

Por eso hay que cerrarlo y volver a abrirlo el query (o table) asociado a lso controles

PD Un table es un query , modificable que lee TODOS los registros, pero a fin de cuentas es un query

Si estoy en un error solicito su correccion
_________________
Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc

http://www.touchsoftwares.com
Volver arriba
Ver perfil de usuario Enviar mensaje privado Visitar sitio web del autor MSN Messenger
Mensaje    Asunto: Responder citando

Después de mucho batallar con los DELETE FROM he tenido que optar por un bucle while. Seguiré investigando y ya os diré.
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Y de paso mato dos pájaros de un tiro Wink

He probado con un la propiedad DeleteSQL de un elemento UpdateSQL. Funciona bien: se ejecuta y borra los registros, pero una vez que se ha ejecutado me devuelve un exceptión Updated failed... y como no sé como interceptar estas excepciones. Pues eso. ¡¡¡SOCORRO!!! Smile
_________________
Un saludo

Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA)
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.