Page 1 of 1

MySql and Append

Posted: Sun Nov 08, 2009 12:04 am
by Mauricio
Hola,

Sigo con MySql,

va el problema, se presente con algunos registros.

tengo una tabla MySql remota

pero hago la captura de la partida en una tabla DBF local, ya que el usuario confirma que desea guardar la informacion hago la conexion a la tabla remota y le empiezo a guardar los datos.

pero en algunas ocaciones me marca que no puede agregar el registro, esto es cuando mi tabla local tiene 10-20 registros, puedo llegar a perder hasta 3.

la solucion que encontre fue hacer un msgWait entre cada registro y parece que dejaron de perderse, mi pregunta es: esto es normal?, debo hacer una pausa para que actualize la tabla de MySql Remota?


este es el codigo

Code: Select all

static function GuardaCompra(nProveedor, cFactura, dFecha, nImporte, nIva)
   local oMovtos := oMysql:Query( "SELECT * FROM compmovs")

   compra->( dbgotop())

   compra->( dbgotop())
   do while !compra->( eof())

      oMovtos:fieldput('proveedor', nProveedor)
      oMovtos:fieldput('factura',   cFactura)
      oMovtos:fieldput('fecha',     dFecha)
      oMovtos:fieldput('codigo',    compra->Codigo)
      oMovtos:fieldput('cantidad',  compra->Cantidad)
      oMovtos:fieldput('precio',    compra->precio)
      oMovtos:fieldput('importe',   compra->importe)

      if !oMovtos:Append()
         msginfo('Problemas para agregar registros', compra->Codigo)
      else
         //msginfo('Registro Agregado0', compra->Codigo)
      endif

       msgWait('Guardando la compra','Espera por favor ...',1)

      compra->( dbskip())
   enddo
   oMovtos:end()
   oMovtos := NIL

   SysRefresh()
   oSql:refresh()
   oBrw:refresh()
return nil
 

Re: MySql and Append

Posted: Mon Nov 09, 2009 2:04 am
by armando.lagunas
hola:

si ocupas ODBC para conectarte a la tabla mysql remota esto te puede servir.

STATIC FUNCTION Llamar( oBrw, oMet, oSql )
LOCAL oDbf, nArea
SELECT PA04 ; __dbZap() // tabla que recibe los datos en forma local :idea:
oDbf := oSql:Query("SELECT * FROM STK WHERE ESTADO='3' ")
oDbf:Open()
oDbf:Complete()
nArea := ALIAS()
oDbf:Gotop()
DO WHILE !EOF()
SELECT PA04 ; dbAppend()
SELECT ( nArea )
PA04->PALL := FIELD->FIELD_0001
PA04->FECH := FIELD->FIELD_0002
PA04->HORA := FIELD->FIELD_0003
PA04->BAND := FIELD->FIELD_0004
PA04->NETO := FIELD->FIELD_0005
SELECT ( nArea )
SKIP
ENDDO
oDbf:End()
oMet:SetPos( 0 )
SELECT PA04 ; dbGotop()
oBrw:Reset()
oBrw:UpStable()
oBrw:Refresh(.T.)
RETURN Nil


espero que te sirva...


saludos desde Chile

Re: MySql and Append

Posted: Mon Nov 09, 2009 6:23 am
by Mauricio
Hola Armando:


Gracias, pero estoy usando MySql,

parece que con el msgWait deje de perder registros


Saludos,
Mauricio

Re: MySql and Append

Posted: Mon Nov 09, 2009 12:10 pm
by armando.lagunas
hola:

yo ocupo Mysql como motor de base de datos y el ejemplo es funcional 100%, cuando me refería si utilizas ODBC, quiere decir, que si éste es el método que utilizas para conectarte a Mysql por windows ya que también existe ADO y otros.

Saludos desde Chile.
:?

Re: MySql and Append

Posted: Mon Nov 09, 2009 5:31 pm
by Mauricio
Hola Armando,

TMySql de las contribuciones de xHB

Saludos

Mauricio

Re: MySql and Append

Posted: Mon Nov 09, 2009 6:34 pm
by ADBLANCO
Yo Utilizo Eagle
y agrego de la siguiente forma:

Code: Select all

*****************************************************************************************************
FUNCTION CARGACONDI()
*****************************************************************************************************
LOCAL cCommand   ,;
      cNum       ,;
      cNombre    ,;
      nTitul     ,;
      cTitulo    ,;
      mTexto     ,;
      oQuery
      oQuery:=TMSQuery():New( oDTComun )
      cCommand:={||"INSERT INTO "+cDTComun+".CONDI(NUM,"+;
                                                  'NOMBRE,' +;
                                                  'TITUL,'  +;
                                                  'TITULO,' +;
                                                  'TEXTO)'  +;
                                           "VALUES( "+bTrans(cNum        )+","+;
                                                      bTrans(cNombre     )+","+;
                                                      str(nTitul         )+","+;
                                                      bTrans(cTitulo     )+","+;
                                                      bTrans(mTexto      )+")"}
    USE C:\TEMPO\CONDI EXCLUSIVE alias CONDI
    //
    // COPIANDO TABLA A TABLA_SQL
    DO WHILE !CONDI -> (EOF())
      cNum     := CONDI -> Num
      cNombre  := CONDI -> Nombre
      nTitul   := CONDI -> Titul
      cTitulo  := CONDI -> Titulo
      mTexto   := CONDI -> Texto
      oQuery:Open(eval(cCommand))
      oQuery:close()
      CONDI -> (DBSKIP())
    ENDDO
    CLOSE
    oQuery:close()
    RETURN nil

 

Re: MySql and Append

Posted: Mon Nov 09, 2009 8:14 pm
by Armando
Mauricio:

Dale una mirada a este blog

http://sqlcmd.blogspot.com/

Saludos

Re: MySql and Append

Posted: Mon Nov 09, 2009 8:49 pm
by Mauricio
AdBlanco, Armando,

Gracias :D


una pregunta mas, si me pueden tirar un cable.

en los report normales

como definen su columna, en una tabla chica lo que hice fue meterla en un arreglo e imprimir el arreglo, porque no di con bola de como hacerlo directo de la tabla de mySql.

adjunto el codigo

Code: Select all

   local oReport
   LOCAL oFont1, oFont2, nFolio := oSql:fieldget('folio')
   local oMovtos :=  oMysql:Query( "SELECT * FROM remmovs ORDER BY folio") 
   local aRegistros := {}, nRegistro := 1
   local cNombre


   oMovtos:gotop()
   do while !oMovtos:eof()
      cNombre := BuscaCodigo( oMovtos:fieldget('codigo'))
      aadd(aRegistros, { oMovtos:fieldget('codigo'), oMovtos:fieldget('cantidad'),;
                                  oMovtos:fieldget('folio'), cNombre})
      oMovtos:Skip()
   enddo

   oMovtos:gotop()


   REPORT oReport TITLE 'Empresa de Prueba', "Relación de Artículos en la remisión " ;
         FOOTER dtoc(date()) + ', ' +  time() +  ", Pág :"+strzero(oReport:nPage,3) PREVIEW

      COLUMN TITLE "Código"                              DATA aRegistros[nRegistro,1]
      COLUMN TITLE "Descripción"                         DATA aRegistros[nRegistro,4]
      COLUMN TITLE "Cantidad"                            DATA aRegistros[nRegistro,2]
      COLUMN TITLE "Folio"                               DATA aRegistros[nRegistro,3] PICTURE '999,999' RIGHT


      oReport:bSkip := {|| nRegistro++}
   END REPORT

   ACTIVATE REPORT oReport WHILE nRegistro <= len(aRegistros)
return NIL

 

Re: MySql and Append

Posted: Tue Nov 10, 2009 9:46 pm
by Ramon Paredes
Mauricio,

Para un reporte con Mysql puedes hacer lo siguiente :

FUNCTION Imp_lista() \\ funcion para impresion del listado/reporte

LOCAL nLinea := 1
LOCAL nHasta := oRs:RecordCount() \\contador de registros del recordset

oRs:MoveFirst() \\ voy al primero

REPORT oReport TITLE " MI REPORTE " ECT ECT

IF oReport:lCreated
oReport:bSkip := { || (nLinea++, oRs:MoveNext())}
ENDIF

ACTIVATE REPORT oReport ;
WHILE nLinea <= nHasta

yo tome un ejemplo de este foro en esa ocasion que lo necesitaba y funciona al 100%

saludes espero te sea de utilidad a mi me sirvio de mucho

Ramon Paredes

Re: MySql and Append

Posted: Wed Nov 11, 2009 6:35 am
by Mauricio
Ramon :)

Gracias, lo pruebo y te comento los resultados,


Saludos,
Mauricio

Re: MySql and Append

Posted: Thu Nov 12, 2009 9:01 am
by Mauricio
Ramon :mrgreen:

gracias funciono al 100%


Saludos,
Mauricio