ERROR AL TRABAJAR CON SQL Server Native Client CON LOS CAMPOS VARCHAR(MAX)

479 views
Skip to first unread message

Dani Martinez

unread,
Jul 24, 2013, 11:51:00 AM7/24/13
to publice...@googlegroups.com
Hola grupo, 

Estoy intentando cambiar el controlador del ODBC del SQL Server a SQL Server Native Client pero cuando lo hago los campos que tengo definidos en la BD como VARCHAR(MAX) no me los retorna como MEMO.

He probado a poner en el datatypecompatibility=80 a ver si funcionaba, pero nada. Si cambio el tipo de datos en la BD a VARCHAR(8000) funciona y me devuelve un MEMO pero con VARCHAR(MAX) no.

Alguien se ha encontrado con este problema????

Espero que me puedan ayudar.
Gracias de antemano.
Un Saludo a todos.


Fernando D. Bozzo

unread,
Jul 24, 2013, 1:19:06 PM7/24/13
to publice...@googlegroups.com
Hola Dani, buscá "varchar" en www.portalfox.com (o con la ayuda de F1, que está bien explicado), que vas a encontrar como manejarlo. Igualmente te adelanto que al ser un campo de longitud "variable" Fox lo guarda como campo memo, porque es el único campo variable que tiene, nunca lo va a poner en el DBF.


Saludos.-



mpulla

unread,
Jul 24, 2013, 2:44:38 PM7/24/13
to publice...@googlegroups.com
Hola Dani

No he tenido la necesidad de usar Varchar(max), lo que si lo he delimitado, como Varchar(400) y funciona bien, lo que si encontré problema es con NVarchar() , naturalmente llegaba como campo memo, pero tenía un comportamiento extraño, por lo que tuve cambiarlo a varchar().

Por curiosidad que vas a guardar en este campo?

Saludos.
Mauricio

Dani Martinez

unread,
Jul 24, 2013, 3:24:25 PM7/24/13
to publice...@googlegroups.com
Hola Mauricio,

lo que intentó grabar es el equivalente a un campo memo de foxpro. Es un campo de texto ilimitado puede tener un contrato con sus cláusulas por ejemplo, un registro de observaciones, necesito que sea ilimitado. en algunos sitios tengo varchar de 8000 y funciona correctamente, me lo mañea como un memo. pero al poner varchar(max) lo toma como char(0)

el caso es que con el drive e de sql server normal si lo hace bien, es con el nativo con el que no funciona correctamente.

espero que alguien pueda ayudarme.

Dani Martinez

unread,
Jul 24, 2013, 3:27:54 PM7/24/13
to publice...@googlegroups.com
hola Fernando, gracias por tu respuesta, pero precisamente es eso lo que quiero que me lo ponga en memo. Pero me lo pone como char(0), no estoy trabajando con dbfs, trabajo con spt contra sql server. el problema me viene cuando utilizo el driver nativo

Fer

unread,
Jul 24, 2013, 4:27:21 PM7/24/13
to publice...@googlegroups.com

Ok, entiendo. Que mal :-(

Fernando D. Bozzo

unread,
Jul 24, 2013, 4:36:14 PM7/24/13
to publice...@googlegroups.com
Hola Dani:

¿Qué versión de SQL Server usás y cuál es el tamaño máximo del campo varchar(max)?

mpulla

unread,
Jul 24, 2013, 5:13:27 PM7/24/13
to publice...@googlegroups.com
Hola Dani

Hay algunas cosas funcionan con ODBC y otras con ADO DB de Sql Client native, sería que pruebes, pero sería mejor que uses filestream es justamente para lo que necesitas, si no estoy está presente desde Sql Server 2008, te va a dar un mejor perform.

Saludos.
Mauricio

Dani Martinez

unread,
Jul 24, 2013, 6:01:01 PM7/24/13
to publice...@googlegroups.com
he probado con sql server 2008 y 2012 pero pasa lo mismo

Dani Martinez

unread,
Jul 24, 2013, 6:06:26 PM7/24/13
to publice...@googlegroups.com
yo estoy atacando vía odbc por sí le sirve a alguien. simplemente hago una select y recojo en un cursor mediante SPT.
Me creo una conexión y ejecuto sqlexec con la select.

la verdad es que suena a chiste porque con la versión antigua funciona correctamente y con la nueva si utilizo el varchar(max) como recomienda m$ me falla.

de todas formas gracias por el interés

saludos.

Fernando D. Bozzo

unread,
Jul 24, 2013, 6:14:58 PM7/24/13
to publice...@googlegroups.com
Hola Dani:

Acabo de buscar en Google y dice que en SQLServer 2008/2012 en varchar(max) es de 2^31 bytes, o sea, 2 GB!

http://stackoverflow.com/questions/1761124/how-many-characters-in-varcharmax

Por eso no te deja seguramente. Probá con el máximo que realmente vayas a usar, pero que no supere los 16 MB


Saludos.-



MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Jul 24, 2013, 7:18:28 PM7/24/13
to publice...@googlegroups.com
Hola y porque no usas Text ahí puedes almacenar muchos mas datos que el vachar.


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)


Claudio Luna

unread,
Jul 24, 2013, 8:20:49 PM7/24/13
to Comunidad de Visual Foxpro en Español
Dani,
Provaste hacer el select con CONVERT() ? Para asegurarte el tipo que necesitas ?
Saludos
Claudio
--
Claudio Luna
Monttevideo - Uruguay
SKYPE: clunamarin
Cel. 099 194 770

Claudio Luna

unread,
Jul 24, 2013, 8:21:14 PM7/24/13
to Comunidad de Visual Foxpro en Español
Perdón.. probaste....
jaja

mpulla

unread,
Jul 24, 2013, 9:39:31 PM7/24/13
to publice...@googlegroups.com
Hola Russvell.

Los campos tipo text van a desaparecer en proximas versiones.

Saludos.
Mauricio

Dani Martinez

unread,
Jul 25, 2013, 3:14:36 AM7/25/13
to publice...@googlegroups.com
Gracias Fernando, 

A ver si lo explico bien, creo que no lo he explicado correctamente.

La BD está en SQL Server 2008 y también tengo una de prueba en 2012. Si ataco a la BD con el ODBC que viene directamente en Windows DRIVER=SQL Server me funciona correctamente con VARCHAR(MAX) el problema viene cuando ataco con el DRIVER propio del 2008 o del 2012 DRIVER=SQL Server Native Client 10.0.

Se supone que está más actualizado que el anterior y además la recomendación de M$ es trabajar con VARCHAR(MAX) y no con TEXT porque como bien explicó Mauricio en un post anterior la tendencia es a desaparecer. No sé porque tiene este comportamiento o es que tengo que configurar algo que se me escapa. El realizar un CAST sería una locura ya que trabajo con un capa de datos que intenta hacerme transparente el acceso a los datos. Le pido que me abra una tabla determinada y me crea una vista remoto al vuelo.

Espero haberme explicado.

Fernando D. Bozzo

unread,
Jul 25, 2013, 3:37:51 AM7/25/13
to publice...@googlegroups.com

Hola Dani, ya entendí. No trabajé con SLQServer, pero sí con Oracle y te comento algo que tal vez pueda ser parecido en SQLServer.

En Oracle si se usa el Driver ADO nativo de Oracle se pueden usar los campos CLOB, en cambio con el driver de Microsoft (el que no es para .Net) no se puede, y hay que transmitir los datos en "chunks" (pedazos) con AppendChunk.

Se que en tu caso sería al revés y con ODBC, no con ADO, pero tal vez te convenga revisar la documentación online del driver para ver sus limitaciones y si se puede usar como pretendés o hay que hacerlo de otra forma.

Saludos.-

Dani Martinez

unread,
Jul 25, 2013, 12:16:23 PM7/25/13
to publice...@googlegroups.com
He estado revisando y parece que es un error del DRIVER no sólo pasa en VFP.

Aquí les dejo un LINK donde explican el mismo problema, pero al parecer la solución es no usarlo :-( .


En teoría con el Driver Nativo intentas que todo vaya más rápido y fluido....y te encuentras con esto .... 

MALKASOFT ADPI: http://www.developervfp.blogspot.com/

unread,
Jul 25, 2013, 12:26:14 PM7/25/13
to publice...@googlegroups.com
mpulla Aclarando tu respuesta, tengo SQL Server 2012 y todo sigue igual es mas no tiene mucho cambios desde el 2005 yo vengo trabajando con SQL Server desde sus primeras versiones, cualquier cosa estoy a tus ordenes, "una cosa no trates de inventar la rueda solo hay que usarla jejeje" broma.


Pd.: Descargate mi grilla que tiene multiples funciones como filtrar, multiseleccion, búsqueda, etc del siguiente link http://www.developervfp.blogspot.com/p/gridlibre-v35.html. Ahora también puedes bajarte mi ultima herramienta Busqueda Incremental con un TEXTBOX http://developervfp.blogspot.mx/p/busqueda-incremental-con-un-textbox.html  las herramientas viene con código fuente, ojo no hacer mal uso por favor. 


Saludos; 


Ing. Russvell Jesus Soto Gamarra 
San Juan del Rio - Queretaro - Mexico 
Nextel.: 52*133750*16
rycjesusrj @ hotmail.com
Framework Multi-conexion version 6.0 (nueva)

Fer

unread,
Jul 25, 2013, 2:30:53 PM7/25/13
to publice...@googlegroups.com

¿y no podés usar ADO en vez de ODBC?

mpulla

unread,
Jul 25, 2013, 6:35:17 PM7/25/13
to publice...@googlegroups.com

Hola Russvell.

Tomado de la ayuda de Sql Server 2012.

Los tipos de datos ntext, text e image se quitarán en una versión futura de Microsoft SQL Server.
Evite su uso en nuevos trabajos de desarrollo y piense en modificar las aplicaciones que los usan actualmente.
Utilice nvarchar(max), varchar(max) y varbinary(max) en su lugar.

M$ presenta las nuevas ruedas varchar, nvarchar y para almacenar archivos no estructurados Filestream jajaja.....

Aunque con M$ nunca se sabe recuerdas: "ADO es el futuro, ODBC el pasado......." a la vuelta de una año, "ODBC ha vuelto para quedarse, en el futuro ADO se descontinuara" jajajajaja, tremendo chasco que me dio

Gracias por tu ofrecimiento...

Saludos.
Mauricio

Reply all
Reply to author
Forward
0 new messages