Pregunta sobre win_OleCreateObject

Pregunta sobre win_OleCreateObject

Postby ruben Dario » Thu Oct 20, 2016 8: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
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Re: Pregunta sobre win_OleCreateObject

Postby Antonio Linares » Fri Oct 21, 2016 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pregunta sobre win_OleCreateObject

Postby Antonio Linares » Fri Oct 21, 2016 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pregunta sobre win_OleCreateObject

Postby Antonio Linares » Fri Oct 21, 2016 7: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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pregunta sobre win_OleCreateObject

Postby Antonio Linares » Fri Oct 21, 2016 8:07 am

Aqui se ven claramente los operadores "sobrecargados", de ahi la lentitud en comparación a WIN_OLECREATEOBJECT()

Code: Select all  Expand view
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
User avatar
Antonio Linares
Site Admin
 
Posts: 41314
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain

Re: Pregunta sobre win_OleCreateObject

Postby ruben Dario » Fri Oct 21, 2016 1: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: Select all  Expand view

              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: Select all  Expand view

              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
User avatar
ruben Dario
 
Posts: 1061
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: VitalJavier and 73 guests