Clipper/FiveWin - ERROR AL CARGARE DATOS DE TABLAS DBF A MYSQL

 
Vista:

ERROR AL CARGARE DATOS DE TABLAS DBF A MYSQL

Publicado por roberto (1 intervención) el 07/09/2005 16:33:07
Hola amigos, soy nuevo en el foro y en xharbour, me encargaron cargar los
datos de uan tabla DBF a una base de datos en MySQL.

Mi aplicacion en modo MS DOS funciona no al 100% por que en un determindo
momento se acaba la memoria y se detiene. Me encargaron ademas colocarle una
progress bar para visulizar el avance. Es entonces cuando me envia un error
con una versiond el xharbour me dice

"Alert.prg" was be compiled by older version, PCODE 5 version, please
recompile, pero en no tengo ningun Alert.prg, mi aplicacion se llama
Pruebado.prg y la clase que utilizo es TADO.prg, corrijo eso con una version
mas actual, pero solo en modo MS DOS, pero para colocarle la progressbar me
envia otro error detecte que es cuando se quiere ejecurar mi instruccion SQL. El error que me envia es el siguente

<<<<<<" Error BASE/1004 Message not found: TADO:COMMANDO" >>>>>>

Este es mi codigo
#include "inkey.ch"
#include "print.ch"
#include "image.ch"
#define COLOR_WINDOWTEXT 8
#define COLOR_BTNFACE 15

STATIC oPedcli, oIcon, oBrush, oBar, oCur,oWnd, nActual,oAdo ,aTemp,cQuery
,cCampos , cValores

FUNCTION Main()
SET RESOURCES TO "nominare.DLL"
DEFINE FONT fntArial SIZE 20, 20
DEFINE FONT fntRoman SIZE 10, 25
DEFINE FONT fntbold SIZE 10, 25
DEFINE BRUSH oBrush STYLE TILED
DEFINE ICON oIcon RESOURCE "GARIS"
DEFINE WINDOW oPedcli FROM 4, 4 TO 25, 75 MDI TITLE "AVANCE" BRUSH
oBrush ICON oIcon
DEFINE BUTTONBAR oBar 3D OF oPedcli CURSOR oCur SIZE 35,35
DEFINE BUTTON RESOURCE "Salir" OF oBar ACTION oPEDCLI:End()
DEFINE BUTTON RESOURCE "PROV" OF OBAR ACTION(avance('avance'))
ACTIVATE WINDOW oPedcli MAXIMIZED ;
ON PAINT dbCommitAll()

RETURN (.T.)

/************************************************************************************************************/
/************************************************************************************************************/

FUNCTION avance(cmensaje)
LOCAL AUXR:=0, oBtn
LOCAL M_ART:=''
Local oAvance,oMeter
LOCAL nPos//,nActual
SET EXCLUSIVE OFF
DEFINE DIALOG oAvance RESOURCE "AVANZA" TITLE CMENSAJE
REDEFINE METER oMeter VAR nactual ID 130 OF oAvance ;
PROMPT " " ;
COLORS CLR_HGRAY, CLR_YELLOW ;
BARCOLOR CLR_HBLUE, CLR_YELLOW UPDATE
REDEFINE BtnBmp oBtn id 101 resource "baceptar" OF oAvance UPDATE
oAvance:Bstart:= {||AJUSTA(oMeter),oAvance:end()}
ACTIVATE DIALOG oAvance CENTERED
oAvance:End()
RETURN nil

/************************************************************************************************************/
/************************************************************************************************************/

STATIC FUNCTION ajusta(oMeter)
oAdo := TADO():New("DRIVER={MySQL ODBC 3.51 Driver}; SERVER=localhost;
DATABASE=garis;UID=root;PWD=admin" )
aTemp := {}
cQuery := ""
cCampos := ""
cValores := ""

USE c:\pfive\sql\B2000 SHARED NEW
FOR x := 1 TO FCOUNT()
cCampos += FieldName(x)+","
NEXT
cCampos := SUBSTR(cCampos,1,LEN(cCampos)-1)

oMeter:Set( 0 )
oMeter:nTotal:= reccount()
b2000->(dbgotop())
DO WHILE ! Eof()
@ 1,1 SAY RECNO()
cQuery := ""
cValores := ""
FOR x := 1 TO FCOUNT()
cCampos := FieldName(x)
cCampos := SUBSTR(cCampos,1,LEN(cCampos))
DO CASE
CASE VALTYPE(FIELDGET(x)) = "N"
cValores :=ALLTRIM(STR(FieldGet(x)))
CASE VALTYPE(FIELDGET(x)) = "D"
cValores :=DTOS(FieldGet(x))
OTHERWISE
do case
case RAT("\",(FieldGet(x)))<>0
cValores := STRTRAN(ALLTRIM(FieldGet(x)),"\","")
case RAT("'",(FieldGet(x)))<>0
cValores := STRTRAN(ALLTRIM(FieldGet(x)),"'","")
case RAT(",",(FieldGet(x)))<>0
cValores := STRTRAN(ALLTRIM(FieldGet(x)),",","")
case RAT("´",(FieldGet(x)))<>0
cValores := STRTRAN(ALLTRIM(FieldGet(x)),"´","")
otherwise
cValores := (ALLTRIM(FieldGet(x)))
endcase
ENDCASE

NEXT
cValores := SUBSTR(cValores,1,LEN(cValores)-1)
cQuery := "REPLACE INTO B2000 ("+cCampos+") VALUES ("+cValores+")"
oAdo:Commando(cQuery)
oMeter:Set(nActual++)
sysrefresh()
DBSKIP()
ENDDO

RETURN nil

****************************************************************
y esta es la clase que utilizo
#INCLUDE "HBCLASS.CH"
#DEFINE ID_STORE_PROCEDURE 4
#DEFINE ID_VAR_TYPE_NUMERIC 3
#DEFINE ID_VAR_INPUT 1

CLASS TAdo
DATA oConexion
DATA aoComRS AS ARRAY INIT {}
METHOD New(cConString) CONSTRUCTOR
METHOD Comando(cQuery, nPos, cSP, aParams)
METHOD CreateArray(nPos)
ENDCLASS

METHOD New(cConString) CLASS TAdo
::oConexion := TOleAuto():New("adodb.connection")
::oConexion:Open(cConString)
RETURN SELF

METHOD Comando(cQuery, nPos, cSP, aParams) CLASS TADO
LOCAL oCommand, oRecordSet, nVret, nParams, cTipo, oParam
LOCAL aTemp := {}
WITH OBJECT oCommand := TOleAuto():New("adodb.command")
:ActiveConnection(::oConexion)
IF ! EMPTY(cSp)
:CommandText := cSp
:CommandType := ID_STORE_PROCEDURE
FOR nParams := 1 TO LEN(aParams)
cTipo := VALTYPE(aParams[nParams,2])
SWITCH cTipo
CASE "N"
oParam :=
:CreateParameter(aParams[nParams,1],ID_VAR_TYPE_NUMERIC,ID_VAR_INPUT)
EXIT
CASE "D"
CASE "C"
CASE "L"
END
:Parameters:Append(oParam)
oParam:Value := aParams[nParams,2]
NEXT
ELSE
:CommandText := cQuery
ENDIF
oRecordSet := :Execute()
END
IF EMPTY(nPos)
AADD(::aoComRs,{oCommand,oRecordSet})
nVret := LEN(::aoComRs)
ELSE
::aoComRs[nPos]:= {oCommand,oRecordSet}
nVret := nPos
ENDIF
RETURN nVret

METHOD CreateArray(nPos) CLASS TADO
LOCAL oRecordSet := ::aoComRs[nPos,2]
LOCAL aRow, aTemp := {}
* ? nPos, oRecordSet
WITH OBJECT oRecordSet
*:MoveFirst()
*? "mide",:Fields:Count()
DO WHILE ! :EOF()
aRow := {}
FOR x := 1 TO :Fields:Count()
* ? :Fields(x-1):value, :fields(x-1):Name
AADD(aRow, :Fields(x-1):value)
NEXT
AADD(aTemp,aRow)
:MoveNext()
ENDDO
END
RETURN aTemp
*******************************************************************



Saludos y espero me puedan ayudar

Gracias!!!!
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:ERROR AL CARGARE DATOS DE TABLAS DBF A MYSQL

Publicado por Marcelo (218 intervenciones) el 07/09/2005 19:33:09
El error es porque estas utilizando alguna .lib para Harbour o para una version antigua de xHarbour. No necesariamente es Alert.prg. Ahora, el tema de que se te acaba la memoria es cierto, tenes que usar hb_idle o Thread. Nunca lo implemente. En el caso de xHarbour Minigui, podes usar el comando Do Events.

Marcelo
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ERROR AL CARGARE DATOS DE TABLAS DBF A MYSQL

Publicado por Kasca (13 intervenciones) el 13/09/2005 21:00:48
Hola, fíjate que el metodo en la clase tado se llama COMANDO no commando.
Es sólo con una 'M', no con dos.
Saludos

Cristian Barrios P
Santiago de Chile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:ERROR AL CARGARE DATOS DE TABLAS DBF A MYSQL

Publicado por Gabriel pascual (913 intervenciones) el 16/09/2005 20:18:19
El codigo tiene todo el estilo de programacion de los sistemas de CiberTec. y del master Rene Flores.

Contacta con ellos, seguramente pueden ayudarte (www.ciber-tec.com)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar