Ir al contenido


Foto

Problemas con campo varchar(max)


  • Por favor identifícate para responder
26 respuestas en este tema

#21 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 12 febrero 2012 - 11:30

Tal como lo han dicho los chicos:

Extraído de MSDN:

Las aplicaciones que usan los controladores ODBC de SQL Server de SQL Server versión 6.5 o anterior sólo admiten un máximo de 255 bytes de datos de caracteres. Si estas aplicaciones intentan recuperar parámetros de caracteres de SQL Server versión 7.0 o posterior, o bien columnas de conjuntos de resultados que contengan más de 255 bytes de datos, los datos de caracteres se truncarán a 255 bytes.


Ahora bien, recalco lo que he dicho al respecto de string vs widestring porque parece que no se me tomó en cuenta:

Hola,
Que yo sepa, el tipo de dato string de la era de Pascal almacenaba hasta 255 caracteres. En Delphi, al menos en la versión 6 en adelante, el tipo string es un alias de un long-string (AnsiString) que no posee limitante a cierta cantidad de caracteres, sino que responde al límite máximo de memoria que puede destinar el SO: 2GB (en 32bits, al menos).

Intuyo que el problema pasa más por una cuestión de unicode  ;), que justamente para eso es que existe WideString, que no es más que un ANSIString extendido para almacenar carácteres de 16-bits (los carácteres ANSI son de 8-bits). Y nuevamente, la limitante está dada por los 2GB.

Saludos,


Si dentro del campo se almacenan carácteres unicode obviamente será necesario pasar a WideString, en otro caso bastará con el simple string que repito y sostengo: NO ESTÁ LIMITADO A 255 CARACTERES. ESO ERA EN PASCAL.
Y si no me creen lean la ayuda por Dios.

Saludos,
  • 0

#22 Delphius

Delphius

    Advanced Member

  • Administrador
  • 6.295 mensajes
  • LocationArgentina

Escrito 12 febrero 2012 - 11:44

Extraído de la ayuda de D6:

A string represents a sequence of characters. Object Pascal supports the following predefined string types.



delphi
  1. Type Maximum length Memory required Used for
  2. ShortString 255 characters 2 to 256 bytes backward compatibility
  3. AnsiString ~2^31 characters 4 bytes to 2GB 8-bit (ANSI) characters
  4. WideString ~2^30 characters 4 bytes to 2GB Unicode characters; multiuser servers and multi-language applications




AnsiString, sometimes called the long string, is the preferred type for most purposes.
String types can be mixed in assignments and expressions; the compiler automatically performs required conversions. But strings passed by reference to a function or procedure (as var and out parameters) must be of the appropriate type. Strings can be explicitly cast to a different string type (see Typecasts).
The reserved word string functions like a generic type identifier. For example,

var S: string;

creates a variable S that holds a string. In the default {$H+} state, the compiler interprets string (when it appears without a bracketed number after it) as AnsiString. Use the {$H–} directive to turn string into ShortString.



AnsiString, also called a long string, represents a dynamically allocated string whose maximum length is limited only by available memory. It uses 8-bit ANSI characters.
A long-string variable is a pointer occupying four bytes of memory. When the variable is empty—that is, when it contains a zero-length string—the pointer is nil and the string uses no additional storage. When the variable is nonempty, it points to a dynamically allocated block of memory that contains the string value, a 32-bit length indicator, and a 32-bit reference count. This memory is allocated on the heap, but its management is entirely automatic and requires no user code.


The WideString type represents a dynamically allocated string of 16-bit Unicode characters. In most respects it is similar to AnsiString.
On Win32, WideString is compatible with the COM BSTR type. Borland development tools have support features that convert AnsiString values to WideString, but you may need to explicitly cast or convert your strings to WideString.


Saludos,
  • 0

#23 leofuentes21

leofuentes21

    Member

  • Miembros
  • PipPip
  • 22 mensajes

Escrito 13 febrero 2012 - 12:10

En este caso, olvídemonos de otras Bases de Datos. :).

Pero si tienes que comprimir la información, o separarla en dos campos, eso son soluciones "feas".

Ya puestos a utilizar una solución "fea", tienes otra alternativa, y es usar ADO, pero no para todo el proyecto (ya que como dices, es una tarea enorme, y hay que seguir la norma de "si funciona, no lo toques"). Simplemente añade un ADOConnection a tu proyecto, y solo para el Dataset que contiene ese campo, utiliza un ADOQuery y no un BDEQuery.

Así todo tu programa funciona tal y como lo venía haciendo, y esa tabla ya no te dará problemas puesto que accederás a ella con un componente moderno.

Saludos.


Problema resuelto
Gracias amigo Marc  (y) me resulto como lo sugeriste te debo una (b) , solo utilice ADOConnection y un ADOQuery solo para esa tabla  y problema resuelto.

Saludos y gracias por su respuestas amigos (y)
  • 0

#24 TiammatMX

TiammatMX

    Advanced Member

  • Miembros
  • PipPipPip
  • 1.750 mensajes
  • LocationUniverso Curvo\Vía Láctea\Sistema Solar\Planeta Tierra\América\México\Ciudad de México\Xochimilco\San Gregorio Atlapulco\Home

Escrito 13 febrero 2012 - 07:46

....te debo una ...

Y a mí, que me chupe la bruja. El que primero te dló la solución fuí yo, tanto aquí como en Club Delphi.
  • 0

#25 leofuentes21

leofuentes21

    Member

  • Miembros
  • PipPip
  • 22 mensajes

Escrito 14 febrero 2012 - 12:12



Saludos y gracias por su respuestas amigos (y)
[/quote]

Lo dije en general a todos los que me ayudaron a dar con la solucion, disculpa amigo TiammatMX tu ayuda me sirvio mucho tambien, una para ti tambien (b) y les agradesco el tiempo que dieron en dar sus respuesta y si se me queda alguno otro amigo gracias  (y)



  • 0

#26 egostar

egostar

    missing my father, I love my mother.

  • Administrador
  • 14.446 mensajes
  • LocationMéxico

Escrito 14 febrero 2012 - 12:15


....te debo una ...

Y a mí, que me chupe la bruja. El que primero te dló la solución fuí yo, tanto aquí como en Club Delphi.


jejeje, que séntido está usted, será porque no le han regalado un corazoncito el día de hoy :D :D :D

Saludos
  • 0

#27 jdepaz

jdepaz

    Advanced Member

  • Miembros
  • PipPipPip
  • 264 mensajes
  • LocationMedellín Colombia

Escrito 14 febrero 2012 - 06:58

Y a mí, que me chupe la bruja. El que primero te dló la solución fuí yo, tanto aquí como en Club Delphi.



jajajajaja


Saludos
  • 0




IP.Board spam blocked by CleanTalk.