Page 1 of 1

Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 12:32 pm
by Simon
Estoy construyendo una aplicación y me sale un error cuando trato de usar un xbrowse (con un recordset creado con tdbodbc) en una ventana mdi, el error es SQLExtendFetch on Goto() method [#4626092] class: (y una serie de caracteres aleatorios).

Si quito las clausulas mdi y creo dos ventanas independientes si muestra los registros, pero al darle click al xbrowse da el mismo error, si hago el xbrowse directamente en la ventana principal no da ningun error y funciona perfectamente.

No creo que sea un error de conexion con el servidor sql (sql server 2005) ya que si hago un recorido (he probado con skip(), goto(), etc.) del recordset me muestra todos los datos perfectamente.

Luego me puse creativo y probe usando un dialogo en vez de una ventana y funciona, luego pense en usar una ventana y ponerle un dialogo child, pero al darle la clausula NOWAIT al dialogo zas el mismo error.

segmento de codigo
Code: Select all  Expand view


function main()
    define window owndmain mdi

   oOdbc := TOdbc():New(cDsn, cName, cPass)

   If !oOdbc:lSuccess
      oOdbc:ShowErrorList("La sesion no se ha podido establecer, abortando...")
      oOdbc:End()
      return nil
   Endif
.
.
.
@ 2, 70 ADD BUTTON oBtn2 PROMPT "Productos" TOP GROUP oGr_1_1 BITMAP ".\BMP\product-32.BMP" ;
     SIZE 60, 80  ROUND ;
     action ( OPENTABLE( "Productos", "select * from ctaarticulos", oOdbc ) )
.
.
.
    activate window owndmain
oOdbc:end()
return nil

function opentable( cHeader, cQuery, oOdbc )
 oDbf := TDbOdbc():new( cQuery, oOdbc )
 mybrowse( cHeader, oDbf )
return nil

function mybrowse( cHeader, oDbf )
   DEFINE WINDOW oWnd TITLE cHeader + " Todos los registros ( " + alltrim( str( odbf:reccount(), 10, 0 ) ) +" registros )";
        from 0,0 to 500, 800 pixel mdichild of oWndmain NOMAXIMIZE NORESIZE

   @ 0,0 XBROWSE oBrw OF oWnd RECSET odbf AUTOCOLS FOOTERS ;
         LINES CELL
   oBrw:CreateFromCode()

   oWnd:oClient := oBrw

activate window ownd on init oBrw:SetFocus()

return nil

 


Ayuda por favor estoy trancadisimo con esto.

De antemano gracias.

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 2:42 pm
by Lautaro
Simon,

Si estas programando con mdi, recuerda que la ejecucion del programa no se detiene en el punto del activate window, alli activa la ventana y sigue adelante, por lo que ejecuta la instruccion oOdbc:end() y se cierra tu coneccion.

Lo que debes hacer es mover esa instruccion a el evento de cierre de la ventana u a otro que tu estimes, pero debe ser controlado.

Atte.,

Lautaro Moreira
Osorno
Chile

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 3:02 pm
by Simon
Lautaro, gracias por responder.

Puse el oOdbc:end() al cerrar la ventana principal y continua el error.

Saludos.

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 3:14 pm
by Lautaro
Simon,

En que linea te da el error ????


Atte.,

Lautaro

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 3:39 pm
by Simon
Cuando esta pintando el xbrowse sale un dialogo que muestra el mensaje sqlextendedfetch ...... y si le das aceptar, te vuelve a salir el dialogo tantas veces como le des aceptar y no te deja hacer nada mas.

Asi que no es un error que aborta la ejecucion del programa.

saludos.

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 3:58 pm
by Lautaro
Hola,

Si mal no recuerdo a un cursor odbc hay que llamar al metodo open antes de hacer cualquier cosa.

Ojo, estoy hablando de memoria.

atte.,

Lautaro Moreira

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 5:02 pm
by Simon
Ese no es el problema,

Funciona en un dialogo y/o un entorno sdi.

El metodo open es para la clase tdbodbcdirect, y yo estoy usando tdbodbc.

el metodo open si la memoria no me falla mete el resultado del query en una tabla dbf/cdx lo que la hace sumamente lenta con tablas grandes.

Saludos.

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 6:29 pm
by Lautaro
Simon,

Tienes razon ( hace tiempo que no trabajo con odbc ), pero tambien recuerdo que el tdbodbc solo soporta skip hacia adelante no hacia atras y es ahi donde te da el error, cuando obtiene la linea, que es en el metodo fetch(), el que hace la llamada a sqlextendedfetch.


Verifica que tu driver permita consultas que no sean de solo avance.

Espero ayudarte con eso.

Lautaro Moreira

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Fri Nov 26, 2010 7:01 pm
by Simon
Lautaro tenias razon a la primera, le puse el odbc:end() al salir de la ventana principal, pero tenia un odbf:end() al final de la creacion de la ventana hija, lo comente y listo ya funciona y se ve muy bien.

Ves 2 cabezas piensan mejor que una, gracias por interesarte en ayudarme a encontrar una solución.

Re: Error con tdbobdc + xbrowse + mdi

PostPosted: Sat Nov 27, 2010 7:15 pm
by Lautaro
Simon,

Es un placer ayudar, cuando yo empece a dejar las dbfs y empece a usar otro motor de datos, lo primero fue odbc y no te imaginas lo duro que fue el cambio, no habia documentacion y no habian ejemplos.

Me es muy gratificante saber que en algo puedo hacer mas facil la transicion a otro colega.


Saludos,

Lautaro Moreira
Osorno
Chile