| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Jue 06 Nov, 2003 1:05 pm Asunto: Borrado masivo de registros |
|
|
A ver si me explico bien. Tengo dos tablas paradox, que tienen entre otros estos campos.
Tabla 1: Tipos.db
Tabla 2: Datos.dbCodigo
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?  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Jue 06 Nov, 2003 3:29 pm Asunto: |
|
|
| tambien te seriviría poner la consulta en un TQUERY, las activas y listo. |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Vie 07 Nov, 2003 1:50 pm Asunto: |
|
|
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Vie 07 Nov, 2003 2:20 pm Asunto: |
|
|
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 |
|
 |
_Viktor Master


Registrado: 20 Jul 2003Mensajes: 463Ubicación: Santiago, Los Angeles - Chile
|
Publicado: Vie 07 Nov, 2003 2:46 pm Asunto: |
|
|
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 |
|
 |
XyVy Master


Registrado: 25 Ago 2002Mensajes: 557Ubicación: Murcia (España)
|
Publicado: Vie 07 Nov, 2003 3:22 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 10 Nov, 2003 9:43 am Asunto: |
|
|
Perdón. perdón y más perdón
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 |
|
 |
ikis Master


Registrado: 28 Dic 2002Mensajes: 703Ubicación: Madrid, España
|
Publicado: Lun 10 Nov, 2003 11:37 am Asunto: |
|
|
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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 10 Nov, 2003 12:15 pm Asunto: |
|
|
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
Espero te sirva _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Lun 10 Nov, 2003 1:01 pm Asunto: |
|
|
Eso es lo que me parecía al leer las ayudas de Builder, pero como no me queda nada claro... 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 |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Lun 10 Nov, 2003 1:17 pm Asunto: |
|
|
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 |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
|
| Volver arriba |
|
 |
Angel Master


Registrado: 15 Abr 2003Mensajes: 2311Ubicación: Toledo (España)
|
Publicado: Mie 12 Nov, 2003 2:56 pm Asunto: |
|
|
Y de paso mato dos pájaros de un tiro
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!!!  _________________ Un saludo
Necesitamos tu ayuda: Envía AI al 27595 (Coste 1,20 euros + IVA) |
|
| Volver arriba |
|
 |
|