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 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
  #2  
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
  #3  
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 04:40:36.


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