Consultas SQL en VFP

Hola davsoft, ¿Cómo has estado?
Tengo un pequeño problema con unas tablas.
Tengo las tablas de palabras, relación y de productos.
El fin de la tabla palabras es simplemente contener todas las palabras que puede haber en los registros de productos y se relacionan entre si por la tabla de relación quien contiene el Id de Palabra y el Id de producto. Un ejemplo:
Si tengo un registro de producto, que contiene el nombre de: Refresco de dieta marca tal con un Id 2
La tabla de palabras debe contener 5 registros, de : refresco, de, dieta, marca, tal. Cada registro tiene un campo de ID único.
Por el modo en que programe la captura, se utiliza los procedimientos almacenados, con el trigger insert y update, el cual al estar escribiendo la palabra refresco me genera los siguientes registros : Re, Ref, Refr, Refre, Refrec y Refreco. En otras palabras, me genera basura. Ya hice una función Sql la cual es:
SELECT palabra.clave, palabra.palabra FROM palabra, relación WHERE palabra.clave  = relacion.Key_palabra INTO CURSOR tem ORDER BY palabra.clave                       
Luego hago un:
count all to reg
dimension registro(reg,2)
copy to array registro
SELECT palabra
delete all
for i=1 to reg
     insert into palabra (llave,palabra) values (registro(i,1),registro(i,2))
next
Y si funciona.
El problema es que cuando sean miles de registros. Esto haría lento al entrar al sistema, y como uso las tablas para la búsqueda de artículos, tampoco se puede hacer la depuración mientras realiza la búsqueda.
Había pensado utilizar en la instrucción Sql un INTO TABLE PALABRAS pero no me funciona.
¿Hay alguna manera de hacer la depuración rápida en esas tablas por medio de instrucciones SQL?
Gracias.

1 respuesta

Respuesta
1
Intentaré acortar el problema primeramente adentrándome a tu problema, ¿cuál es el objetivo principal de esta tarea?, ¿Buscar productos?, por que yo tengo consultas hechas mediante fox a mysql que encuentra cualquier palabra dentro de la tabla productos sin la necesidad de crear una tabla palabras, eso si entendí el objetivo que tienes, por que de esta manera me imagino que es complicado mantener la tabla palabras, imagínate si un usuario entra a modificar alguna letra en la tabla de productos, ¿debes regenerar todos los registros?, si entendí tu pregunta me dices así te escribo aquí mi código, te va servir mucho para encontrar los productos escribiendo cualquiera de las palabras que contenga la tabla.
Hola, Si me puedes enviar el código a mi correo te lo agradecería:
[email protected]
Gracias
Disculpa la demora, aquí te pego el código que es muy sencillo, es una función sencilla a la que envías la cadena a buscar, por ejemplo "gaseosa coca cola", LUEGO la tabla or ej "productos" y luego el campo en donde esta el nombre a buscar, por ejemplo "descripcion", por ejemplo así
xSql = xSqlBusqueda("gaseosa coca","productos","nombre")
La función te rotorna a partir del like, pero tu puedes ya ponerle la primera parte del select, te recomiendo copiarlo y probarlo antes que nada, aquí va la función
function  xSqlBusqueda( xCadena,xTabla,xCampo)
if empty(xCadena)
xCadena='vacio'
endif
dime palabras(20,1)
xRes = 1
xPalabras= 1
x_cadena = alltr(xCadena)+' '
x_resto = substr(xCadena , 1 ,at(chr(32) , xCadena)-1)
Palabras(xPalabras,1) = x_resto
do while at(chr(32),x_cadena)>0
x_resto = substr(x_cadena , 1 ,at(chr(32) , x_cadena)-1)
x_cadena = substr(x_cadena , at(chr(32) , x_cadena)+1,60)
Palabras(xPalabras,1) = x_resto
xPalabras= xPalabras+ 1
enddo
x_resto = substr(x_cadena , 1 ,at(chr(32) , x_cadena)-1)
Palabras(xPalabras,1) = x_resto
xSqlBus = " "
do case
case xPalabras-1 = 2
xSqlBus = xSqlBus + " like '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' order by "+xCampo+" "
case xPalabras-1 = 3
xSqlBus = xSqlBus + " LIKE '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' and "
xSqlBus = xSqlBus + " "+xCampo+" LIKE '%"+alltr(palabras(3,1))+"%' Order by "+xCampo+""
case xPalabras-1 = 4
xSqlBus = xSqlBus + " like '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' and "+xCampo+" like '%"+alltr(palabras(3,1))+"%' and "+xCampo+" like '%"+alltr(palabras(4,1))+"%' order by "+xCampo+""
case xPalabras-1 = 5
xSqlBus = xSqlBus + " like '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' and "+xCampo+" like '%"+alltr(palabras(3,1))+"%' and "+xCampo+" like '%"+alltr(palabras(4,1))+"%' and "+xCampo+" like '%"+alltr(palabras(5,1))+"%' order by "+xCampo+""
case xPalabras-1 = 6
xSqlBus = xSqlBus + " like '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' and "+xCampo+" like '%"+alltr(palabras(3,1))+"%' and "+xCampo+" like '%"+alltr(palabras(4,1))+"%' and "+xCampo+" like '%"+alltr(palabras(5,1))+"%' and "+xCampo+" like '%"+alltr(palabras(6,1))+"%' order by "+xCampo+""
case xPalabras-1 = 7
xSqlBus = xSqlBus + " like '%"+alltr(palabras(1,1))+"%' and "+xCampo+" like '%"+alltr(palabras(2,1))+"%' and "+xCampo+" like '%"+alltr(palabras(3,1))+"%' and "+xCampo+" like '%"+alltr(palabras(4,1))+"%' and "+xCampo+" like '%"+alltr(palabras(5,1))+"%' and "+xCampo+" like '%"+alltr(palabras(6,1))+"%' and "+xCampo+" like '%"+alltr(palabras(7,1))+"%' order by "+xCampo+""
otherwise
xSqlBus = xSqlBus + " like '%"+alltr(xCadena)+"%' order by "+xCampo+""
endcase
return(xSqlBus)

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas