Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   SQL utilizando parametros (https://www.clubdelphi.com/foros/showthread.php?t=44085)

gaps2k 28-05-2007 18:33:55

SQL utilizando parametros
 
Que tal colegas!!

Tengo un problema al querer utilizar sql con Parametros, pero cuando se ejecuta la consulta me aparece el mensaje de error:
'Los datos de cadena o binarios se truncarìan', alguien me puede decir a que se debe este mensaje y como puedo hacer para evitarlo.

De antemano muchas gracias por su tiempo.

PD: TRabajo con Delphi 7 y SQL 2000

Código Delphi [-]
     query := (' UPDATE MAESTRO_CLIENTES SET '+
      ' CEDULA = :CEDULA, NOMBRE = :NOMBRE, DIRECCION1 = :DIRECCION1,DIRECCION2 = :DIRECCION2, TELEFONOP = :TELEFONOP,'+
      ' FAX = :FAX, APARTADO = :APARTADO, EMAIL = :EMAIL, LIMITE_CREDITO = :LIMITE_CREDITO,'+
      ' APLICA_LIMITE= :APLICA_LIMITE, SALDO_CUENTA = :SALDO_CUENTA, DIAS_CREDITO = :DIAS_CREDITO, DESCUENTO = :DESCUENTO, FECHA_ULTIMA_COMPRA = :FECHA_ULTIMA_COMPRA,'+
      ' NUMERO_ULTIMA_COMPRA = :NUMERO_ULITMA_COMPRA, MONTO_ULTIMA_COMPRA = :MONTO_ULTIMA_COMPRA, FECHA_INGRESO = :FECHA_INGRESO, ESTADO = :ESTADO, EXENTO = :EXENTO,'+
      ' RESENA_EXENTO = :RESENA_EXENTO, TIPO_CLIENTE = :TIPO_CLIENTE, DOLAR = :DOLAR');

  
 sql.SQL.Add(query);
  sql.Prepare;
  sql.ParamByName('cedula').Text := cliente.getCedula;
  sql.ParamByName('NOMBRE').AsString   := cliente.getNombre;
  sql.ParamByName('DIRECCION1').AsString    := cliente.getDireccion1;
  sql.ParamByName('DIRECCION2').AsString    := cliente.getDireccion2;
  sql.ParamByName('TELEFONOP').AsString   := cliente.getTelefonop;
  sql.ParamByName('FAX').AsString    := cliente.getFax;
  sql.ParamByName('APARTADO').AsString := cliente.getApartado ;
  sql.ParamByName('EMAIL').AsString   := cliente.getEmail;
  sql.ParamByName('LIMITE_CREDITO').AsFloat   := cliente.getLimite_Credito;
  sql.ParamByName('APLICA_LIMITE').AsBoolean   := cliente.getAplica_Limite;
  sql.ParamByName('SALDO_CUENTA').Asfloat   := cliente.getSaldo_Cuenta;
  sql.ParamByName('DIAS_CREDITO').AsInteger   := cliente.getDias_Credito;
  sql.ParamByName('DESCUENTO').AsFloat   := cliente.getDescuento;
  sql.ParamByName('FECHA_ULTIMA_COMPRA').AsDateTime   := cliente.getFecha_Ultima_Compra;
  sql.ParamByName('NUMERO_ULITMA_COMPRA').AsString   := cliente.getNumero_Ultima_Compra;
  sql.ParamByName('MONTO_ULTIMA_COMPRA').AsFloat   := cliente.getMonto_Ultima_Compra;
  sql.ParamByName('FECHA_INGRESO').AsDateTime   := cliente.getFecha_Ingreso;
  sql.ParamByName('ESTADO').AsBoolean   := cliente.getEstado;
  sql.ParamByName('EXENTO').AsBoolean   := cliente.getExento;
  sql.ParamByName('RESENA_EXENTO').AsString   := cliente.getResena_Exento;
  sql.ParamByName('TIPO_CLIENTE').AsInteger   := cliente.getTipo_Cliente;
  sql.ParamByName('DOLAR').AsBoolean   := cliente.getDolar;
  ejecutar_sin_active(sql);

jhonny 28-05-2007 18:53:04

Puede ser que quizá estas tratando de insertar un valor cuyo tamaño en caracteres es mayor al que soporta el campo en la tabla física...

Nota := Edite tu mensaje para colocar Etiquetas DELPHI. No se porque se me acaba de borrar de la mente el "Como usar el no parser" para que no muestre las caritas. :(

ContraVeneno 28-05-2007 18:53:58

Ese error significa que estas pasando valores mayores a los definidos en tu base de datos, es decir, que estas pasando una cadena de tamaño 15, pero en tu base de datos esta definido el campo con capacidad 10; por lo tanto, la cadena de 15 caracteres, se truncará (cortará, reducirá) a 10 caracteres.

Revisa los datos que estas enviando y como esta definido el campo en tu base de datos.

Lo más recomendable es que utilices la propiedad MaxLength de tus controles, definiéndole el mismo valor que tienen en tu base de datos. Es decir, si tu campo esta definido como char(10), lo mejor es que el control relacionado a este campo, tenga su propiedad MaxLenght definida en 10.

----edito
Jhonny: para el que no ponga las caritas creo que es con [NOPARSER] [/NOPARSER]

jhonny 28-05-2007 19:12:11

Cita:

Empezado por ContraVeneno
----edito
Jhonny: para el que no ponga las caritas creo que es con

Así fue como lo coloque entre las lineas:
Código Delphi [-]
query := (' UPDATE MAESTRO_CLIENTES SET '+
      ' CEDULA = :CEDULA, NOMBRE = :NOMBRE, DIRECCION1 = :DIRECCION1,DIRECCION2 = :DIRECCION2, TELEFONOP = :TELEFONOP,'+
      ' FAX = :FAX, APARTADO = :APARTADO, EMAIL = :EMAIL, LIMITE_CREDITO = :LIMITE_CREDITO,'+
      ' APLICA_LIMITE= :APLICA_LIMITE, SALDO_CUENTA = :SALDO_CUENTA, DIAS_CREDITO = :DIAS_CREDITO, DESCUENTO = :DESCUENTO, FECHA_ULTIMA_COMPRA = :FECHA_ULTIMA_COMPRA,'+
      ' NUMERO_ULTIMA_COMPRA = :NUMERO_ULITMA_COMPRA, MONTO_ULTIMA_COMPRA = :MONTO_ULTIMA_COMPRA, FECHA_INGRESO = :FECHA_INGRESO, ESTADO = :ESTADO, EXENTO = :EXENTO,'+
      ' RESENA_EXENTO = :RESENA_EXENTO, TIPO_CLIENTE = :TIPO_CLIENTE, DOLAR = :DOLAR');
Pero me lo muestra asi:

Código Delphi [-]
query := (' UPDATE MAESTRO_CLIENTES SET '+
      ' CEDULA = :CEDULA, NOMBRE = :NOMBRE, DIRECCION1 = :DIRECCION1,DIRECCION2 = :DIRECCION2, TELEFONOP = :TELEFONOP,'+
      ' FAX = :FAX, APARTADO = :APARTADO, EMAIL = :EMAIL, LIMITE_CREDITO = :LIMITE_CREDITO,'+
      ' APLICA_LIMITE= :APLICA_LIMITE, SALDO_CUENTA = :SALDO_CUENTA, DIAS_CREDITO = :DIAS_CREDITO, DESCUENTO = :DESCUENTO, FECHA_ULTIMA_COMPRA = :FECHA_ULTIMA_COMPRA,'+
      ' NUMERO_ULTIMA_COMPRA = :NUMERO_ULITMA_COMPRA, MONTO_ULTIMA_COMPRA = :MONTO_ULTIMA_COMPRA, FECHA_INGRESO = :FECHA_INGRESO, ESTADO = :ESTADO, EXENTO = :EXENTO,'+
      ' RESENA_EXENTO = :RESENA_EXENTO, TIPO_CLIENTE = :TIPO_CLIENTE, DOLAR = :DOLAR');

ContraVeneno 28-05-2007 20:13:21

despues de [ delphi ] va el [ noparse] sin la R del final... es solo "noparse"

---edito--- si funciona... primero el tag de delphi y luego el tag "noparse"

Código Delphi [-]
  
  SQL.Add('Direccion = :Direccion');


o más sencillo... cambia :D por una :d

jhonny 28-05-2007 20:31:35

Bueno, muchas gracias por tu aclaración ContraVeneno, no entiendo como se me pudo olvidar tal cosa.

Ya lo corregi y se ve perfecto.


La franja horaria es GMT +2. Ahora son las 23:18:39.

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