Consulta Sobre Pasar Dbf a Mysql

Post Reply
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Hola Amigos, muy buen día.

Tengo una solicitud de pasar periódicamente una DBF de 1.100.000 registros, a una tabla MySQL, donde realizaran algunas estadísticas externas.

Necesito como pasar esta DBF, con la complicación que existe una campo en la DBF que en la Tabla MySQL cambia de nombre, pero debe tener el mismo dato.

Estructura DBF.
Folio N 10
Fecha D
Cod_Pro C 5 ** Este Campo Cambia de Nombre en tabla MySQL
Nom_Pro C 40
...
...
...

Tabla Tabla MySQL
Folio N
Fecha D
Med_Tra ** Este Campo debe contener el mismo dato de Cod_Pro.
Nom_Pro


Existe alguna forma de realiza este proceso desde FWH 17.09, con algun codigo Prg. y generar una ejecutar un exe cuando se requiera.

Muchos Saludos

Antonio
User avatar
cmsoft
Posts: 653
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Consulta Sobre Pasar Dbf a Mysql

Post by cmsoft »

Podes hacer el insert en la base de datos, recorriendo la dbf y cada n registros (por ejemplo 10000) grabas en la base

Code: Select all

TRY
      CONNECT oServer HOST cServer ;
                      USER cUser ;
                      PASSWORD cPassword ;
                      PORT nPort ;
                      FLAGS nFlags;
                      DATABASE cDBName
                                
   CATCH oErr 
     RETURN NIL
END
USE folios ALIAS "folios" SHARED NEW
text = "insert into mitabla (folio,  fecha, Med_Tra, Nom_pro) VALUES " 
i = 0
TRY 
    oServer:BeginTransaction()
    oServer:Execute("SET SESSION wait_timeout = 186400") // Pones una duracion de sesion larga
    oServer:Execute("TRUNCATE mitabla") // Esto unicamente si cada vez que la tenes que llenar, primero la tenes que vaciar
    do while !folios->(eof())
        text = text + " (" + clipvalue2sql(folios->folio) + ","+;
                             clipvalue2sql(folios->fecha) + "," +;
                             clipvalue2sql(folios->Cod_Pro) + "," +;
                             clipvalue2sql(folios->Nom_Pro) +;
                             +"),"
        folios->(dbskip())
        i++
        IF i > 10000
           i := 0 
           text = LEFT(text,LEN(text) - 1)
           oServer:Execute(text)
           text = "insert into mitabla (folio,  fecha, Med_Tra, Nom_pro) VALUES " 
        ENDIF       
    enddo
    IF i > 0
       text = LEFT(text,LEN(text) - 1)
       oServer:Execute(text)
    ENDIF
    oServer:CommitTransaction()
    oServer:Execute("SET SESSION wait_timeout = 28800") // Volves a poner corta
CATCH oErr
    MsgStop("Error MySql"+CHR(10)+oErr:description,"Error")
    RETURN NIL  
END TRY    
 
Espero te sirva
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Hola Cesar.

Muchas gracias por tu ayuda, siempre presente cuando requiero de ella, te lo agradezco de corazón.

Realizare las pruebas este fin de semana.

Muchas gracias y que estés muy bien.

Saludos

Antonio
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by Armando »

Antonio:

Como te puedes dar cuenta, las DBF y Tablas pueden convivir perfectamente.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Hola Armando como estas.

Si, ayer me contacto un cliente que por lo menos tenia 25 años sin saber de el, en aquellos años le desarrolle un Sistema pero Clipper 5.2 DOS, ni pensar en ambiente windows, para mi sorpresa, aun lo usan y con un almacenamiento de 1.000.000 de registros. Es una grata sorpresa, pero un gerente necesita poder trabajar esa información externamente y por eso la consulta.

Muchos Saludos.

Antonio
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by Armando »

Antonio:

Otro comentario, para trabajar con tablas, ya sean MySQL, MariaDB o SQL,
no necesitas librerías externas, ojo, NO DIGO QUE SEAN MALAS o que no sirvan,
simplemente digo que no las necesitas, con ADO + las mejoras a muchos
comandos que Mr. Rao ha hecho (Estupendo trabajo) tienes suficiente.

Lo único que debes cambiar es tu chip para no querer trabajar tablas al
estilo de las DBFs.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Armando:

Muy agradecido por ayuda, entiendo todo lo que me has comentado y mucho mas con la información que me enviaste.

En este caso particular, no son mas de 8 campos de una Dbf que contiene varios mas, que incluso revisando entre mis cosas, ni siquiera tengo los PRG del sistema de clipper, que es una versión muy antigua, por lo que lo único que podría hacer es crear unas pocas líneas de código en FWH con un parámetro de fecha para seleccionar y eso es todo, que lo ejecuten cuando lo necesiten, algo esta pasando en las gerencias que están reuniendo manipular datos en busca de información que les ayude a gestionar.

La verdad que me deja muy sorprendido que al dia de hoy, aun este en plena vigencia, un sistema desarrolla completamente en clipper y 16 bits.

Bueno amigo, creo que yo aun estoy muy lejos de la actualidad de uds, años luz, espero pronto como te comente dar el salto a MySQL, SQL, en un proyecto grade, solo deseo que sea luego.

Muchos Saludos.

Antonio
User avatar
Armando
Posts: 2479
Joined: Fri Oct 07, 2005 8:20 pm
Location: Toluca, México
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by Armando »

Antonio:

Sin pretender meterme en tus negocios, pienso que tu cliente está
en un riesgo alto, los PCs a 16 bits prácticamente están extintos
así que el día que, por necesidad, deban cambiar a PCs de 32 o 64
bits tu excelente sistema dejará de funcionar.

Saludos
SOI, s.a. de c.v.
estbucarm@gmail.com
http://www.soisa.mex.tl/
http://sqlcmd.blogspot.com/
Tel. (722) 174 44 45
Carpe diem quam minimum credula postero
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Armando

Totalmente de acuerdo en lo que opinas, por eso me sorprende que aun este operativo este sistema, no he visto hoy en que maquinas los están corriendo, solo se que hasta pc con Windows xp 32 bits, tendría que funcionar sin problemas. Pensar proponer una actualización, tendría que evaluarlo mucho, por mi parte ya no desarrollo ese tipo de temas, hoy desarrollo en el área de la Salud, ya hace muchos años. Esto es solo responder a pasar los datos a una Tabla que me la han solicitado así.

Muchos Saludos

Antonio
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by nageswaragunupudi »

remtec wrote:Hola Amigos, muy buen día.

Tengo una solicitud de pasar periódicamente una DBF de 1.100.000 registros, a una tabla MySQL, donde realizaran algunas estadísticas externas.

Necesito como pasar esta DBF, con la complicación que existe una campo en la DBF que en la Tabla MySQL cambia de nombre, pero debe tener el mismo dato.

Estructura DBF.
Folio N 10
Fecha D
Cod_Pro C 5 ** Este Campo Cambia de Nombre en tabla MySQL
Nom_Pro C 40
...
...
...

Tabla Tabla MySQL
Folio N
Fecha D
Med_Tra ** Este Campo debe contener el mismo dato de Cod_Pro.
Nom_Pro


Existe alguna forma de realiza este proceso desde FWH 17.09, con algun codigo Prg. y generar una ejecutar un exe cuando se requiera.

Muchos Saludos

Antonio
It is very easy using built-in MySql library of FWH 17.09, using this function without writing any code.

Code: Select all

USE MYDBF
oCn:UploadFromAlias( "mysqltable", "FOLIO,DATA,CODE_PRO,NOM_PRO", "folio,date,med_tra,nom_pro" )
 
Not only different field names, we can also use expressions in the dbf field list.
Regards

G. N. Rao.
Hyderabad, India
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by nageswaragunupudi »

This is a small exmaple.
You can copy to fwh\samples folder, build with buildh or buildx and test.
Please provide your mysql server credentials, password, etc.

Code: Select all

#include "fivewin.ch"

function TestUploadFromAlias()

   local oCn, oRs, nBatchSize := 500

   FWCONNECT oCn HOST "localhost" USER "root" PASSWORD "yourpassword" DATABASE "yourdb"
   ? "connected"

   oCn:DropTable( "dbf2sql" )
   oCn:CreateTable( "dbf2sql", { { "custname", "C", 30, 0 }, { "address", "C", 30, 0 } } )
   ? "table created"
   USE CUSTOMER NEW
   ? "start upload"
   oCn:UploadFromAlias( "dbf2sql", "TRIM(FIRST-','-LAST),STREET", "custname,address", nBatchSize )
   ? "uploaded"

   oRs   := oCn:dbf2sql
   XBROWSER oRs
   oRs:Close()
   oCn:Close()

return nil
 
Image
Regards

G. N. Rao.
Hyderabad, India
remtec
Posts: 431
Joined: Fri May 12, 2017 2:50 pm

Re: Consulta Sobre Pasar Dbf a Mysql

Post by remtec »

Mr. Rao.

Muy buen dia.

Deseando que te encuentres muy bien.

Como siempre mil gracias por tu ayuda y tiempo dedicado, estos nos ayuda a crecer.

Ya he probado y funciona muy bien, ahora a preparar el programa para hacer las ultimas pruebas y entregar.

Muchas gracias.

Antonio.
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: Consulta Sobre Pasar Dbf a Mysql

Post by TecniSoftware »

Mr Rao

Es posible utilizar un Meter en este ejemplo para visualizar el progreso?

Muchas gracias

nageswaragunupudi wrote:This is a small exmaple.
You can copy to fwh\samples folder, build with buildh or buildx and test.
Please provide your mysql server credentials, password, etc.

Code: Select all

#include "fivewin.ch"

function TestUploadFromAlias()

   local oCn, oRs, nBatchSize := 500

   FWCONNECT oCn HOST "localhost" USER "root" PASSWORD "yourpassword" DATABASE "yourdb"
   ? "connected"

   oCn:DropTable( "dbf2sql" )
   oCn:CreateTable( "dbf2sql", { { "custname", "C", 30, 0 }, { "address", "C", 30, 0 } } )
   ? "table created"
   USE CUSTOMER NEW
   ? "start upload"
   oCn:UploadFromAlias( "dbf2sql", "TRIM(FIRST-','-LAST),STREET", "custname,address", nBatchSize )
   ? "uploaded"

   oRs   := oCn:dbf2sql
   XBROWSER oRs
   oRs:Close()
   oCn:Close()

return nil
 
Image
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
nageswaragunupudi
Posts: 8017
Joined: Sun Nov 19, 2006 5:22 am
Location: India
Contact:

Re: Consulta Sobre Pasar Dbf a Mysql

Post by nageswaragunupudi »

1. Setup your meter
2. oCn:bMeter := { |nProgress,nTotal| <your_meter_update_function>( nProgress,nTotal ) }
3. oCn:UploadFromAlias(...)
4. oCn:bMeter := nil

But we advise you not to display meter, except for very huge tables, because the display of meter reduces the speed a lot.
Regards

G. N. Rao.
Hyderabad, India
User avatar
TecniSoftware
Posts: 213
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: Consulta Sobre Pasar Dbf a Mysql

Post by TecniSoftware »

nageswaragunupudi wrote:1. Setup your meter
2. oCn:bMeter := { |nProgress,nTotal| <your_meter_update_function>( nProgress,nTotal ) }
3. oCn:UploadFromAlias(...)
4. oCn:bMeter := nil

But we advise you not to display meter, except for very huge tables, because the display of meter reduces the speed a lot.
Thank you!
Geetings
Alejandro Cebolido
Buenos Aires, Argentina
Post Reply