Page 1 of 3

SEEK en Tdolphin y Mysql indice campo NUMERICO (SOLUCIONADO)

PostPosted: Mon Feb 27, 2012 6:36 pm
by joseluisysturiz
Saludos, crei tenia la solucion, pero ahora se me presenta el mismo problema que el colega, mi campo clave es numericoy por ese mismo tengo mi ordenamiento del Query, "SELECT * FROM inscripcion ORDER BY numero ASC", si uso Query:Seek(MiVar, "nom_campo"), para el Seek nunca existe ningun valor y si hago el Query:Seek(MiVar, "nom_campo", , , .t. ) para el lSoft, entonce me muestra el valor mas coincidencia como si fuese una busqueda secuencial, ejemplo si mi valor en mi campo es 3450 y le digo al Seek que busque el 345 dice que existe aunque no exista, toma en cuenta los 3 primeros valores del valor del campo del query y para el ningun valor por debajo de 100 existe, como si solo trabajara con valores de 3 digitos, a ver si alguien le ha pasado y ha resuelto, esto solo sucede si el campo de la tabla es NUMERICO, espero alguna ayuda o si Daniel le puede dar una revisada a ver que pasa con el SEEK, gracias y saludos...



joseluisysturiz wrote:
José Ríos wrote:Buen dia.

Siguiendo con muis pruebas en tdophin me encontre con un caso en que el metodo seek con datos numericos no encuentra numeros de mas de un digito.

Por ejemplo si tengo dados de alta los registros:

Numero Nombre
1 A
3 B
11 C

Y hago el siguiente query y despues 3 busquedas seek cobre el query

Code: Select all  Expand view

                DEFINE QUERY oQry "SELECT * FROM vendedores order by numero"

               // y despues despues hago la siguientes busquedas:

               
                If oQry:seek(2, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif

                If oQry:seek(1, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif

                 If oQry:seek(11, 'Numero' ) > 0
                     msginfo('encontrado')
                else
                      msginfo('no encontrado')
                endif
 

En los dos primeros casos (numero =1 y numero=2 ), el resultado de la busqueda es exitoso, pero cuando numero=11 el registro no es encontrado.

Haciendo pruebas con find el resultado de la busqueda para numero=11 es correcto.

¿Esto significa que seek no debe usarse con campos numericos?.

Saludos.

Jose Rios.


Saludos, me habia pasado algo parecido, yo llenaba los datos manualmente a la tabla y a veces no los encontraba, es como si la tabla se embasura, prueba limpiar la tabla o cambiar el 1 o el 2 por el valor 11, ya que si te acepto el 1 y el 2, debe aceptarte el 11 ya que todos los valores son numericos, igualmente las busqueda las hago es con el valor en una VAR, intentalo de esta manera a ver..

nNum := 11

IF oQry:SEEK(nNum, "numero") = 0
.....
saludos... :shock:

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Thu Mar 01, 2012 3:05 am
by joseluisysturiz
Por favor, no respondan todos juntos que no se cual de las ideas tomar, gracias... :shock:

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Thu Mar 01, 2012 4:50 am
by interwin
Jose luis yo ya habia detectado ese problema y lo plantee en el foro e incluso le mande un mail a Daniel. Parece que el problema es con el algoritmo que se usa con seek (busqueda binaria). Sucede que cuando haces una busqueda numerica los campos arriba de cierto valor se localizan correctamente y bajo ese valor no se localizan correctamente y el puntero se pone en un registro incorrecto.


Pueden hacer la prueba siguiente: generen 32,000 registros ordenados por un campo que represente el numero de registro. Luego hagan una busqueda con seek para cualquier valor mayor a 16000 y otra para valores menores a 16000. Notaran que en el primer caso los valores son localizados correctamente y los menores a 16000 no. Sucede con cualquier rango, aunque varia el valor a partir del cual los registros son encontrados correctamente.

Ya le habia planteado este detalle a Daniel, pero como nadie mas lo habia notado parece que penso que era solo un caso particular.

Saludos.

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Thu Mar 01, 2012 1:20 pm
by joseluisysturiz
Saludos, si ya me di cuenta de todo lo que me dices, es mas, anteriormente alguien toco este mismo tema y le respondi, igual le hice un comentario a Daniel por msn y espero que tenga algun tiempo para ver esete detalle y ofrecer alguna solucion, por los momentos medio resolvi con una idea de un colega y me quedara esperar...saludos... :shock:

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Fri Mar 02, 2012 12:42 am
by sysctrl2
coisido con ustede colegas,

oQry:Seek , oQry:Locate NO funcionan,

si busco el numero: 7280,

el puntero se mueve al 72800

Los metodos son muy buenos, ya que funcionan sobre el oQry. actual,

y funcionan dentro de un xbrowse,

ojala Daniel nos pueda dar una manita para corregir el projecto DolPhin.

Saludos..

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Fri Mar 02, 2012 9:29 am
by Daniel Garcia-Gil
Hola

Saludos a todos

Hoy tratare de dedicarle el tiempo necesario para tratar de solucionarlo, por ser TDolphin es un proyecto libre al que todos tenemos acceso, si alguien quiere aportar alguna posible solucion sera bienvenida

Gracias y disculpen las demoras sobre este tema :oops:

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Fri Mar 02, 2012 3:49 pm
by joseluisysturiz
Daniel Garcia-Gil wrote:Hola

Saludos a todos

Hoy tratare de dedicarle el tiempo necesario para tratar de solucionarlo, por ser TDolphin es un proyecto libre al que todos tenemos acceso, si alguien quiere aportar alguna posible solucion sera bienvenida

Gracias y disculpen las demoras sobre este tema :oops:


Saludos Daniel y gracias por responder, nose mucho por no decir que no se nada de lenguaje C, pero viendo un poco la funcion MySeek2, me di cuenta que se repite mucho -1 y eso aparentemente es lo que sucede que se le esta restando un valor al campo con el cual se quiere la coincidencia, como ejmplo si se busca el valor 340 y existe en la tabla el valor 3407, para el SEEK hay coincidencia por los 3 primero numero de izquierda a derecha, considerando asi que el valor existe, como que es falsa y todo valor por debajo de 100, para el SEEK nunca existe, en mi caso sucede si el campo clave de la tabla es de cualquier tipo numero(int, numerico, integer, decimal, etc),como ejemplo de lineas donde se usa el -1 esta esta:

ChkInverted( &uiEnd, &uiStart, ( ISNUM( 4 ) ? ( unsigned int ) hb_parni( 4 ) - 1 : 0 ), bInverted );

siempre en la funcion hb_parni.

Gracias, que estes bien al igual que los tuyos, saludos... :shock:

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Fri Mar 02, 2012 10:11 pm
by Daniel Garcia-Gil
Saludos

descargen del SVN y hagan las pruebas respectivas... espero este solucionado

Re: Problemas con SEEK en Tdolphin y Mysql indice campo NUMERICO

PostPosted: Sat Mar 03, 2012 12:58 am
by joseluisysturiz
Daniel Garcia-Gil wrote:Saludos

descargen del SVN y hagan las pruebas respectivas... espero este solucionado


Excelente Daniel, de mi parte muchas gracias por la ayuda, hice todas las pruebas respectivas que me daban falla y ahora todo trabajo como debe ser, no esperaba menos de ti...saludos... :shock:

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

PostPosted: Mon Mar 05, 2012 5:42 pm
by Ariel
Daniel,

a mi tambien me funciona ok ahora.

salu2, ariel

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

PostPosted: Thu Mar 08, 2012 6:15 pm
by sysctrl2
Holas Daniel,

me he bajado la version mas actual de dolphin, y al compilar la libreria me envia el siguiente erro.

Gracias ..


C:\DOLPHIN3>setenvx
# -----------------------------------------------------------------------
# Building dolphin.lib
#
# C COMPILER :BCC
# PRG COMPILER :XHARBOUR
# -----------------------------------------------------------------------
Compiling .\source\prg\tdolpexp.prg
Compiling .\obj\XHARBOUR\BCC\tdolpexp.c
Compiling .\source\prg\tdolpqry.prg
Compiling .\obj\XHARBOUR\BCC\tdolpqry.c
Compiling .\source\prg\tdolpsrv.prg
Compiling .\obj\XHARBOUR\BCC\tdolpsrv.c
Compiling .\source\c\function.c
Compiling .\source\c\gerrapi.c
Compiling .\source\lang\msges.c
win-make: *** [.\obj\XHARBOUR\BCC\msges.obj] Error 1
rm .\obj\XHARBOUR\BCC\tdolpsrv.c .\obj\XHARBOUR\BCC\tdolpqry.c .\obj\XHARBOUR\BC
C\tdolpexp.c

C:\DOLPHIN3>

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

PostPosted: Thu Mar 08, 2012 6:22 pm
by sysctrl2
el error esta apartir de esta linea y por ende no crea la lib.
alguna pista?
saldos..

Compiling .\source\lang\msges.c
win-make: *** [.\obj\XHARBOUR\BCC\msges.obj] Error 1rm .\obj\XHARBOUR\BCC\tdolpsrv.c .\obj\XHARBOUR\BCC\tdolpqry.c .\obj\XHARBOUR\BC
C\tdolpexp.c

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

PostPosted: Thu Mar 08, 2012 10:07 pm
by Daniel Garcia-Gil
Hola

cual es el error... puedes verlo en make.log

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

PostPosted: Thu Mar 08, 2012 11:18 pm
by sysctrl2
gracias Daniel,

el error que viene en make.log es el siguiente.
me marca error al momento que compila MSGES.C

saludos..


c:\bcc582\bin\bcc32 -c -D__WIN__ -D__XHARBOUR__ -DHB_LEGACY_TYPES_ON -tWM -I\xhb1007\include -I.\include -o.\obj\XHARBOUR\BCC\msges.obj .\source\lang\msges.c
Compiling .\source\lang\msges.c
Borland C++ 5.82 for Win32 Copyright (c) 1993, 2005 Borland
.\source\lang\msges.c:
Error E2451 .\source\lang\msges.c 91: Undefined symbol 'ERR_INVALIDTABLES_EXPORTTOSQL' in function LoadMsgsES
Error E2040 .\source\lang\msges.c 91: Declaration terminated incorrectly in function LoadMsgsES
Error E2139 .\source\lang\msges.c 91: Declaration missing ; in function LoadMsgsES
Warning W8070 .\source\lang\msges.c 91: Function should return a value in function LoadMsgsES
Warning W8004 .\source\lang\msges.c 91: 'ErrMsg' is assigned a value that is never used in function LoadMsgsES
Error E2190 .\source\lang\msges.c 91: Unexpected }
Error E2190 .\source\lang\msges.c 101: Unexpected }
Error E2293 .\source\lang\msges.c 103: ) expected
Error E2040 .\source\lang\msges.c 105: Declaration terminated incorrectly
Error E2190 .\source\lang\msges.c 106: Unexpected }
*** 8 errors in Compile ***

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

PostPosted: Thu Mar 08, 2012 11:55 pm
by Daniel Garcia-Gil
Cesar

se esta enlazando una version incorrecta del archivo dolerr.ch alli ddberia etsar definida ERR_INVALIDTABLES_EXPORTTOSQL