FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Como puedo evitar registros duplicados en mysql help
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 04:04 AM

Hola

se me están duplicando algunos registros :shock:

como debo hacer para evitar se dupliquen, como se filtran borran etc. en Mysql :?:

Saluditos :wink:

Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 12:33 PM

el "se me estan duplicando" suena a cosa de mandinga. pero bueno yo haria esto:
1) backup
2) buscar cuales son los duplicados (comparando registros)
3) una vez que tengo esos registros ver que si los borros no altere otros (por las dudas que hayan sido creado por tablas conectadas entre si)
4) asegurarse que el usuario que esta abriendo la base de datos tenga permisos para eliminar.
5) en un ARRAY pondria los ID de esos registros que quiero eliminar y luego recorro el array y voy borrando el registro.

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 302
Joined: Fri Apr 23, 2010 04:30 AM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 03:00 PM

Aida,

Para evitar la duplicacion de registros debes simular el bloqueo, esto porque MYSQL no tiene bloqueo a nivel de registro, confirmame que usas para acceder a mysql si es dolphin te puedo enviar un ejemplo de como hacerlo.

Slds

Nicanor Martinez M.
Auditoria y Sistemas Ltda.
MicroExpress Ltda.
FW + FWH + XHARBOUR + HARBOUR + PELLES C + XDEVSTUDIO + XEDIT + BCC + VC_X86 + VCC_X64 + MINGW + R&R Reports + FastReport + Tdolphin + ADO + MYSQL + MARIADB + ORACLE
nnicanor@yahoo.com
Posts: 1054
Joined: Sun Oct 09, 2005 10:41 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 03:33 PM
Holas,,, Para evitar que se dupliquen registros,,, mucho tiene que ver el diseño de la tabla, como crear llaves únicas, primarias etc,,, asi el mismo MySQL se encarga de controlar el tema...
Para eliminar registros duplicados de la tabla clientes en cuyo campo ruc_dni están los registros duplicados
1ro. creamos una tabla temporal (clientmp) con la misma estructura y datos de la tabla de clientes pero agrupado por el campo ruc_dni
2do. eliminamos la tabla clientes
3ro. insertamos los registros e la tabla clientmp a la tabla clientes ( ya vienen sin duplicados)
4to. eliminamos la tabla clientmp
5to.optimizamos la tabla clientes

y listo......

Code (fw): Select all Collapse
       cRegis := "CREATE TABLE clientmp AS SELECT * FROM clientes GROUP BY (clientes.ruc_dni)"    // 1ro
       SQLExec(oMySQL, cRegis)

       cRegis := "DELETE FROM clientes"                                                  // 2do
       SQLExec(oMySQL, cRegis)

       cRegis := "INSERT INTO clientes (SELECT * FROM clientmp)"                         // 3ro
       SQLExec(oMySQL, cRegis)

       cRegis := "DROP TABLE clientmp"                                                               // 4to
       SQLExec(oMySQL, cRegis)

       cRegis := "OPTIMIZE TABLE clientes"                                                        // 5to
       oObj := SQLQry(oMySQL, oObj, cRegis)
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 05:06 PM
Yo lo hago asi:

Code (fw): Select all Collapse
#include "fivewin.ch"
#include <tdolphin.ch>

#DEFINE C_SIMPLE CHR( 39 )
#DEFINE c_simple CHR( 39 )

Function Test()
    local cClave := "0001"
    local cNombre := "CESAR CORTES CRUZ"
    local cDir    := "CANELO 97"
    local cQry := ""
    local oQry
   local nSeek

    * verificamos si el registro existe

    cQry := "SELECT clave,nombre"
    cQry += " FROM clientes"
    cQry += " WHERE clave=" + C_SIMPLE + cstr2( cClave ) + C_SIMPLE
    cQry += " ORDER BY clave LIMIT 1"
    oQry := oCon:Query( cQry )
    nSeek := oQry:nRecCount
    oQry:End()

    if nSeek = 0
        cQry := "INSERT INTO clientes SET "
        cQry += "clave=" + ClipValue2SQL( cClave )  + ","
    else
        cQry := "UPDATE clientes SET "
    endif
    cQry += "nombre=" + ClipValue2SQL( cNombre ) + ","
    cQry += "direccion=" + ClipValue2SQL( cDir )

    if nSeek > 0
        cQry += " WHERE clave=" + C_SIMPLE + cstr2( cClave ) + C_SIMPLE
    ENDIF

    //guardamos la informacion
    oCon:BeginTransaction()
    oCon:Execute( cQry )
    oCon:CommitTransaction()

Return nil

FUNCTION cStr2( nNum )
RETURN AllTrim( CStr( nNum ) )


SALUDOS.
Cesar Cortes Cruz

SysCtrl Software

Mexico



' Sin +- FWH es mejor "
Posts: 1956
Joined: Fri Oct 07, 2005 07:08 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Thu Aug 28, 2014 09:45 PM

me da algo vuelta en la cabeza...

porque se te repiten registros?

FWH 21.02
Harbour 3.2.0dev (r2104281802)
Copyright (c) 1999-2021, https://harbour.github.io/
Posts: 2064
Joined: Fri Jan 06, 2006 09:28 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Fri Aug 29, 2014 03:30 AM

Saludos, llegue tarde a la clase, creo ya todo lo han dicho, el mejor control para evitar duplicidad de registro es el campo Key, con eso no hay pele, por que hasta haciendolo directamente sobre la tabla con algun administrador de database, te avisara que el campo que estas tratando de entrar existe. Tambien podiras crear una rutina ordenando los registros por el camopo dupliacado, haces un gotop a la tabla, usas un do while !eof() y comparas con una var el valor duplicado, si es igual a la var lo borras, menos la primera vez para que quede uno, luego cuando encuentro uno que no sea, le pasa ese valor a la VAR, saltas un registro y sigue la rutina de preguntar si esta duplicado y borrarlo, a lo mejor parace algo ambiguo y trabajoso, pero si no tiene buen control sobre MySql, esto sera mejor, ya que un pele en Mysql y seguro limpias toda la tabla. Obviamente antes de hacer todo esto, la recomendacion es tener un respaldo preventivo de las tablas, por si acaso, espero haber ayudado en vez de enrredar m as, saludos... :shock:

Dios no está muerto...



Gracias a mi Dios ante todo!
Posts: 817
Joined: Sun Jun 15, 2008 07:47 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Fri Aug 29, 2014 12:43 PM
Lo mejor es lo que dice Willi.

Si tienes acceso al servidor mediante frontend como HeidiSQL o algún otro mejor, así te evitaras hacer programas.

CREATE TABLE nuevaTabla SELECT DISTINCT * FROM viejaTabla;

Prueba eso Aida.

Fijate en el DISTINCT .

Luego:
1) comprueba la nuevaTabla que tiene lo que tu quieres -> SELECT * FROM nuevaTabla ORDER BY campo
2) Borras la tabla vieja -> DROP TABLE tablaVieja
3) Renombras la nueva al viejo nombre -> RENAME TABLE nuevaTabla TO tablaVieja
4) Crea en la tabla una clave primaria -> ALTER TABLE tablaVieja ADD PRIMARY KEY ( campo,...)

Las sentencias las he hecho sin probar pero son esas :-)

Salu2 :-)
______________________________________________________________________________

Sevilla - Andalucía
Posts: 880
Joined: Fri Jan 12, 2007 08:35 PM
Re: Como puedo evitar registros duplicados en mysql help
Posted: Wed Sep 03, 2014 03:58 AM

Muchas gracias tomare nota :mrgreen:

Saluditos :wink:

Que es mejor que programar? creo que nada :)
Atropellada pero aqui ando :P

I love Fivewin

séʌǝɹ ןɐ ɐʇsǝ opunɯ ǝʇsǝ

Continue the discussion