Page 1 of 1
Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 1:23 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 2:20 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 3:55 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 4:50 pm
by Armando
Antonio:
Como te puedes dar cuenta, las DBF y Tablas pueden convivir perfectamente.
Saludos
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 5:06 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 5:21 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 10:21 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Thu Jan 28, 2021 11:19 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Fri Jan 29, 2021 1:18 am
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Mon Feb 01, 2021 4:38 am
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.
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Mon Feb 01, 2021 4:51 am
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Tue Feb 02, 2021 4:32 pm
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.
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Tue Feb 02, 2021 11:44 pm
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
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Wed Feb 03, 2021 4:20 am
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.
Re: Consulta Sobre Pasar Dbf a Mysql
Posted: Wed Feb 03, 2021 12:52 pm
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