Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problema Con Sentencia en Delphi (https://www.clubdelphi.com/foros/showthread.php?t=91560)

Castelo1986 04-03-2017 02:53:32

Problema Con Sentencia en Delphi
 
Saludos amigos, soy nuevo en esto de la programación, espero puedan ayudarme. tengo un problema con esta sentencia, el campo que necesito actualizar es tipo float y lo voy a actualizar con un valor que coloque en una caja de texto. al ejecutar el programa me da error. que puede ser adjunto codigo.

Código Delphi [-]
procedure TT_UT.ButtonUtClick(Sender: TObject);
begin
  T_UT.DBISAMQueryUT.SQL.Clear;
  T_UT.DBISAMQueryUT.SQL.Add('UPDATE');
  T_UT.DBISAMQueryUT.SQL.Add('STipoRetencionDetalle SET FRETD_MAYORQUE =:ValorUt');
  T_UT.DBISAMQueryUT.SQL.Add('WHERE FRETD_PERSONA = 0');
  T_UT.DBISAMQueryUT.Params.CreateParam(ftString,'ValorUt'); 
  T_UT.DBISAMQueryUT.ParamByName('ValorUt').AsString := T_UT.EditUt.Text;
  T_UT.DBISAMQueryUT.ExecSQL;

AgustinOrtu 04-03-2017 04:34:59

Bienvenido a Club Delphi

Recuerda pegarle una leida a la guia de estilo

Tambien recuerda utilizar tags para publicar codigo fuente



Con respecto a tu consulta, cual es el error (tipo de excepcion y mensaje) y en que linea?

Que componentes de acceso a datos estas usando? A que base de datos te conectas?

Como esta definido el campo que queres actualizar/insertar?

roman 04-03-2017 16:12:59

Tal como indica AgustinOrtu, debes dar más detalles de tu problema. En principio, si el campo FRETD_MAYORQUE es un float entonces quizá el motor de b.d no acepta que le des el valor como cadena de texto.

LineComment Saludos

Castelo1986 05-03-2017 02:09:16

error
 
este es el error que me da.
First chance exception at $7530B760. Exception class EDBISAMEngineError with message 'DBISAM Engine Error # 11949 SQL parsing error - Expected NULL, SmallInt, Word, AutoInc, Integer, LargeInt, Currency, Float, or BCD expression but instead found ? in UPDATE SQL statement at line 2, column 43'.


el campo que requiero actualizar esta tipo float.


es una base datos dbisam. disculpen no haberlo puesto antes.

AgustinOrtu 05-03-2017 03:49:42

Muy sencillo, no te esta reconociendo el parametro.


No use nunca dbisam (ni tampoco se que componentes estas usando). Pero por lo que es idiomatico, no es necesario que se utilicen los metodos para crear parametros en ninguna suite de componentes ya que esto lo hacen automaticamente al detectar los caracteres especiales para parametros (como los dos puntos o en algunos casos el signo de interrogacion)

Prueba a eliminar la linea

Código Delphi [-]
T_UT.DBISAMQueryUT.Params.CreateParam(ftString,'ValorUt');

La otra opcion, que no solo podria provocar el error, sino que tambien me parece mas adecuado, si estas trabajando con un campo float, porque mejor no pasarle valores float? Le estas pasando un string y el error reza: "Expected NULL, SmallInt, Word, AutoInc, Integer, LargeInt, Currency, Float, or BCD expression but instead found ?" y es cierto ya que le pasaste un string

adebonis 06-03-2017 11:31:47

Hola.

Debes hacer caso a la opinión de AgustinOrtu.

Saludos.

Castelo1986 08-03-2017 03:18:18

Gracias por responder, AgustinOrtu, Hice lo que me dijistes y aun me resulta el mismo error, el parámetro se esta creando porq necesito que el valor que yo ponga en una caja de texto me actualice ese campo en la base de datos

AgustinOrtu 08-03-2017 03:27:12

El parametro lo crea internamente el componente, no hace falta que vos mismo lo crees

Si no es eso entonces deberias verificar como esta definido el campo en la base de datos.

Como estas asignando el valor en el parametro?

Castelo1986 08-03-2017 03:43:27

duda
 
el campo esta debinido como float.

si no es necesario crear el paramatro como actualizo ese campo desde una caja de texto? no lo domino

AgustinOrtu 08-03-2017 03:50:00

Código Delphi [-]
procedure TT_UT.ButtonUtClick(Sender: TObject);
begin
  T_UT.DBISAMQueryUT.SQL.Clear;
  T_UT.DBISAMQueryUT.SQL.Add('UPDATE');
  T_UT.DBISAMQueryUT.SQL.Add('STipoRetencionDetalle SET FRETD_MAYORQUE =:ValorUt');
  T_UT.DBISAMQueryUT.SQL.Add('WHERE FRETD_PERSONA = 0');
  // T_UT.DBISAMQueryUT.Params.CreateParam(ftString,'ValorUt'); // esta linea no va
  T_UT.DBISAMQueryUT.ParamByName('ValorUt').AsFloat := 1.23; // en un principio ve por lo mas simple,
  // deberia funcionar a la primera con esto. Si funciona ya luego quitas esta linea tambien 
  T_UT.DBISAMQueryUT.ParamByName('ValorUt').AsFloat := FloatToStr(T_UT.EditUt.Text); // y dejas esta
  T_UT.DBISAMQueryUT.ExecSQL;
end;

Ten cuidado con la conversion: FloatToStr convierte usando la configuracion regional del equipo. Existen formas de utilizar formatos definidos por el programador.

Esto se puede hacer usando la version sobrecargada que acepta un parametro de tipo TFormatSettings; o bien utilizando una funcion llamada FloatToStrF

Castelo1986 08-03-2017 04:08:36

Muchas gracias Hermano si Funciono, Lo unico que cambie fue StrToFloat(T_UT.EditUt.Text) y asi si funciono. agradecido


La franja horaria es GMT +2. Ahora son las 13:02:46.

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