SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby MarioG » Mon Jun 24, 2013 1:16 pm

Estimado;
No he tenido necesidad de cambiar el Orden.
Esperemos que Daniel lea y nos comente

Saludos
Resistencia - "Ciudad de las Esculturas"
Chaco - Argentina
User avatar
MarioG
 
Posts: 1380
Joined: Fri Oct 14, 2005 1:28 pm
Location: Resistencia - Chaco - AR

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Francisco Horta » Wed Feb 18, 2015 5:14 pm

Retomando un poco el tema, estoy probando tdolphin y me encuentro con una serie de problemitas que aparentemente estan resuletos, perooo no me funcionan

esoty probando usar el SEEK, FIND y LOCATE para ver diferencias de uso,

voy explicar mi ejemplo muy sencillo:

Code: Select all  Expand view

Tengo esta consulta:
dFec := "20141217"
oQry := oServer:Query("SELECT c.id,c.fechareserva,c.fecha,d.nombre" + ;
                            " FROM s_citas c" + ;
                            " INNER JOIN s_clientes d ON d.id = c.idcliente" + ;
                            " WHERE c.fechareserva = '" + dFec + "'" + ;
                            " ORDER BY c.inicio")

      DEFINE DIALOG oDlg TITLE "xbrowse / tdolphin" FROM 5, 5 TO 30, 90

         @ 9.5,3  BUTTON oBtn PROMPT "SetWhere" OF oDlg ACTION( dFec2 := ( VAL(dFec) + 1 ),;
                                                                dFec := Alltrim(Str(dFec2)),;
                                                                oQry:SetWhere("c.fechareserva = '" + dFec + "'"),;
                                                                oBrw:Refresh(),;
                                                                oBrw:SetFocus() )

         @ 9.5,12 BUTTON oBtn PROMPT "Varios" OF oDlg ACTION( msginfo(oQry:nRecNo(),oQry:nRecCount()),;
                                                              oBrw:SetFocus() )

         @ 9.5,21 BUTTON oBtn PROMPT "Locate" OF oDlg ACTION( cTime := Time(),;
                                                              nPos := oQry:Locate( { "27830" }, { "id" } ),;
                                                              msginfo( "Time " + ElapTime( cTime, Time() ), nPos ),;
                                                              oBrw:SetFocus() )

         @ 9.5,30 BUTTON oBtn PROMPT "Seek" OF oDlg ACTION( cTime := Time(),;
                                                            nPos := oQry:Seek( "27833", "id" ),;
                                                            msginfo( "Time " + ElapTime( cTime, Time() ), nPos ),;
                                                            oBrw:SetFocus() )

         @ 9.5,39 BUTTON oBtn PROMPT "Find" OF oDlg ACTION( cTime := Time(),;
                                                            nPos := oQry:Find( { "27835" }, { "id" } ),;
                                                            msginfo( "Time " + ElapTime( cTime, Time() ), nPos ),;
                                                            oBrw:SetFocus() )

         @ 0,0 XBROWSE oBrw OF oDlg SIZE 330,160


         WITH OBJECT oBrw
            :SetDolphin( oQry )
            :nMarqueeStyle    := MARQSTYLE_HIGHLROW
            :CreateFromCode()
            :aCols[3]:bLClickHeader   := { || oQry:LoadQuery(), oBrw:Refresh() }
         END

      ACTIVATE DIALOG oDlg CENTERED ON INIT oBrw:SetFocus()

     oQry:End()
     oServer:End()

 


bien ahora que utilizo:

descargue de bitbucket la ultima actualizacion de tdolphin, y genere la dolphin.lib y utilice la libmysql.lib que viene en esa version con fecha 19/09/2014 02:20pm asi como la libmysql.dll que viene tambien incluida con fecha 19/09/2014 02:20pm y que parece ser la ultima version de tdolphin ya que todos los archivos tienen esa misma fecha y hora.

Genero el .exe de mi ejemplo y coloque de antemano la libmysql.dll que viene incluida, asi tambien inclui la libmysql.lib y la dolphin.lib que genere y las inclui en la compilacion de mi ejemplo, hasta ahi todo bien.

los problemas son:
mi campo "id" es de tipo numerico

LOCATE: me saca del programa al dar click sin enviar algun error
SEEK: no me encuentra el registro
FIND: me sasa del programa al dar click sin enviar algun error

nota: en todos los casos los codigos 27830, 27833, 27835 existen en mi consulta.

todo lo estoy haciendo con harbour 3.2 de diciembre 2014 que recomendo antonio, ya que mi intencion es pasar a harbour + dolphin y dejar xharbour + tmysql
para confirmar lo que comento agrego la imagen de mi xbrowse con mi consulta.

http://www.subirimagenes.net/i/150218061411658497.jpg

Image

a alguien le sigue sucediendo? Daniel me puedes apoyar ?

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Daniel Garcia-Gil » Wed Feb 18, 2015 9:12 pm

Hola

el ORDER BY de la consulta debe ser el mismo de la busqueda con SEEK

Code: Select all  Expand view
ORDER BY c.id
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Francisco Horta » Wed Feb 18, 2015 10:23 pm

Daniel,

de esa forma el SEEK si funciona, pero en ocasiones se realizan querys mas complejos con un orden de varios campos o diferente al dato a veces a buscar, ahi que aplica?

el LOCATE y el FIND me sacan del sistema sin error

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby joseluisysturiz » Thu Feb 19, 2015 12:29 am

Francisco Horta wrote:Daniel,

de esa forma el SEEK si funciona, pero en ocasiones se realizan querys mas complejos con un orden de varios campos o diferente al dato a veces a buscar, ahi que aplica?

el LOCATE y el FIND me sacan del sistema sin error

Gracias
Saludos

Creo lo mejor en esos casos es hacer un setwhere() y si el oQry es mayor a cero, entonces hubo la coincidencia, sino, no existe...ya podra decirnos Daniel si hay otra forma mas facil o algun methodo para ello...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby acuellar » Thu Feb 19, 2015 3:55 pm

Debes usar

Code: Select all  Expand view

 oQry:SetOrder("CAMPO")
 


Luego tu búsqueda.

Saludos,

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby joseluisysturiz » Thu Feb 19, 2015 4:17 pm

El detalle de usar el setorder() es que te deja el qry ordenado por ese campo, asi que deberia de volver al order by anterior si estas haciendo algun ordenamiento, lista por browse o reporte, etc...por lo menos pasa en mi caso, no se si sera que hago algo mal, por eso tengo el where original en una VAR, realizo mi where como si fuese busqueda, pero solo cuando la busqueda es coincidencia por mas de un campo y luego llamo de nuevo mi where original, no he intentando hacerlo con el order by...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Francisco Horta » Thu Feb 19, 2015 11:18 pm

Adhemar,

si puede ser una solucion,

cOldOrder := oQry:cOrder
oQry:SetOrder(minuevoorden)
oQry:Seek(loquebusco)
oQry:SetOrder(cOldOrder)

mas o menos algo asi.

Jose Luis,

el setwhere es bueno y funciona bien cuando en tu query tiene solo un where, pero si tienes mas de un where en un query complejo, ya no funciona, esto es para consultas simples, imagino que asi funcionan los demas SETs

y locate y find? veo que usas arreglos para varios datos, pero sigue sin funcionar y no he podido probar

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby joseluisysturiz » Fri Feb 20, 2015 5:07 am

A lo que me refiero es que el seek, locate y find te sirve solo si buscas por un campo, pero si quieres busqueda por lo menos por fechas o que coincidan mas de un campo, entonces lo que te recomendaria es un where, puedes guardar el WHERE viejo y luego reestrablecerlo, bueno, es solo una idea y solucion funcional, cada quien dicen tiene su manera de matar piojos...saludos... :shock:
Dios no está muerto...

Gracias a mi Dios ante todo!
User avatar
joseluisysturiz
 
Posts: 2064
Joined: Fri Jan 06, 2006 9:28 pm
Location: Guatire - Caracas - Venezuela

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Daniel Garcia-Gil » Fri Feb 20, 2015 12:29 pm

Francisco Horta wrote:Adhemar,

si puede ser una solucion,

cOldOrder := oQry:cOrder
oQry:SetOrder(minuevoorden)
oQry:Seek(loquebusco)
oQry:SetOrder(cOldOrder)

mas o menos algo asi.

Jose Luis,

el setwhere es bueno y funciona bien cuando en tu query tiene solo un where, pero si tienes mas de un where en un query complejo, ya no funciona, esto es para consultas simples, imagino que asi funcionan los demas SETs

y locate y find? veo que usas arreglos para varios datos, pero sigue sin funcionar y no he podido probar

Gracias
Saludos


Eso es exactamente, como he dicho el blog anteriormente, Dolphin es una herramienta que te ayuda a iniciarte en el mundo SQL y logres ir entendiendo como funciona, te brinda metodos de clase simples para consultas simples mientras vas avanzando encontraras metodos que te ayudaran en el avance, pero al final hay que entender que SQL no es DBF, es una premisa que para mi punto de vista (y otros) es importante, Dolphin te permitira sacar provecho de la mayoria de las cualidades de MySql, hasta los momentos la limitante son las sentencias preparadas

La idea del seek es como en los indices de las DBFs, ordenar la consulta por el campo de busqueda, los indices son una diferencia notable entre SQL y DBFs, aparte cuando cambias el orden de una consulta (query) re-envias la consulta al servidor y te devolvera al nuevo puntero (handle) del ese resultado, nada funciona localmente, a menos que uses un servidor incrustado (embebbed server) a consecuencia el proceso se hace mas lento por que todo pasa de forma remota.

Hay que estar pendiente a la hora de usar los SET..., FIND, LOCATE, SEEK

Hace tiempo atras hable sobre el tema de los subselect y aporte una solucion para el manejo de ellos donde el usuario practicamente llevaba el control de las partes del query,
http://forums.fivetechsupport.com/viewtopic.php?p=108702#p108702
User avatar
Daniel Garcia-Gil
 
Posts: 2365
Joined: Wed Nov 02, 2005 11:46 pm
Location: Isla de Margarita

Re: SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

Postby Francisco Horta » Fri Feb 20, 2015 3:19 pm

Daniel,

De hecho al ir entendiendo mejor el SQL las sentencias se van puliendo y ala vez quieres mas en un solo query, tdolphin trae metodos muy completos y que ire probando para tratar de explotarlo al maximo, siempre son excelentes tus aportes. Por lo demas ire viendo soluciones desde SQL, a toda marcha.

Gracias
Saludos
____________________
Paco
Francisco Horta
 
Posts: 845
Joined: Sun Oct 09, 2005 5:36 pm
Location: la laguna, mexico.

Previous

Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 70 guests