Funciones MySql desde codigo FiveWin (SOLUCIONADO)

Funciones MySql desde codigo FiveWin (SOLUCIONADO)

Postby JoseAlvarez » Sun Nov 03, 2024 3:23 pm

Amigos, saludos a todos.

Un cliente me pide que pueda visualizar el contenido de un campo de una tabla MySql bien sea en mayúscula o que la primera letra de cada palabra sea Mayúscula y las demás Minúsculas. Para ello, coloque un control RADIO que según la selección del usuario, el contenido de dicho campo pueda cambiar, por ejemplo, entre "FIVEWIN FOR WINDOWS" a "Fivewin For Windows"

Investigando, veo que no existe una función propia de MYSQL que lo haga, pero si encontré una función hecha por un usuario que si ejecuta el cambio.

Ahora bien, transcribiendo el código tal cual, con un simple "Copy & Paste" a la base de datos directo con NAVICAT, funciona perfecto.
Si ejecuto ese script desde el editor de Querys de NAVICAT, también funciona.

En ambos casos, con servidor remoto y local, se crea la función y puedo llamarla y ejecutarla desde mi código fivewin sin problema.

El detalle es, que no quiero tener que hacerlo "a pie" con cada una de las bases de datos de mis clientes, quiero que la función se cree automáticamente desde un prg, el mismo que tengo para crear las tablas. Pues resulta desde código fivewin no funciona, arroja error de sintaxis.

Me imagino que debe ser alguna incompatibilidad de tDholpin con MySql.

Alguien ha logrado crear stored procedures MySql desde código fivewin?

Acá dejo imagen del código y el enlace a StackOweflow donde lo encontré


https://stackoverflow.com/questions/6181937/how-to-do-a-proper-case-formatting-of-a-mysql-column

Image


Agradecido con la Ayuda que puedan prestarme. No tengo mucho dominio con funciones de MySql.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm

Re: Funciones MySql desde codigo FiveWin (SOLUCIONADO)

Postby JoseAlvarez » Sun Nov 03, 2024 8:52 pm

Listo amigos, solucionado

Solo quite las clausulas DELIMETER y el PRG crea la función sin problemas.

Así quedó el código:

Code: Select all  Expand view  RUN
     cQuery:= "CREATE FUNCTION func_proper( str VARCHAR(255) ) "             +CRLF
     cQuery+= "RETURNS VARCHAR(255) "                                        +CRLF
     cQuery+= " BEGIN "                                                      +CRLF
     cQuery+= "   DECLARE chr VARCHAR(1); "                                  +CRLF
     cQuery+= "   DECLARE lStr VARCHAR(255); "                               +CRLF
     cQuery+= "   DECLARE oStr VARCHAR(255) DEFAULT ''; "                    +CRLF
     cQuery+= "   DECLARE i INT DEFAULT 1; "                                 +CRLF
     cQuery+= "   DECLARE bool INT DEFAULT 1; "                              +CRLF
     cQuery+= "   DECLARE punct CHAR(17) DEFAULT ' ()[]{},.-_!@;:?/'; "      +CRLF
     cQuery+= "   WHILE i <= LENGTH( str ) DO "                              +CRLF
     cQuery+= "     BEGIN "                                                  +CRLF
     cQuery+= "       SET chr = SUBSTRING( str, i, 1 ); "                    +CRLF
     cQuery+= "       IF LOCATE( chr, punct ) > 0 THEN "                     +CRLF
     cQuery+= "         BEGIN "                                              +CRLF
     cQuery+= "           SET bool = 1; "                                    +CRLF
     cQuery+= "           SET oStr = concat(oStr, chr); "                    +CRLF
     cQuery+= "         END; "                                               +CRLF
     cQuery+= "       ELSEIF bool=1 THEN "                                   +CRLF
     cQuery+= "         BEGIN "                                              +CRLF
     cQuery+= "           SET oStr = concat(oStr, UCASE(chr)); "             +CRLF
     cQuery+= "           SET bool = 0; "                                    +CRLF
     cQuery+= "         END; "                                               +CRLF
     cQuery+= "       ELSE "                                                 +CRLF
     cQuery+= "         BEGIN "                                              +CRLF
     cQuery+= "           SET oStr = concat(oStr, LCASE(chr)); "             +CRLF
     cQuery+= "         END; "                                               +CRLF
     cQuery+= "       END IF; "                                              +CRLF
     cQuery+= "       SET i = i+1; "                                         +CRLF
     cQuery+= "     END; "                                                   +CRLF
     cQuery+= "   END WHILE; "                                               +CRLF
     cQuery+= "   RETURN oStr; "                                             +CRLF
     cQuery+= " END; "                                                
 


Con esto ya podemos llevar un campo que contenga "FIVEWIN FOR WINDOWS" a "Fivewin For Windows" y viceversa.

y para aplicarlo lo hice asi:


Code: Select all  Expand view  RUN
   
    cQuery := "UPDATE "+cTabla+" SET "
    if nOrder=1
      cQuery +="nombre_cliente:=func_proper(nombre_cliente); "
     else
      cQuery +="nombre_cliente:=UPPER(nombre_cliente); "
    endif
 


donde nOrder es el valor de control RADIO.

Lo dejo por acá por su alguien lo necesita.

Un abrazo a Todos.
"Los errores en programación, siempre están entre la silla y el teclado..."

Fwh 19.06 32 bits + Harbour 3.2 + Borland 7.4 + MariaDB + TDolphin

Carora, Estado Lara, Venezuela.
User avatar
JoseAlvarez
 
Posts: 797
Joined: Sun Nov 09, 2014 5:01 pm


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 59 guests