Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Error: E2056 String literals may have at most 255 elements (https://www.clubdelphi.com/foros/showthread.php?t=79117)

edgar_prospero 08-06-2012 17:13:54

Error: E2056 String literals may have at most 255 elements
 
que hay a ver quien puede echarme la mano tengo un codigo donde me marca string too long algo investigue de porque use mas de 255 caracteres a continuacion agrego el codigo para ver si puede orientarme de como puedo hacerle para tenerlo en varias lineas en la parte de tabla.sql.clear es en donde lo tengo en una sola linea


Código Delphi [-]
procedure TForm2.GuardarClick(Sender: TObject);
begin
tabla.SQL.Clear;
tabla.Close;

tabla.SQL.Add('insert into arm0062( codigo, nombre, departamento, folio, unidad, cant_piezas, cant_material, costo, total ) values( :pcodigo,  : pnombre, : pdepartamento, : pfolio, : punidad, : pcant_piezas, : pcant_material, : pcosto, :ptotal) on duplicatekey update nombre= :pnombre, departamento= :pdepartamento, unidad= :punidad, cant_piezas= :pcant_piezas, cant_material= : pcan_material, costo= : pcosto, total= :ptotal');

tabla.ParamByName('pcodigo').AsString: =codigo.Text;
tabla.ParamByName('pnombre').AsString: =nombre.Text;
tabla.ParamByName('pdepartamento').AsInteger: =departamento.Text;
tabla.ParamByName('pfolio').AsString: =folio.Text;
tabla.ParamByName('punidad').AsInteger: =unidad.Text;
tabla.ParamByName('pcant_piezas').AsInteger: =folio.Text;
tabla.ParamByName('pcant_material').AsInteger: =cant_material.Text;
tabla.ParamByName('pcosto').AsInteger: =costo.Text;
tabla.ParamByName('ptotal').AsInteger: =total.Text;


tabla.Execute;

maeyanes 08-06-2012 17:18:04

Hola...

Prueba dividiendo la línea en varias:

Código Delphi [-]
tabla.SQL.Add('insert into  arm0062');
tabla.SQL.Add('(codigo, nombre, departamento...)');
tabla.SQL.Add('values(:pcodigo, :pnombre, :pdepartamento...)');


Saludos...

dec 08-06-2012 17:20:46

Hola,

Puedes partir la cadena que añades en "tabla.SQL.Add", puesto que no puede tener más de 255 caracteres. Podría quedarte algo como esto:

Código Delphi [-]
  tabla.SQL.Add
  (
    'insert into arm0062( codigo, nombre, departamento, folio, unidad, ' +
    'cant_piezas, cant_material, costo, total ) values( codigo,  : pnombre, ' +
    ': pdepartamento, : pfolio, : punidad, : pcant_piezas, : pcant_material, : ' +
    'pcosto, total) on duplicatekey update nombre= nombre, departamento= ' +
    'departamento, unidad= unidad, cant_piezas= cant_piezas, cant_material= : ' +
    'pcan_material, costo= : pcosto, total= total'
  );

Edito: O hacer lo que te ha propuesto el compañero más arriba. ;)

edgar_prospero 08-06-2012 17:42:53

excelentes respuestas las 2 probe con las 2 y me funcionaron bien gracias por su ayuda

maeyanes 08-06-2012 17:44:45

Hola...

Ahora, el detalle con ese error no es que las cadenas de texto en Delphi tengan que ser de hasta 255 caracteres, sino que una línea en el editor de Delphi no debe contener más de 255 caracteres.


Saludos...

dec 08-06-2012 17:57:40

Cita:

Empezado por maeyanes (Mensaje 434673)
Hola...

Ahora, el detalle con ese error no es que las cadenas de texto en Delphi tengan que ser de hasta 255 caracteres, sino que una línea en el editor de Delphi no debe contener más de 255 caracteres.


Saludos...

Eso no es del todo correcto. En realidad yo ignoro el porqué, pero, lo cierto es que no tiene que ver con el editor de Delphi. El caso es que no se pueden emplear "cadenas literales" de más de 255 caracteres. Puedes comprobarlo utilizando el compilador usando la "línea de comandos": si tratas de compilar un programa que contenga una cadena "literal" de más de 255 caracteres obtendrás el error "E2056 String literals may have at most 255 elements".

maeyanes 08-06-2012 18:00:56

Hola...

Vaya, podría jurar que tenía que ver con el editor. Pero bueno, entonces el detalle es con las constantes (por decirlo de alguna forma) ya que una variable del tipo string si puede tener más de 255 caracteres.

Gracias por la aclaración...


Saludos...

ecfisa 08-06-2012 18:39:47

Hola.

Según entiendo, las constantes literales son tomadas por Delphi como ShortString (el viejo string de Turbo Pascal o Delphi 1).
El tipo string(viejo) esta representado por un arreglo de 256 bytes donde en el primer elemento reside el valor de la longitud de la cadena, por lo mismo tendríamos un error al intentar:
Código Delphi [-]
var
  s1: string[256]; // error, sólo hasta 255 ( 256 - 1er Byte)
En las versiones posteriores a Delphi 1, por defecto está activada la opción {$H+}, por lo que el el compilador interpreta el tipo string como AnsiString en las declaraciones; pero no es así con las constantes literales.
Código Delphi [-]
 
var
  s1: string; // AnsiString

Para el caso de edgar, la solución es cualquiera de las propuestas por maeyanes o Dec.

Saludos.

dec 08-06-2012 20:39:22

Hola,

Gracias por la aclaración ecfisa.

ecfisa 09-06-2012 18:57:55

Cita:

Empezado por dec (Mensaje 434707)
Hola,

Gracias por la aclaración ecfisa.

De nada Dec, es sólo una entre tantas que te debemos... ;)

Saludos. :)

dec 09-06-2012 21:27:32

Cita:

Empezado por ecfisa (Mensaje 434786)
De nada Dec, es sólo una entre tantas que te debemos... ;)

Saludos. :)

Nada... no digas eso, porque, no es verdad. Yo soy el que siempre estaré agradecido. :o


La franja horaria es GMT +2. Ahora son las 12:18:31.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi