Page 1 of 1

Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 5:40 pm
by Mauricio
Hola :D

despues de pelearme por dias con la perdida de registros al subir de DBF a MySql con TMySql,

ayer me puse a hacer un tracing de por donde se perdia el hilo y es al agregar mas de 20 registros.

// el ejemplo no es dbf, pero hace lo mismo, es solo para explicar como lo hago

Code: Select all

nContador := 1
do while nContador < 50
    oRegistro:("campo", nContador++)
    oRegistro:Append()
    if oRegistro:netErr()
        msginfo(''ocurrio un error", nRegistro
    endif
enddo

por lo general siempre marca el error al llevar en 20 y 30 registros, buscando lei algo de LOCK TABLE, BEGIN TRANSACCION , ROLLBACK

alguien ya paso por este trauma que me pueda tirar un cable antes de empezar a buscar

saludos,
Mauricio :mrgreen:

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 7:02 pm
by Adolfo
Maurico...

Yo utilizo una rutina que agrega mas de 500 registros de golpe y no pierdo ninguno.. podrias enunciar con que lo haces o un ej del codigo verdadero para hecharle un ojo...

Usas que tipo de recordset, cliente, server, tipo de bloqueo.. el server es en LAN o en internet...

Eso
Saludos
Adolfo

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 7:13 pm
by Mauricio
Adolfo,

esta en internet, no e probado en local, porque el sistema esta corriendo en internet

es MySql, con TMySql, tipo de tabla InnoDB

tienes un trozo de codigo que pueda darme una luz

Code: Select all


static function LeeData( dFecha)

   oMovs := oMysql:Query( "SELECT * FROM liquida LIMIT 0")
   
   use( cMovtos ) new alias 'movtos'
   nTotal := movtos->( RecCount())
   msginfo('Registros a cargar : ' + ltrim(str(nTotal)), cProgram)

    movtos->( dbgotop())
    DO WHILE !movtos->( eof())

        oMovs:fieldput('ruta'     , movtos->Ruta)
        oMovs:fieldput('cliente'  , movtos->Cliente)
        oMovs:fieldput('fecha'    , dFecha )
        oMovs:fieldput('cantidad' , movtos->Cantidad)
        oMovs:fieldput('precio'   , movtos->precio)
        oMovs:fieldput('importe'  , movtos->Importe)
        oMovs:fieldput('registro' , ++nCargados)


        // msgwait('Procesando informacion ..............' , 'Espere unos minutos .....', .25)

        if !oMovs:Append()
            msgStop('SE GENERO UN ERROR EN LA CONEXION, EL PROCESO SE CANCELARA' + CRLF +;
                'RE-INTENTELO DE NUEVO POR FAVOR, NO SE DUPLICARA LA INFORMACION' + CRLF +;
                'LOS _ YA FUERON ELIMINADOS, SE CARGARON' + CRLF +;
                ' : '  + ltrim( str(  nCargados ))  + ' del total : ' + ltrim(str(nTotal)), cProgram)
            exit
        endif
        SysRefresh()
        nCargados++
        //movtos->( dbdelete())
        movtos->( dbskip())
    ENDDO
    msginfo('_ : ' + ltrim(str(nCargados)) + ' de ' + ltrim(str(nTotal)),'Informe de Carga')
    browse()
    oMovs:end()
    oMovs := NIL
return nil
 

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 7:35 pm
by Lautaro
Mauricio,

¿ Que error te reporta ?, ¿ es de Mysql ?, si es del motor o del cliente te va a dar un codigo de error que hay que buscar en la documentacion de mysql.

Atte.,

Lautaro

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 7:57 pm
by Mauricio
Lautaro,

solo me retorna error al agregar, no sabria si es el motor de datos o como lo identifico?

Code: Select all

if !oMovs:Append()
            msgStop('SE GENERO UN ERROR EN LA CONEXION, EL PROCESO SE CANCELARA' + CRLF +;
                'RE-INTENTELO DE NUEVO POR FAVOR, NO SE DUPLICARA LA INFORMACION' + CRLF +;
                'LOS _ YA FUERON ELIMINADOS, SE CARGARON' + CRLF +;
                ' : '  + ltrim( str(  nCargados ))  + ' del total : ' + ltrim(str(nTotal)), cProgram)
            exit
        endif
 

que seria lo mismo que hacer esto

Code: Select all

   oMovs:Append()
   if oMovs:NetErr()
       ? "se genero un error"
   endif
 
saludos y gracias por su interes

Mauricio

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 8:30 pm
by Lautaro
Mauricio,

Puedes usar el metodo :error() de la clase TMysqlQuery o TmysqlTable

en tu codigo quedaria mas o menos asi :

Code: Select all

  oMovs:Append()
   if oMovs:NetErr()
       ? "se genero un error"
       ? oMovs:Error()
   endif
 
 
Saludos,

Lautaro Moreira

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 8:31 pm
by Mauricio
:) probando


gracias,
Mauricio :mrgreen:

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 8:45 pm
by Mauricio
:lol: :lol: :lol: :lol: :lol: :lol: :lol:

Lautaro,

yo te mando hacer una estatua hermano y al buen Adolfo una altar con flores

como dicen por aca... "the one that does not know, he is like that does not watch"


me habeis salvado el dia sres, con ese codigo del numero de error, me dice que tenia una llave duplicada, le quite el primary Key and ready.

subio todos los registros.

cosa de novatos para ustedes, pero son mis pinimos con Sql,

gracias de nuevo a los 2

Mauricio :mrgreen:

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 10:03 pm
by Lautaro
Mauricio,

No tienes nada que agradecer, y es un placer que mis conocimientos sirvan para algo.

Sobre tu problema, creo que deberias ver el diseño de la tabla, ya que por lo menos en teoria no deberian haber primary keys repetidas, a menos que algo ( no se me ocurre que ) lo justifique.


Saludos.

Lautaro Moreira

Re: Error an agregar registros en MySql

Posted: Thu Dec 03, 2009 10:58 pm
by Mauricio
:D

Si, fue pensar aun como DBF, podia tener el mismo codigo N veces en el detalle de movientos de una factura, le hacia un indice y podian repetirse sin problemas, cuando consultara ese codigo le hacia un seek y listo

pero aqui no me deja duplicarlo, ese campo no debe ser primery Key en la tabla, error de novato.


saludos,
Mauricio