Convertir Campo Memo a Caracter Visual Foxpro

1,081 views
Skip to first unread message

integral

unread,
Nov 7, 2023, 10:54:14 PM11/7/23
to Comunidad de Visual Foxpro en Español
Que tal Amigos :

Me he topado con el problema que cuando quiero acceder a un campo desde Sql Server desde Visual FoxPro me aparece como campo MEMO por lo que no podía tratarlo como texto normal, por lo que ahora accedo a esta información de la siguiente manera.

Del Campo Memo substraigo los primeros 49 caracteres :
Ej.-
M i c r o s o f t  S q l  S e r v e r  2 0 1 9

SELECT Substr(Exp,1,49) AS Version FROM cRes INTO CURSOR Sql_llave 

cTexto = Sql_llave.Version
 WAIT WINDOW "Version Sql Server: " + cTexto TIMEOUT 1.5 

En el mensaje la variable cTexto solo me muestra el 1er. carácter :

 Version Sql Server: M

La idea es capturar los 49 caracteres, quitarle los espacios en blanco, luego guardarlo en una variable para luego ponerlo como titulo en un MessageBox

Agradezco sus comentarios y sugerencias.

Saludos,

Integral

Edwin Duran

unread,
Nov 8, 2023, 6:42:56 AM11/8/23
to Comunidad de Visual Foxpro en Español
Saludos integral,  que longitud tiene ese campo y que tipo de datos es,  

Zarlu

unread,
Nov 8, 2023, 7:17:21 AM11/8/23
to Comunidad de Visual Foxpro en Español
Buenos días Integral!

Podrías mostrar una imagen de ese campo memo con la información?
Quizá tiene espacios previos que habría que quitar para entonces contar los 49 caracteres que deseas.
O podría probar con StrExtract() en lugar de SubStr()

Suerte
zarlu
Chetumal, Quintana Roo, México

mpulla

unread,
Nov 8, 2023, 7:26:04 AM11/8/23
to Comunidad de Visual Foxpro en Español
Hola Integral.

Había un problema con los campos nvarchar, prueba cambiando el el tipo de dato a varchar

Saludos.
Mauricio

integral

unread,
Nov 8, 2023, 8:56:10 AM11/8/23
to Comunidad de Visual Foxpro en Español
Que tal Amigos

Buenos Dias

Les comento brevemente mi problema, con la siguiente instrucción obtengo la versión desde VFP del Sql Sever instalado

   lcQueryVersion='Select @@version'        &&  El resultado en un Campo Memo de varias lineas, Ver Imagen Adjunta. Aqui podria aplicar el Cast para que no me devuelva en MEMO ?
                                                                           
Luego :

     SELECT Substr(Exp,1,49) AS Version FROM cRes INTO CURSOR Sql_llave
     SELECT Sql_llave
     BROWSE Timeout 1

    Aquí he sustraído los primeros 49 caracteres. ( Ver imagen Adjunta)

   Del Campo Memo substraigo los primeros 49 caracteres :  
   Ej.-
   M i c r o s o f t   S q l  S e r v e r   2 0 1 9

    La Cadena obtenida contiene espacios y la idea es quitar los espacios y quede asi la cadena...
  
   Microsoft Sql Server 2019

     cTexto = Alltrim(Sql_llave.Version)
     WAIT WINDOW "Version Sql Server: " + ALLTRIM(cTexto) TIMEOUT 1.5 .

En el mensaje la variable cTexto solo me muestra el 1er. carácter :

 Version Sql Server: M

Me pregunto, que falta o estoy haciendo mal para obtener la cadena sin espacios para luego el resultado ponerlo en un label, messagebox como titulo de un aviso o alerta en Vfp.

Agradezco vuestra ayuda.

Saludos,

Integral
Version del Sql Server desde VFP.jpg
CAMPO MEMO SUSTRAIDO.jpg

mpulla

unread,
Nov 8, 2023, 10:46:46 AM11/8/23
to Comunidad de Visual Foxpro en Español
Hola integral.

Los resultados de @@VERSION se presentan como una cadena nvarchar

Prueba: Select cast(@@VERSION As varchar)

Saludos.
Mauricio

integral

unread,
Nov 8, 2023, 11:28:57 AM11/8/23
to Comunidad de Visual Foxpro en Español
Amigo Maurillo

Ya me estoy rayando. Probé de diferentes formas y en todas me da error de sintaxis...

lcQueryVersion = Cast(Select @@VERSION As varchar)

lcQueryVersion = Select cast(@@VERSION As varchar)

lcQueryVersion = CAST('Select @@version' AS C(60))

lcVersion = 'Select @@version'
lcQueryVersion = CAST(SUBSTR(lcVersion,1,80) AS CHAR(100)) AS Nombre

Me puedes orientar con tu respuesta...

Atte.,

Integral 

Edwin Duran

unread,
Nov 8, 2023, 11:44:03 AM11/8/23
to Comunidad de Visual Foxpro en Español
Prueba con  Select cast(@@VERSION as varchar(25)) as version

Zarlu

unread,
Nov 8, 2023, 12:43:26 PM11/8/23
to Comunidad de Visual Foxpro en Español
Qué tal integral!

Quizá no sean espacios sino caracteres especiales, CHR(10)   por ejemplo.
Prueba a sustituirlos con Strtran()
o también aplica StrConv() a lo que obtienes para que no salga "espaciado"

Opción no ortodoxa...obtener a mano sólo caracteres y números

Suerte
zarlu
Chetumal, Quintana Roo, México

mpulla

unread,
Nov 8, 2023, 12:44:46 PM11/8/23
to Comunidad de Visual Foxpro en Español
Hola integral.

En este momento no dispongo de sql server para probar, te va a devolver un campo memo pero sin los problemas de espacios en blanco.

if SqlExec(liHandle, [ Select cast(@@VERSION As varchar)  ], [data_rs]) = -1
aError(laError)
messagebox(laError(2))
       return 
endif

SELECT data_rs
BROWSE 

Saludos.
Mauricio

Dsan

unread,
Nov 8, 2023, 1:06:33 PM11/8/23
to publice...@googlegroups.com

No debería pasar eso integral ya que si lo envias completo no pasa de los 255 caracteres que permite vfp en un campo carácter, en mi caso jamas pongo el limite lo mas que he usado son 240.. 250.
Select cast(@@VERSION  en mi opinion es mas de configurar esto en tu conexión:

Sys(987,.T.)
Set VarcharMapping Off
CursorSetProp("MapVarChar", .F., 0)
CursorSetProp("MapBinary",  .T., 0)

A mi me trae siempre campos de carácter, jamás memo.
 
Saludos

DS


--
Blog de la Comunidad Visual FoxPro en Español http://comunidadvfp.blogspot.com
---
Has recibido este mensaje porque estás suscrito al grupo "Comunidad de Visual Foxpro en Español" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a publicesvfoxp...@googlegroups.com.
Para ver esta conversación en el sitio web, visita https://groups.google.com/d/msgid/publicesvfoxpro/b301a84b-1c46-4d6f-b4e3-0e9d7214bb29n%40googlegroups.com.

integral

unread,
Nov 8, 2023, 1:59:34 PM11/8/23
to Comunidad de Visual Foxpro en Español

Que tal Amigos :

Publico el código que estoy utilizando. El Campo Memo lo paso a un Cursor con tipo Carácter. Pero solo me muestra el primer carácter

Version Sql Server: M...

IF cn > 0
   lcQueryVersion = 'Select @@version'                      
   IF SQLEXEC(cn,lcQueryVersion,"cRes") > 0


     SELECT Substr(Exp,1,49) AS Version FROM cRes INTO CURSOR Sql_llave
     SELECT Sql_llave
     BROWSE TIMEOUT 1.5                

     SELECT padr(left(Version,len(Version)),50," ") as caracter FROM Sql_llave INTO CURSOR llave  && Convierte a Caracter 
     SELECT llave
     BROWSE TIMEOUT 1.5
            
     cTexto = ALLTRIM(Caracter)                          && Solo muestra el 1er. Caracter ver imagen adjunta
     WAIT WINDOW "Version Sql Server: " + "[" + ALLTRIM(cTexto) + "]" TIMEOUT 1.5

   ELSE
     
      IF AERROR(laError) > 0
              Messagebox("No se pudo ejecutar la consulta"+chr(13)+;
                                  "Causa:"+laError[2],16,"Error Msg")
      ENDIF
   ENDIF
   SQLDISCONNECT(cn)
ELSE
   IF AERROR(laError) > 0
       Messagebox("No se pudo ejecutar la consulta"+chr(13)+;
                            "Causa:"+laError[2],16,"Error Msg")
   ENDIF
ENDIF

Que faltaría corregir al código para que funcione correctamente.

Agradezco sus comentarios y sugerencias.

Atte.,

Integral

mpulla

unread,
Nov 8, 2023, 2:11:06 PM11/8/23
to Comunidad de Visual Foxpro en Español
Hola integral.

Solo tienes que probar.

varchar.png

Dsan

unread,
Nov 8, 2023, 2:20:07 PM11/8/23
to publice...@googlegroups.com
Bueno al raton es que no he entendido que es lo que deseas.
pero a mi me sale bien de ambas formas ve esta..

imagen..

saludos

DS




Integral.png

integral

unread,
Nov 9, 2023, 3:22:55 PM11/9/23
to Comunidad de Visual Foxpro en Español
Amigos del Foro :

Muy Buenas Tardes.

No me queda mas que agradecer a cada uno de Ustedes por su tiempo y apoyo en la solución a mi problema. 

Aunque el código que aplique lo he descartado de momento. Me queda pendiente corregir el error.

Aplique en resumen sus ideas en código.

Gracias Nuevamente.

Hasta otra ocasión.

Saludos,

Integral
Titulo.jpg

Jorge Zapata

unread,
Nov 9, 2023, 8:49:24 PM11/9/23
to Comunidad de Visual Foxpro en Español
Prueba con este código

select  substring(cast( @@VERSION as varchar(250)) ,28,12)  AS Version 

Saludos,
JZ

Dsan

unread,
Nov 9, 2023, 10:05:29 PM11/9/23
to publice...@googlegroups.com

Que lamentable tu comentario Integral con tanta soluciones que se te dieron,  creo que despues de preguntar tanto te centras en que tu lo quieres resolver tal como tu te lo planteas, habiendo tantas soluciones, por ejemplo para que traer todo el campo con todos sus character si al final necesitas unicamente los primero 49 segun tu.

Solución 1.
lcQueryVersion = 'Select CAST(@@version as varchar(220)) as versionsql'                      
SQLEXEC(nHandle,lcQueryVersion,"cRes")
BROWSE

Solución 2.
?SQLEXEC(nHandle,"select  substring(@@VERSION,1,25)  AS Version",'sqlversion')

Solución 3.   Haciendo lo que tu quieres con un simple alltrim() y listo, claro  esto en mi opinión es innecesario si lo haces como anteriormente se plantea, entre otras formas que te plantearon otros...

?SQLEXEC(nHandle,"select @@VERSION AS Version",'sqlVersion')
SELECT Substr(ALLTRIM(version),1,49) AS Version FROM Tmpver INTO CURSOR Sql_llave
brow

A veces las soluciones están solo que nos las vemos, pero es lo correcto traer tantos registros o caracteres si no los voy a usar?

Saludos
DS


integral

unread,
Nov 9, 2023, 10:46:55 PM11/9/23
to Comunidad de Visual Foxpro en Español
Buenas Noches :

Amigo Jorge Zapata te agradezco el ejemplo mostrado. Aunque No muestra los datos requeridos.

Aquí el código corregido...

lcQueryVersion = 'select substring(cast( @@VERSION as varchar(80)),11,16) AS Version' 
SqlExec(cn,lcQueryVersion,"cRes")                                        
BROWSE

Amigo Douglas, no comprendo a que le llamas lamentable. Lo cierto es que aparecieron diferentes soluciones mas simples. 
Como pensé inicialmente el comando CAST ahorra y simplifica líneas de códigos.

Gracias nuevamente.

PD : la 3era. solución da como resultado el mismo error que tenia con mi código es decir solo muestra el 1er. carácter.

Atte.,

Integral

Dsan

unread,
Nov 9, 2023, 11:42:55 PM11/9/23
to publice...@googlegroups.com

La tercera solución adjunto imagen, algo pasa con tu vfp o no configuras tu conexión se te recomendó...
PD: Lamentable porque después de tantas respuestas aun así no continuantes... en respuesta a eso..
Aunque el código que apliqué lo he descartado de momento. Me queda pendiente corregir el error.

Saludos


Captura.PNG

leninma...@gmail.com

unread,
Dec 8, 2024, 7:11:16 AM12/8/24
to Comunidad de Visual Foxpro en Español
Saludos integral

cTexto = ALLTRIM(STRTRAN( Sql_llave.Version, CHR(0), ""))  

prueba la siguiente instrucción. 



El martes, 7 de noviembre de 2023 a las 23:54:14 UTC-4, integral escribió:

integral

unread,
Dec 8, 2024, 6:37:41 PM12/8/24
to Comunidad de Visual Foxpro en Español
Gracias por Responder...

El problema fue solucionado en aquel momento.

Saludos,

Integral
Reply all
Reply to author
Forward
0 new messages