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!!!!
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


0