FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Pregunta sobre win_OleCreateObject
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Pregunta sobre win_OleCreateObject
Posted: Thu Oct 20, 2016 08:41 PM

en realidad nunca he manejado win_OleCreateObject( "ADODB.Connection" ) siempre he manejado TOLEAUTO():New("ADODB.connection") y TOleAuto():New( "ADODB.Recordset" )
que diferencia hay entre manejar win_OleCreateObject y TOLEAUTO():New("ADODB.connection") en realidad no veo o documentacion.

Segun entiendo es mas rapido win_OleCreateObject que OLEAUTO():

Gracias de Antemado y Saludos al Forum.

Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pregunta sobre win_OleCreateObject
Posted: Fri Oct 21, 2016 07:28 AM
Ruben,

Parecen ser equivalentes por lo que deberian funcionar igual:

http://harbour.harbour-project.narkive.com/zGnt0F6C/a-problem-in-toleauto
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pregunta sobre win_OleCreateObject
Posted: Fri Oct 21, 2016 07:30 AM
Sin embargo, por lo que se comenta aqui:

https://groups.google.com/forum/#!topic/comp.lang.xharbour/ht0rLY7p2TQ

Using TOleAuto() take 5 hours.

Using Win_OleCreateObject() take 6 minutes !!!!


parece que win_OleCreateObject() es mucho mas rápido

habría que hacer pruebas
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pregunta sobre win_OleCreateObject
Posted: Fri Oct 21, 2016 07:33 AM
Esta parece ser la explicación técnica:


>> Objects created by WIN_OLECREATEOBJECT() do not overload operators
>> like [], +, -, *, /, %, ++, --. ^. \. ==. != which are overload in
>> TOLEAUTO class in xHarbour.


https://www.mail-archive.com/harbour@harbour-project.org/msg19240.html

Si los operadores de WIN_OLECREATEOBJECT() no estan sobrecargados, su funcionamiento
es el nativo de Harbour y va mucho más rápido
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 44158
Joined: Thu Oct 06, 2005 05:47 PM
Re: Pregunta sobre win_OleCreateObject
Posted: Fri Oct 21, 2016 08:07 AM
Aqui se ven claramente los operadores "sobrecargados", de ahi la lentitud en comparación a WIN_OLECREATEOBJECT()

Code (fw): Select all Collapse
CREATE CLASS TOleAuto FROM win_oleAuto

   VAR cClassName

   METHOD hObj( xOle ) SETGET
   METHOD New( xOle, cClass, cLicense )
   METHOD GetActiveObject( cClass )

   METHOD Invoke()      EXTERN __oleInvokeMethod()
   MESSAGE CallMethod   EXTERN __oleInvokeMethod()

   METHOD Set()         EXTERN __oleInvokePut()
   MESSAGE SetProperty  EXTERN __oleInvokePut()

   METHOD Get()         EXTERN __oleInvokeGet()
   MESSAGE GetProperty  EXTERN __oleInvokeGet()

   METHOD OleValue()
   METHOD _OleValue( xValue )

   METHOD OleValueExactEqual( xArg )      OPERATOR "=="
   METHOD OleValueEqual( xArg )           OPERATOR "="
   METHOD OleValueNotEqual( xArg )        OPERATOR "!="
   METHOD OleValuePlus( xArg )            OPERATOR "+"
   METHOD OleValueMinus( xArg )           OPERATOR "-"
   METHOD OleValueMultiply( xArg )        OPERATOR "*"
   METHOD OleValueDivide( xArg )          OPERATOR "/"
   METHOD OleValueModulus( xArg )         OPERATOR "%"
   METHOD OleValuePower( xArg )           OPERATOR "^"
   METHOD OleValueInc()                   OPERATOR "++"
   METHOD OleValueDec()                   OPERATOR "--"

ENDCLASS
regards, saludos

Antonio Linares
www.fivetechsoft.com
Posts: 1078
Joined: Thu Sep 27, 2007 03:47 PM
Re: Pregunta sobre win_OleCreateObject
Posted: Fri Oct 21, 2016 01:08 PM
Gracias por su informacion.
He probado TOLEAUTO():New("ADODB.Command") y oApp:oServer := CREATEOBJECT("ADODB.Command") genera la sentencia SQL , y me genera el error
Query Execution was interrumped , Maximum statement Execution time Exceeded 0x80004005, ya que la sentencia va a generar un volumen de inofrmacion grande y es comlejo.

Hice la prueba con win_OleCreateObject( "ADODB.Command" ) con este si funciona.

Inclusive cambien los tiempos de Mysql SET SESSION wait_timeout = 186400 y tampoco funciono, Identifique el problema con esta prueba, ejecute la sentancia sql en mysql y linea de comandos y tambien con navicat y funciona pefecta mente, de ahi conclui que el problema era de TOLEAUTO

Hice otra prueba Segun veo parace que no es TOLEAUTO, segun identifico en problema es cuando lo uso asi segun el codigo anexo TOleAuto():New("ADODB.Command")
el codigo "ADODB.Command " no se si debe tener una configuracion especial para estos casos de Querin compalejos.


Code (fw): Select all Collapse
              oApp:oADOoSql := TOleAuto():New("ADODB.Command")
              oApp:oADOoSql:CommandType := adCmdText
              oApp:oADOoSql:ActiveConnection := oApp:oServer   
            
             oApp:oADOoSql:CommandText:=cQuery
             lodat:= oApp:oADOoSql:Execute()  //?oDatos:RecordCount()
                ? alert(lodat:Fields( "nombre" ):Value  )
              lodat:Close()


Si lo uso asi si funciona
Code (fw): Select all Collapse
              oApp:oServer        := TOLEAUTO():New("ADODB.connection")
               oApp:oServer:CommandTimeOut    := 200  //200  15   300
              oApp:oServer:ConnectionTimeOut := 30   //30   10  300 
              oApp:oServer:CursorLocation    := adUseClient 
              oApp:oServer:Mode              := adModeShareDenyNone 
              oApp:oServer:Open( oApp:StrConnection ) 

           oDatos:= oApp:oServer:Execute( cQuery )


Muchas gracias por su informacion.
Ruben Dario Gonzalez
Cali-Colombia
rubendariogd@hotmail.com - rubendariogd@gmail.com

Continue the discussion