Buscar cadenas con puntos y guiones.


([N1] imesacodabar-es) #1

Saludos a todos.
Tengo la típica búsqueda por trozos para localizar registros en una tabla.
Me encuentro con un problema para localizar registros en cuyas cadenas hay caracteres que superan los límites Alfa40. Algunos ejemplos:

  • “[1l.]”
  • “1-15”
  • “S.E.12.M.”
  • “[12/D]”

etc…

Al no poder utilizar el índice por trozos… ¿Cómo puedo localizar esa clase de cadenas sin tener que recorrer toda la tabla y buscando registro por registro? ¿No hay algún mecanismo tipo “LIKE” de SQL?

Gracias por vuestra ayuda.
Iván.


([N1] tcvsi) #2

Perdón, he escrito sin querer en este hilo.


([N4] apinna.winmotor) #3

@imesacodabar

Se me ocurre una forma que aunque algo compleja creo que puede resolver la cuestión :

1 - Crea un campo natural en la ficha que contiene el campo a buscar y guarda el mismo contenido del campo a buscar pero convirtiendo los caracteres no alfa64 a su código ASCII ( hay instrucciones específicas para localizar esos caracteres no alfa64 y para convertir a ASCII)

2 - Indexa por trozos este nuevo campo

3 - Crea un localizador asistido (es decir, un formulario que pide el dato a buscar y que contiene una rejilla para presentar los resultados). Monta en este formulario un botón buscar de manera que al pulsarlo el usuario una vez haya escrito la cadena a buscar hagas la misma conversión a ASCII de los caracteres no Alfa64 que para guardar el campo paralelo y busca en el índice que creaste en el punto 1.

4 - Muestra en la rejilla los resultados con el campo natural (no el paralelo)

Esto sólo tiene el inconveniente de que para refrescar la búsqueda el usuario tendrá que pulsar el botón. Creo que currándotelo con señales de eventos (value changed // tecla soltada) podrías hacer que se refrescara automáticamente.

Espero que te sirva


([N1] imesacodabar-es) #4

Gracias por tu respuesta.
Voy a currármelo en esa dirección a ver qué tal queda.
Aunque pienso que no es algo tan infrecuente querer extraer registros con contenido como el que planteo.
Para cosas así, añoro a “LIKE” :wink:

Saludos.


([N4] mperez) #5

Indice normal de un campo alfabetico, no tienes opción.

Los indices pro trozos y por palabras se crearon para eso, pero no para caracteres especiales.

De todas formas te comento algo que igual te sirve y además te hará pensar mas en la forma y utilidades que te da Velneo y que por lo que comentas, me da la impresión de que hablamos de algo parecido.

En su dia realice un software para una empresa de tornillería, en donde la tabla articulos, se regía por una complicadisima referencia que ellos gestionaban manualmente y en la que pretendían incporporar todos lso atributos del tornillo, en su creacion.

De esa manera había referencia tremendamente complicadas del estilo

“Red132/0,25-327Lat*1f2”

Al migrar a Velneo hicimos lo siguiente
Codigo o Id = Siguiente al ultimo
Entre lso campos del articulo estaba
Longitud
Ancho
Diametro cabeza
Tipo de rosca
Material
Tratamiento
Etc

y cada uno de ellos era un puntero a maestro al tipo de rosca, Material, Tratamiento, etc

¿Que hicimos?

Creamos un nuevo campo, que llamamos “Campoparaloacaliazacion”

Definimos que era alfabetico y le dimos un Valor Inicial, de esa manera su gestion y mantenimiento lo hacia el propio Velneo

Ese valor inicial era igual a

“Long:”+ (Valor del campo Longitud) + " Mat = " + (Nombre del campo nombre del Material ) + "Trat = " + (nombre del campo nombre del tratamiento apuntado) + "Diametro = " + (Valor del campo diametro), etc

De esa manera, en ejecución, Jmas se tuvieron que preopcuapr nunca mas de esa complicada codificacion antigua.

La localizacion era superpotente, pues a medida y en el orden que quisieran el usuario a medida iba dando atributos aparecia los articulos que los contenian

Y Además, la gestion es automatica pues si el usuario cambia en la ficha el Material, el campo se actualiza automaticamente

Es solo una sugerencia o idea, no quiero decir que sea la solución a tus problemas, pero si otra forma de ver posibles soluciones, utilzia campos con contenido inicial que se autogestiona y que se pueden indexar y ademas usar en un localizador ternario o por trozos.

Ten en cuenta que ese indice es mucho mas potente (Eso si con las limitaciones del alfa 40) que el Like que comentas, pues puedes poner distrintos trozos, que estos sean de 3 o de mas caracteres y en cualqueir orden independientemente del string que buscas. Esto a veces pasa desapercibido y es lo que da potencia

Si buscas Miguel Perez Oliver, dara igual que pongas en la busqueda “Per Oliver” , que “Oli rez” , te aparecerá

Por otro lado si pones “Ver rez”
De esa manera te pude devolver “Miguel Perez Oliver” y “Gulliver Ramirez”

Pero si añades una sola letra a cualquier terna,por ejemplo
“Ver erez” , solo te aprezera el primero.

El indice ternario y por trozos es de una gran potencia, y mucho mas combinado con campos generados por ti con contenido inicial y rellenados automaticamente por contenidos de campos enlazados a otras tablas, piensa en ello.

Al final lo que queiro trasmitirte es que pienses en la necesidad del cliente, localizar algo, por que el camino probablemente no sea el mismo que seguias en Sql.

Todo esto al margen de localizar por historicos, utilizar indices complejos, navegar a otras tablas y un largo etcetera de herramientas

Además de eso , puedes exploara en las busquedas la posibildad de filtrados, que en definitiva es como funciona un like, una vez obtenidos los registros previos

Bueno, solo pretendía abrirte los ojos, no estas en Sql, aqui las herramientas son otras y las posibildiades son otras, habra alguna cosa que eches de menos, pero sinceramente creo que cambiaras de opinion a medida profundices en nuevas posibildiades a la hora de definir la solución, pero eso cuesta, hay que cambair el chip y siemrpe tendemos a buscar paralelismos y hacerlo de una forma similar a la que lo hacíamos, es normal.

Buff, menudo rollo te he soltado, disculpa, pero ya que estaba escrito pienso que a los nuevos seguro que les aporta nuevas posibilidades


([N1] imesacodabar-es) #6

Gracias por tu explicación, y tranquilo, una palabra nunca está de más.

La verdad es que una de las cosas que más me sorprendió/gustó de Velneo fueron las búsquedas, y lo rápido que se construía un buscador.

El índice trozos es una maravilla y realizar búsquedas por diferentes campos solo tecleando trozos de palabras es un gustazo. Y el usuario final lo agradece un montón. Y la rapidez con la que se montan las búsquedas, bueno, lo sabrás tú mejor que yo. :wink:

Eso si, me choca, que ante ese derroche de potencia, tropiece en algo que a priori parece muy sencillo.

En mi empresa desarrollamos poco software, y ya que nos dedicamos a otras actividades, se agradece tener una herramienta que ayude a mejorar los tiempos de desarrollo. Lo que ocurre a veces, o al menos en algo como lo que planteo en este hilo, es que el tiempo que gano en muchas de las funcionalidades, lo pierdo buscando un camino para hacer otras cosas que en otros sistemas en como muy banal.

Y ojo, que no trato de desvirtuar nada. Mi conocimiento es tan básico que no alcanza ni a montar una crítica destructiva medianamente coherente y sostenible (que no quiero decir que sabiendo más lo hiciera), pero me ha llamado la atención que en un rato monto un formulario de mantenimiento de unos productos y cuando voy a buscar ciertas nomenclaturas, pues tenga que hacer lo que se dice “el pino con las orejas” (jajaja).

Pero vamos, comprende (que yo al menos eso hago), que una vez asimiladas todas las virtudes, que son muchas, nuestra sorpresa (o al menos la mía) sea mayor cuando nos encontramos ante estas situaciones. Seguro que con la experiencia, me iré sorprendiendo menos.

Y como de momento no voy a cambiar, me curraré la búsqueda como me han contador y esperaré que todo vaya bien.

Abrazos.