Tdolphin: se bloquea seek al cambiar el orden de Query

Tdolphin: se bloquea seek al cambiar el orden de Query

Postby interwin » Mon May 07, 2012 3:41 am

Buenas noches

En una aplicacion tengo la necesidad de brindar al usuario la opcion de hacer busquedas en un query sobre un campo numero o sobre un campo nombre. Si el usuario hace una busqueda en un query ordenado sobre el campo numero y despues hace una busqueda sobre el campo nombre todo funciona bien, pero si despues se vuelve a hacer otra busqueda sobre el campo numero el sistema se bloquea, a continuacion pongo el codigo con un ejemplo del problema:
Code: Select all  Expand view  RUN

   //1.- se  ordena por el campo numero y se hace una busqueda (esta busqueda funciona bien)
   oQry:setOrder('Numero'+" ASC",.t.)
   If oQry:seek('5', 'Numero',,,.f. ) > 0
         msginfo('numero 5 encontrado')
   else
         msginfo('numero 5 no encontrado')
   endif

   //2.- Se ordena por el campo nombre y se hace una busqueda (esta busqueda funciona bien)
   oQry:setOrder('Nombre'+" ASC",.t.)
   If oQry:seek('A', 'Nombre',,,.f. ) > 0
         msginfo('Nombre A encontrado')
   else
         msginfo('Nombre A no encontrado')
   endif

   //3.-  se  ordena por el campo numero y se hace una busqueda: identico al paso 1, aqui se bloquea el sistema
   oQry:setOrder('Numero'+" ASC",.t.)
   If oQry:seek('5', 'Numero',,,.f. ) > 0
         msginfo('numero 5 encontrado')
   else
         msginfo('numero 5 encontrado')
   endif
 


Saludos
interwin
 
Posts: 33
Joined: Wed Jan 25, 2012 9:30 pm

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Daniel Garcia-Gil » Mon May 07, 2012 10:21 am

Hola

como es la consulta?
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby interwin » Mon May 07, 2012 3:51 pm

Daniel buenos dias.

Te paso el ejemplo con el query de consulta

Code: Select all  Expand view  RUN

.
.
.

    cArchivo:='Clientes'
    DEFINE QUERY oQry "SELECT * FROM "+ cArchivo +" order by numero"

   //1.- se  ordena por el campo numero y se hace una busqueda (esta busqueda funciona bien
   oQry:setOrder('Numero'+" ASC",.t.)
   If oQry:seek('5', 'Numero',,,.f. ) > 0
         msginfo('numero 5 encontrado')
   else
         msginfo('numero 5 no encontrado')
   endif

   //2.- Se ordena por el campo nombre y se hace una busqueda (esta busqueda funciona bien)
   oQry:setOrder('Nombre'+" ASC",.t.)
   If oQry:seek('A', 'Nombre',,,.f. ) > 0
         msginfo('Nombre A encontrado')
   else
         msginfo('Nombre A no encontrado')
   endif

   //3.-  se  ordena por el campo numero y se hace una busqueda: identico al paso 1, aqui se bloquea el sistema
   oQry:setOrder('Numero'+" ASC",.t.)
   If oQry:seek('5', 'Numero',,,.f. ) > 0
         msginfo('numero 5 encontrado')
   else
         msginfo('numero 5 encontrado')
   endif
.
.
.
 


Saludos
interwin
 
Posts: 33
Joined: Wed Jan 25, 2012 9:30 pm

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby cmsoft » Fri Jun 21, 2013 1:42 am

Este tema tuvo solución Daniel? Porque estoy teniendo el mismo problema...
Gracias!
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Daniel Garcia-Gil » Sat Jun 22, 2013 3:48 am

Saludos

Iterwin, tu ejemplo funciona perfectamente bien

Code: Select all  Expand view  RUN

//#include "hbcompat.ch"
#include "tdolphin.ch"

#define CRLF Chr( 13 ) + Chr( 10 )

PROCEDURE Main()
   
   LOCAL oServer   := NIL

   LOCAL aStruc, aRow, uItem
   LOCAL oQry, n, cArchivo
   
   SET CENTURY ON
   SET DATE FORMAT "dd/mm/yyyy"
   
   IF ( oServer := ConnectTo() ) == NIL
      RETURN
   ENDIF

    cArchivo:='custo'
    DEFINE QUERY oQry "SELECT * FROM "+ cArchivo +" order by id"

   //1.- se  ordena por el campo id y se hace una busqueda (esta busqueda funciona bien
   oQry:setOrder('id'+" ASC",.t.)
   If oQry:seek('5', 'id',,,.f. ) > 0
         msginfo('id 5 encontrado')
   else
         msginfo('id 5 no encontrado')
   endif

   Inkey(0)

   //2.- Se ordena por el campo first y se hace una busqueda (esta busqueda funciona bien)
   oQry:setOrder('first'+" ASC",.t.)
   If oQry:seek('A', 'first',,,.f. ) > 0
         msginfo('first A encontrado')
   else
         msginfo('first A no encontrado')
   endif

   Inkey(0)

   //3.-  se  ordena por el campo id y se hace una busqueda: identico al paso 1, aqui se bloquea el sistema
   oQry:setOrder('id'+" ASC",.t.)
   If oQry:seek('5', 'id',,,.f. ) > 0
         msginfo('id 5 encontrado')
   else
         msginfo('id 5 encontrado')
   endif

   Inkey(0)

RETURN
   

PROCEDURE MsgInfo(c)
   ? c
RETURN

#include "connto.prg"
 


cmsoft

Todo dependera de la cantidad de filas que retorne la consulta, recuerda que estamos hablando de datos que normalmente se encuentran de forma remota, para eso los sistemas de sql usan limites en sus consultas, con la finalidad de agilizar el proceso
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby cmsoft » Sat Jun 22, 2013 4:34 am

Gracias por responder Daniel!
La tabla tiene 24 filas, es bastante chica por cierto.
Tal vez hago algo mal y por eso el programa deja de responder.
Lo solucioné parcialmente haciendo otra consulta poniendo en el WHERE el codigo a buscar, pero obviamente no es la forma más practica, ya que levanto la consulta cada vez que tengo que validar el código.
La idea es que si el código existe en la tabla (consulta) me devuelva el nombre y siga, y sino, que me muestre un XBrowse (ordenado por nombre) para que seleccione (con búsqueda incremental incluida)
Este es el dialogo que pide el dato (que tiene que estar en la tabla de códigos)
Code: Select all  Expand view  RUN

oQ := oServer:Query("SELECT codigo,nombre FROM codigos ORDER BY codigo")
DEFINE DIALOG oDlg1 TITLE "Agrega codigo a empresa "+str(nCodEmp) FROM 05,15 TO 12,65 OF oDlg
   @ 05, 05 SAY "Codigo:"      OF oDlg1 PIXEL SIZE 60,20 RIGHT
   @ 20, 05 SAY "Descripcion:" OF oDlg1 PIXEL SIZE 60,20 RIGHT
   @ 05, 70 GET oGet[1] VAR nCod    OF oDlg1 PIXEL ;
            PICTURE "9999" RIGHT VALID(Buscar(oQ,oDlg1,oGet[1],oGet[2])) //Esta es la funcion que falla: Buscar
   @ 20, 70 GET oGet[2] VAR cNom OF oDlg1 PIXEL WHEN(.F.)
   @ acor[1],acor[2] BUTTON oBot[1] PROMPT "&Agrega" OF oDlg1 SIZE 30,10 ;
           ACTION ((lRta := .t.), oDlg1:End() ) PIXEL
   @ acor[3],acor[4] BUTTON oBot[2] PROMPT "&Cancelar" OF oDlg1 SIZE 30,10 ;
           ACTION ((lRta := .f.), oDlg1:End() ) PIXEL CANCEL
ACTIVATE DIALOG oDlg1 CENTER ON INIT oGet[1]:SetFocus()


Esta es la función buscar
Code: Select all  Expand view  RUN
#include "FiveWin.ch"
#include "xbrowse.ch"
#include "tdolphin.ch"
FUNCTION buscar(oQr, oWnd, oGet1, oGet2)
LOCAL oDlg1, oBot1, oLbx, n := VAL(oGet1:cText)
IF oQr:Seek(n,"codigo") > 0 //Lo encontró
   IF oGet2 <> nil
      oGet2:cText := oQr:nombre  // Pone el nombre en el Get (si se pasa como parametro el 2do get
      oGet2:Refresh()
   ENDIF
   RETURN .t. // Devuelve .t.
   ELSE // Si no lo encontró
   oQr:SetOrder("nombre",.T.) // Cambia el orden a nombre
   oQr:GoTop()
   DEFINE DIALOG oDlg1 RESOURCE "BUSCAR" TITLE "Busqueda" OF oWnd
     oDlg1:lHelpIcon := .f.
     REDEFINE XBROWSE oLbx DATASOURCE oQr;
              COLUMNS "Codigo","Nombre";
              SIZES   100,500;
              ID 111 OF oDlg1 AUTOSORT ON DBLCLICK oDlg1:End()
     REDEFINE SAY oLbx:oSeek PROMPT "" ID 102 OF oDlg1
     base:bOnChangePage := {|| oLbx:Refresh() }
     oLbx:bKeyDown := {|nKey| IF(nKey==13,oDlg1:End(),.t.) }
     PintaBrw(oLbx) // Esta función formatea el Browse para que se vea lindo
   REDEFINE BUTTON oBot1 ID 103 OF oDlg1 ACTION oDlg1:end() CANCEL
   ACTIVATE DIALOG oDlg1 ON INIT oLbx:SetFocus()
   oGet1:cText := oQr:codigo
   IF oGet2 <> nil
      oGet2:cText := oQr:nombre
      oGet2:Refresh()
   ENDIF
   oQr:SetOrder("codigo",.T.) // vuelvo a poner el orden por codigo para que quede listo para la busqueda nuevamente
ENDIF
RETURN .t.

Como veras ésta es una función genérica que tengo para toda ayuda de tablas (que siempre tienen el campo codigo y nombre).
Esto funciona bien la primera vez. Si yo pongo un código válido anda, si pongo uno inválido muestra la ayuda ordenada por nombre y anda, pero si vuelvo a entrar a editar el primer get, después de haber hecho una búsqueda por nombre, ahí me da un error de Windows y se me va.
Gracias por el tiempo y la ayuda
User avatar
cmsoft
 
Posts: 1293
Joined: Wed Nov 16, 2005 9:14 pm
Location: Mercedes - Bs As. Argentina

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Biel EA6DD » Mon Aug 05, 2013 3:20 pm

interwin wrote:
En una aplicacion tengo la necesidad de brindar al usuario la opcion de hacer busquedas en un query sobre un campo numero o sobre un campo nombre. Si el usuario hace una busqueda en un query ordenado sobre el campo numero y despues hace una busqueda sobre el campo nombre todo funciona bien, pero si despues se vuelve a hacer otra busqueda sobre el campo numero el sistema se bloquea,


Me sucede exactamente lo mismo, el problema parece que está en la funcion mySeek2, he leido varios mensaje en relación a esa función, con algunos cambios.

Este problema sigue existiendo, o soy yo que no tengo la última versión.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Daniel Garcia-Gil » Tue Aug 06, 2013 1:05 pm

Hola

por favor podrian colocar un ejemplo que reproduzca el error, recuerden que el servidor de pruebas de dolphin sigue activo y lo pueden usar para estas circunstancias

les dejo practicamente el mismo ejemplo del principio, pero ya construido

http://www.sitasoft.net/dolphin/samples/testsk3.zip
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Biel EA6DD » Tue Aug 06, 2013 3:02 pm

Hola Daniel, gracias por tu tiempo.
Efectivamente el ejemplo que incluyes no da error.
Aunque la verdad le habia dedicado tiempo intentando ver donde pudiera estar el problema, habia un pequeño detalle que se me estaba pansado por alto, los comandos de configuración del entorno (idioma, Casesensitive, ...).

El error sucede cuando se usa Set_MyLang( "esp" ), si se realiza la siguente secuencia de Seek se produce un exception error.

Set_MyLang( "esp" )
SetOrder campo Numérico
Seek OK
SetOrder campo Caracter
Seek OK
SetOrder campo Numérico
Seek ERROR

Lo he probado con el servidor de pruebas y se produce el error, supongo que podras reproducirlo, si lo requieres puedo enviarte un exe construido.
Last edited by Biel EA6DD on Tue Aug 06, 2013 5:34 pm, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby sysctrl2 » Tue Aug 06, 2013 3:29 pm

Por cierto, alguien puede explicar para que es esa funcion?
Set_MyLang( "esp" )

saludos..
Cesar Cortes Cruz
SysCtrl Software
Mexico

' Sin +- FWH es mejor "
User avatar
sysctrl2
 
Posts: 1032
Joined: Mon Feb 05, 2007 7:15 pm

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby TecniSoftware » Tue Aug 06, 2013 4:34 pm

Biel EA6DD wrote:Hola Daniel, gracias por tu tiempo.
Efectivamente el ejemplo que incluyes no da error.
Aunque la verdad le habia dedicado tiempo intentando ver donde pudiera estar el problema, habia un pequeño detalle que se me estaba pansado por alto, los comandos de configuración del entorno (idioma, Casesensitive, ...).

El error sucede cuando se usa Set_MyLang( "esp" ), si se realiza la siguente secuencia de Seek se produce un exception error.

Set_MyLang( "esp" )
SetOrder campo Numérico
Seek OK
SetOrder campo Caracter
Seek OK
SetOrder campo Numérico
Seek ERROR

Lo he probado con el servidor de pruebas y se reproduce el error, supongo que podras reproducirlo, si lo requieres puedo enviarte un exe contruido.


Con respecto al cuelgue al cambiar el orden y volver al numerico:
Armas el xbrowse con autocols o le agregas las columnas manualmente?
Me parece que eso tiene mucho que ver, el comportamiento es distinto y creo que por ahi viene el problema.

Saludos!
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Biel EA6DD » Tue Aug 06, 2013 5:12 pm

sysctrl2 wrote:Por cierto, alguien puede explicar para que es esa funcion?
Set_MyLang( "esp" )

saludos..

Por lo que he podido ver sirve para definir la configruación regional(Locale Support), y en concreto para la comparación de cadenas, pero el master Daniel nos lo concretará.
Last edited by Biel EA6DD on Tue Aug 06, 2013 5:33 pm, edited 2 times in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Biel EA6DD » Tue Aug 06, 2013 5:14 pm

TecniSoftware wrote:Con respecto al cuelgue al cambiar el orden y volver al numerico:
Armas el xbrowse con autocols o le agregas las columnas manualmente?
Me parece que eso tiene mucho que ver, el comportamiento es distinto y creo que por ahi viene el problema.

Saludos!

Al principio de darme el error lo hacia usando xBrowse con las columnas definidas manualmente (si bien haciendo uso del método de xBrowse SetColFromMysQl, que en el fondo es lo que hace autocols), después probe con autocols, obteniendo el mismo resultado.
Y finalmente prescindi de xBrowse, para reproducir y aislar el error.
Last edited by Biel EA6DD on Wed Aug 07, 2013 6:50 am, edited 2 times in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby Biel EA6DD » Tue Aug 06, 2013 5:28 pm

En mi caso el problema se soluciona sustituyendo
Code: Select all  Expand view  RUN
Set_MyLang( "esp" )

por
Code: Select all  Expand view  RUN
Set_MyLang( "es_ES" )


Alguien más con el mismo problema puede probarlo y confirmar que funciona.
Last edited by Biel EA6DD on Wed Aug 07, 2013 6:50 am, edited 1 time in total.
Saludos desde Mallorca
Biel Maimó
http://bielsys.blogspot.com/
User avatar
Biel EA6DD
 
Posts: 682
Joined: Tue Feb 14, 2006 9:48 am
Location: Mallorca

Re: Tdolphin: se bloquea seek al cambiar el orden de Query

Postby TecniSoftware » Tue Aug 06, 2013 5:41 pm

Biel EA6DD wrote:
Aguien más con el mismo problema puede probarlo y confirmar que funciona.


Grande! hice el cambio a Set_MyLang( "es_ES" ) y ya no se cuelga!

Muchos saludos
Alejandro Cebolido
Buenos Aires, Argentina
User avatar
TecniSoftware
 
Posts: 235
Joined: Fri Oct 28, 2005 6:29 pm
Location: Quilmes, Buenos Aires, Argentina

Next

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 86 guests