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.
Pregunta sobre win_OleCreateObject
- ruben Dario
- Posts: 1070
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
- 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
Ruben,
Parecen ser equivalentes por lo que deberian funcionar igual:
http://harbour.harbour-project.narkive.com/zGnt0F6C/a-problem-in-toleauto
Parecen ser equivalentes por lo que deberian funcionar igual:
http://harbour.harbour-project.narkive.com/zGnt0F6C/a-problem-in-toleauto
- 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
Sin embargo, por lo que se comenta aqui:
https://groups.google.com/forum/#!topic/comp.lang.xharbour/ht0rLY7p2TQ
parece que win_OleCreateObject() es mucho mas rápido
habría que hacer pruebas
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
- 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
Esta parece ser la explicación técnica:
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
>> 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
- 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
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
- ruben Dario
- Posts: 1070
- Joined: Thu Sep 27, 2007 3:47 pm
- Location: Colombia
Re: Pregunta sobre win_OleCreateObject
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.
Si lo uso asi si funciona
Muchas 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.