FiveTech Support Forums

FiveWin / Harbour / xBase community
Board index FiveWin para Harbour/xHarbour Tdolphin: se bloquea seek al cambiar el orden de Query
Posts: 33
Joined: Wed Jan 25, 2012 09:30 PM
Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Mon May 07, 2012 03: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 (fw): Select all Collapse
聽 聽//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, <strong>aqui se bloquea el sistema</strong>
聽 聽oQry:setOrder('Numero'+" ASC",.t.)
聽 聽If oQry:seek('5', 'Numero',,,.f. ) > 0
聽 聽 聽 聽 聽msginfo('numero 5 encontrado')
聽 聽else
聽 聽 聽 聽 聽msginfo('numero 5 encontrado')
聽 聽endif


Saludos
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Mon May 07, 2012 10:21 AM

Hola

como es la consulta?

Posts: 33
Joined: Wed Jan 25, 2012 09:30 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Mon May 07, 2012 03:51 PM
Daniel buenos dias.

Te paso el ejemplo con el query de consulta

Code (fw): Select all Collapse
.
.
.

聽 聽 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
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Fri Jun 21, 2013 01:42 AM

Este tema tuvo soluci贸n Daniel? Porque estoy teniendo el mismo problema...
Gracias!

Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Sat Jun 22, 2013 03:48 AM
Saludos

Iterwin, tu ejemplo funciona perfectamente bien

Code (fw): Select all Collapse
//#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
Posts: 1344
Joined: Wed Nov 16, 2005 09:14 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Sat Jun 22, 2013 04: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 (fw): Select all Collapse
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 (fw): Select all Collapse
#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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Mon Aug 05, 2013 03: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/
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 01: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 03: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.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 1144
Joined: Mon Feb 05, 2007 07:15 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 03: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 "
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 04: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
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 05: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谩.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 05: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.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 682
Joined: Tue Feb 14, 2006 09:48 AM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 05:28 PM
En mi caso el problema se soluciona sustituyendo
Code (fw): Select all Collapse
Set_MyLang( "esp" )

por
Code (fw): Select all Collapse
Set_MyLang( "es_ES" )


Alguien m谩s con el mismo problema puede probarlo y confirmar que funciona.
Saludos desde Mallorca
Biel Maim贸
http://bielsys.blogspot.com/
Posts: 244
Joined: Fri Oct 28, 2005 06:29 PM
Re: Tdolphin: se bloquea seek al cambiar el orden de Query
Posted: Tue Aug 06, 2013 05: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