Page 1 of 1

Problemas con tOle

Posted: Sat Sep 08, 2007 9:19 am
by jmua
Hola foro.
Estoy cambiando una aplicacion de 16 a 32 Bits y me surge un problema
Utilizo tOle para pasar de Excel a Dbf.
al tratar de compilar me dice lo siguiente:
Error unresolved external: 'hb_vmMessage' referenced from C:\MYSISTEMA\FWH26\LIB\HBOLE|Ole2
supongo que igual la libreria tOle es vieja y necesito otra mas nueva.
Alguien me puede decir donde la bajo o si el problema es otro.
El codigo que utilizo es este:

#Include "FiveWin.Ch"
Function PasExcelToDbf(oWnd)
Local oDlg,oLbx,oFont,oBtFin
Local oExcel, oHoja, nRows, nCols
Local tCampos:={}, nRow, nCol
/* creamos conexion OLE con Excel */
oExcel := TOleAuto():New( "Excel.Application" )
? "objeto excel creado"
/*oExcel:Visible := .T. // por si quieres ver la hoja abierta*/
/* abrimos el fichero de hoja de calculo */
oExcel:WorkBooks:Open(cGetFile("*.XLS", "Seleccione Fichero"))
?"hoja abierta"
/* seleccionamos la hoja actual*/
oHoja := oExcel:Get( "ActiveSheet" )
/* contamos cuantos renglones y cuantas columnas existen con datos */
nRows := oHoja:UsedRange:Rows:Count()
nCols := oHoja:UsedRange:Columns:Count()

El caso es que 16 bits si funciona.

Gracias de antemano

Re: Problemas con tOle

Posted: Sat Sep 08, 2007 11:03 am
by FiveWiDi
Buenas,

Yo uso lo siguiente y por este orden en un proceso de importación:

oExcel := CreateOLEObject("Excel.Application")
OLESetProperty(oExcel,"Visible", .T.)



OLEInvoke( OLEGetProperty(oExcel,"Workbooks"), "Open", cPathxls )

oHoja := OLEGetProperty(oExcel,"ActiveSheet")


cCCC := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 2 ), "Value" )
If Valtype( cCCC) = "U"
cCCC := "00000000000000000000"
EndIf

ctelefon := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 6 ), "Value" )
If Valtype( ctelefon) = "U"
ctelefon := 0
ElseIf Valtype( ctelefon) = "C"
ctelefon := Val(ctelefon)
EndIf

cLOPD := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 10 ), "Value" )
If Valtype( clopd) = "U"
clopd := .F.
Else
clopd := .T.
EndIf

cDataAlta := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 12 ), "Value" )
If Valtype( cDataAlta ) = "U" .or. empty( cDataAlta )
cDataAlta := CToD("01/01/1900")
elseIf Valtype( cDataAlta ) = "C"
cDataAlta := CToD(cDataAlta)
EndIf

OLEInvoke( oExcel, "Quit" )

Evidentemente falta la declaración de LOCAL de las variables, así como toda la lógica WHILE para su grabación en DBF.


Todo en FWH 2007'04 y su Harbour correspondiente, sin librerías de terceros OLE.

Saludos
Carlos G.

Re: Problemas con tOle

Posted: Sun Sep 09, 2007 6:37 am
by jmua
Carlos agradezco tu respuesta, pero yo no tengo mas fwh26 asi que necesito OLE para poder hacerlo.
Puedes tu ó alguien decirme como puedo conseguirlo.
Tengo otra pregunta.
Como convierto el .RES de 16 Bits a 32 Bits

Muchas gracias
FiveWiDi wrote:Buenas,

Yo uso lo siguiente y por este orden en un proceso de importación:

oExcel := CreateOLEObject("Excel.Application")
OLESetProperty(oExcel,"Visible", .T.)



OLEInvoke( OLEGetProperty(oExcel,"Workbooks"), "Open", cPathxls )

oHoja := OLEGetProperty(oExcel,"ActiveSheet")


cCCC := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 2 ), "Value" )
If Valtype( cCCC) = "U"
cCCC := "00000000000000000000"
EndIf

ctelefon := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 6 ), "Value" )
If Valtype( ctelefon) = "U"
ctelefon := 0
ElseIf Valtype( ctelefon) = "C"
ctelefon := Val(ctelefon)
EndIf

cLOPD := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 10 ), "Value" )
If Valtype( clopd) = "U"
clopd := .F.
Else
clopd := .T.
EndIf

cDataAlta := OleGetProperty( OleGetProperty( oHoja, "Cells", nRow, 12 ), "Value" )
If Valtype( cDataAlta ) = "U" .or. empty( cDataAlta )
cDataAlta := CToD("01/01/1900")
elseIf Valtype( cDataAlta ) = "C"
cDataAlta := CToD(cDataAlta)
EndIf

OLEInvoke( oExcel, "Quit" )

Evidentemente falta la declaración de LOCAL de las variables, así como toda la lógica WHILE para su grabación en DBF.


Todo en FWH 2007'04 y su Harbour correspondiente, sin librerías de terceros OLE.

Saludos
Carlos G.

Posted: Sun Sep 09, 2007 7:45 am
by Antonio Linares
José,

Incluye esta función en un PRG tuyo:
Code:

Code: Select all

#pragma BEGINDUMP 

void hb_vmFunction( unsigned short uiParams ); 

void hb_vmMessage( unsigned short uiParams ) 
{ 
   hb_vmFunction( uiParams ); 
} 
#pragma ENDDUMP

Posted: Sun Sep 09, 2007 9:51 am
by jmua
Gracias Antonio,
Lo probare pero ahora tengo el problema siguiente:
Utilizo el Verce 4.3 Fwh26, Pellesc, harbour 45.0
He convertido el Res de 16 a 32 Bits.
Compila bien, pero al enlazar me dice esto:

Turbo Incremental Link 5.00 Copyright (c) 1997,2000 Borland
Fatal access violation. Link terminated.


Nunca me habia pasado esto desde que empece a trabajar en 32 bits, solo ahora al migrar de 16 a 32 bits

Muchas gracias
Antonio Linares wrote:José,

Incluye esta función en un PRG tuyo:
Code:

Code: Select all

#pragma BEGINDUMP 

void hb_vmFunction( unsigned short uiParams ); 

void hb_vmMessage( unsigned short uiParams ) 
{ 
   hb_vmFunction( uiParams ); 
} 
#pragma ENDDUMP

Posted: Sun Sep 09, 2007 11:52 am
by Antonio Linares
José,

Prueba a no enlazar el RES por si el problema se debe a un RES no correcto

Posted: Mon Sep 10, 2007 5:31 am
by jmua
Antonio.
Tienes razon sin el RES si enlaza. Asi que al convertirlo a 32 Bits no lo hize bien.
Como lo convierto?
El Res de 16 Bits lo hize con R. Workshop y ahora uso el Pellesc.

Gracias
Antonio Linares wrote:José,

Prueba a no enlazar el RES por si el problema se debe a un RES no correcto

Posted: Tue Sep 11, 2007 3:01 am
by R.F.
No uses .RES, trabaja SIEMPRE con el RC.

Abre el Workshop, abre tu RES y pon Save As.... y le das el nombre con el .RC y listo.

En tu archivo de compilacion agrega el RC y todo listo

Posted: Tue Sep 11, 2007 5:10 am
by jmua
Rene.
Esto que dices ya lo hice y pasa igual, sigue dando el mismo error al enlazar.
Ademas en RC ocupa mas mas que en RES.
Gracias
En RES ocupa 2.237 KB y
En RC ocupa 7.124 KB
Probare convirtiendo en DLL
Gracias
RF wrote:No uses .RES, trabaja SIEMPRE con el RC.

Abre el Workshop, abre tu RES y pon Save As.... y le das el nombre con el .RC y listo.

En tu archivo de compilacion agrega el RC y todo listo