Pregunta sobre win_OleCreateObject

Post Reply
User avatar
ruben Dario
Posts: 1070
Joined: Thu Sep 27, 2007 3:47 pm
Location: Colombia

Pregunta sobre win_OleCreateObject

Post by ruben Dario »

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
Antonio Linares
Site Admin
Posts: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Pregunta sobre win_OleCreateObject

Post by Antonio Linares »

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: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Pregunta sobre win_OleCreateObject

Post by Antonio Linares »

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: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Pregunta sobre win_OleCreateObject

Post by Antonio Linares »

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: 42513
Joined: Thu Oct 06, 2005 5:47 pm
Location: Spain
Has thanked: 31 times
Been thanked: 73 times
Contact:

Re: Pregunta sobre win_OleCreateObject

Post by Antonio Linares »

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

Code: Select all | Expand

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

Re: Pregunta sobre win_OleCreateObject

Post by ruben Dario »

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


              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


              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
Post Reply