Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > OOP
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-04-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sizne.

Si, te entendí bién la primera vez. Usá el primer ejemplo que te puse y eliminará los duplicados. (por supuesto cambiá los nombres de campo que puse por los tuyos...)

Saludos.

Nota: Borré unos comentarios erroneos en el primer post: "DELETE Campos_Deseados FROM" en su lugar va "DELETE FROM", el error fue por que hice la prueba con SELECT y copie y pegue... perdón.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-04-2010 a las 01:57:29.
Responder Con Cita
  #2  
Antiguo 30-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 17
sizne Va por buen camino
Hola ecfisa, gracias por responder y explicar tan bien .

Con tu ayuda hice el el siguiente codigo
Cita:
DELETE FROM BDmaterias
WHERE IdM = (SELECT MIN(IdM) FROM BDmaterias b
WHERE b.CodigoM = CodigoM and CalificacionM='Reprobado')
Hice las pruebas respectivas, y pues solo me elimina todos aquellos que sean reprobados una cada ejecucion, aunque no sean igual de CodigoM....

Cita:
DELETE FROM BDmaterias a
WHERE IdM > (SELECT MIN(IdM) FROM BDmaterias b
WHERE b.CodigoM = a.CodigoM and a.CalificacionM='Reprobado')
Aqui me aparecio el error de sintaxis cerca de 'a' y cuando lo elimine, pues me lo eliminaba todos los registros pero menos el menor (IdM=1). Por ello opte por el otro, solo q no resulta como deseo...


No sé como hacerlo para salga como quiero, solo eliminar los primeros duplicados y que sean reprobados.

Saludos!
Responder Con Cita
  #3  
Antiguo 30-04-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 17
sizne Va por buen camino
Holas...
Miren estuve haciendo lo siguiente para mi duda... pero me los elimina todos los "reprobados" sin importar que haya o no duplicados
Cita:
DELETE FROM BDmaterias
WHERE IdM IN
(SELECT IdM
FROM BDmaterias b
WHERE NombreM = b.NombreM and (CodigoM=b.CodigoM)and
(CalificacionM='Reprobado')
...alguien???
Responder Con Cita
  #4  
Antiguo 01-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola de nuevo sizne.
Hoy con un poco más de tiempo, revisé a fondo el código anterior, cosa que no hice antes por carecer de él.
Y sí, efectivamente no hace lo que deseas.

Ahora bién, hice una tabla en interbase con los campos involucrados, y la cargué de la siguiente forma:
Código:
IdM  CodigoM   CalificacionM
-----------------------------
1    A         R             (abreviando...)
2    A         R
3    B         R
4    C         R
5    B         R             (mal bicho el profe ...)
La consulta la hice con SELECT para visualizar el resultado (si lo borro difícilmente lo vea):
Código:
IdM  CodigoM   CalificacionM
-----------------------------
1    A         R
3    B         R
Es decir que si cambiamos SELECT por DELETE , esos registros son los que se eliminarán. Por lo tanto
tenemos nuestro problema solucionado.

En definitiva la consulta queda así:
Código:
SELECT * FROM PRUEBA    
WHERE IdM NOT IN(
SELECT MAX(IdM) FROM PRUEBA
GROUP BY CodigoM, CalificacionM)
Fijate que usando MAX(IdM) elimina las primeras apariciones de repetición y usando MIN(IdM), elimina las repeticiones posteriores
Y por supuesto cambiá 'SELECT * FROM' por 'DELETE FROM', al menos si queres que borre...

Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 01-05-2010 a las 06:41:18.
Responder Con Cita
  #5  
Antiguo 01-05-2010
sizne sizne is offline
Miembro
 
Registrado: mar 2010
Posts: 104
Poder: 17
sizne Va por buen camino
Hola ecfisa, gracias eh!!!
Cambie unas cositas en el ejemplo
Código:
IdM  CodigoM   CalificacionM
-----------------------------
1    A         Reprob             (abreviando...)
2    A         Aprob
3    B         Reprob
4    C         Reprob
5    B         Reprob             (mal bicho el profe ...)
En este caso quiero que solo me de resultado:
Código:
IdM  CodigoM   CalificacionM
-----------------------------
2    A         Aprob
4    C         Reprob
5    B         Reprob
Como se vé solo elimina los primeros datos que fueron ingresados, sin importar la calificacionM.
Lo que hice fue lo siguiente en Delphi, funciona pero quiero reducir el codigo y que sea en menor tiempo la ejecucion....y en una sola tabla el recorrido.
Código Delphi [-]
procedure TFKardexM.verificarClick(Sender: TObject);
var i,j:integer;
begin
  i:=0;
  materia.First;
  while i< materia.RecordCount do
    begin
      i:=i+1;
      j:=0;
      materiaT.First;
      while j < materiaT.RecordCount do
      begin
        j:=j+1;
        if (materiaCodigoM.Text  = materiaTCodigoM.Text) then
          begin
            ShowMessage('Son iguales materia '+materiaCodigoM.Text);
            ShowMessage('Son iguales materiaT '+materiaTCodigoM.Text);
            ShowMessage('eliminara en AmateriaT);
            materiaT.Delete;
          end;
      materiaT.Next;
      end;
    materia.Next;
    end;
end;

Aqui estoy usando dos tablas, asi recorro uno por uno y comparo con cada registro de la OTRA tabla.
Pero si fuese solo en una tabla....ya no puedo usar el FIRST,NEXT para comparar....

Saludos...
Responder Con Cita
  #6  
Antiguo 01-05-2010
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 38
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola sizne.

A ver...
¿ Lo que queres es que se eliminen las apariciones de registros duplicados cuya calificacion sea 'Reprobado' ?

Si es eso bastaría con modificar el código sql así :
Código:
DELETE FROM PRUEBA
WHERE IdM NOT IN(
SELECT MAX(IdM) FROM PRUEBA 
GROUP BY CodigoM)
AND CalificacionM = 'Reprob'
Saludos.
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Eliminacion duplicados y AS Cabanyaler SQL 2 19-04-2010 12:55:22
problema de eliminacion nikotina SQL 2 28-02-2007 14:34:21
Eliminacion de datos luxus Conexión con bases de datos 2 28-08-2006 16:05:34
Problemas de Eliminación Palmiro Conexión con bases de datos 8 03-02-2006 14:45:14
procedimiento de eliminacion kejos MS SQL Server 3 30-01-2006 16:46:02


La franja horaria es GMT +2. Ahora son las 02:01:32.


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