Ir al contenido


Foto

asigna null a variable currency


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

#1 abraham85

abraham85

    Advanced Member

  • Miembros
  • PipPipPip
  • 128 mensajes

Escrito 15 marzo 2011 - 10:13

hola gente q tal ?  (h)


les traigo un consulta como lo indica el titulo  :


tengo una variable de tipo Currency a la que segun el valor de otra variable (totvariedad=0) le quiero asignar NULL para
q cuando me actualize en la Tabla de la BD  no me guarde ningun valor.




delphi
  1. if n=1 then totvariedad := multi
  2.                   else if n=0 then totvariedad := null
  3.                               else totvariedad := Power(multi, 1/n)  ;
  4.           AQimpu3.SQL.Text := 'update  '+tablavariedad+'  '+
  5.                                   'set  actual ='+ currtostr(totvariedad) +' '+
  6.                                   'where idvariedad= '+ inttostr(variedad)+' '+
  7.                                   'and  idnegocio= '+inttostr(negocio)+' ';
  8.           AQimpu3.ExecSQL;




totvariedad y multi con Currency y cuando ejecuto el procedimiento
me sale el error : "could not convert variant of type null into type Currency"


hay alguna manera de asignarle null a una variable en delphi?


Gracias por todo.


Saludos! :(



  • 0

#2 bigleaguer

bigleaguer

    Advanced Member

  • Miembros
  • PipPipPip
  • 66 mensajes

Escrito 15 marzo 2011 - 11:32

Saludos.


Yo presumo que lo que quieres hacer es que cuando la variable n <> 0, te actualice los datos en la BD y cuando n=0 no toque nada en la BD. De ser así entonces tienes que preguntar de otra forma. Por ejm:




delphi
  1. begin
  2.   { Si n=0 terminamos la rutina }
  3.   if n = 0 then
  4.     Exit;
  5.  
  6.  
  7.   { Esto se va a realizar cuando n sea <> 0 }
  8.   if n = 1 then
  9.     totvariedad := multi
  10.   else
  11.     totvariedad := Power(multi, 1/n);
  12.  
  13.  
  14.   { Es recomendable el uso de parámetros en las consultas SQL }
  15.   AQimpu3.SQL.Text := 'UPDATE tablavariedad SET actual = :totvariedad WHERE idvariedad = :variedad AND idnegocio = :negocio';
  16.   AQimpu3.ParamByName('totvariedad').Value := totvariedad;
  17.   AQimpu3.ParamByName('variedad ').Value := variedad ;
  18.   AQimpu3.ParamByName('negocio').Value := negocio;
  19.   try
  20.     AQimpu3.ExecSQL;
  21.   except
  22.     { Aqui puedes capturar cualquier error en la BD }
  23.     //...
  24.   end;
  25. end;




Espero te sirva.

  • 0

#3 Sergio

Sergio

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.092 mensajes
  • LocationMurcia, España

Escrito 16 marzo 2011 - 05:17

Con "Campo.Value:= null" a mi no me funciona, parece que "value" no admite nulos por diseño.

Yo cuando quiero poner un campo de firebird a null, hago algo como esto (escrito de memoria, ojo):



delphi
  1. SQL.Text:= 'update MiTabla set Campo=:VALOR where .... ';
  2. SQL.Prepare;
  3. SQL.Params[0].AsVariant:= null;
  4. SQL.Execute;



El truco es usar un parametro y darle valor con .AsVariant, y no con .Value.
  • 0

#4 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 16 marzo 2011 - 06:10

Lo primero que te recomendaría es que uses parámetros. Como en los ejemplos que te dan los compañeros. Así podrás asignar un valor nulo (que solo se puede asignar a una variable de tipo Variant, no a un dato de Tipo String, como es el resultado de la función CurrToStr).

En todo caso, si quieres tocar lo mínimo tu código, entonces declara TotalVariedad como String, y utiliza este código :



delphi
  1. if n=1 then totvariedad := CurrToStr(multi)
  2.                   else if n=0 then totvariedad := 'null'
  3.                               else totvariedad := CurrToStr(Power(multi, 1/n));
  4.           AQimpu3.SQL.Text := 'update  '+tablavariedad+'  '+
  5.                                   'set  actual ='+ totvariedad +' '+
  6.                                   'where idvariedad= '+ inttostr(variedad)+' '+
  7.                                   'and  idnegocio= '+inttostr(negocio)+' ';
  8.           AQimpu3.ExecSQL;



Saludos.
  • 0

#5 Rolphy Reyes

Rolphy Reyes

    Advanced Member

  • Moderadores
  • PipPipPip
  • 2.092 mensajes
  • LocationRepública Dominicana

Escrito 16 marzo 2011 - 06:24

Saludos.

Las variables que soportan Null son las tipos Variants, pero como bien indican los demás compañeros es preferible utilizar una consulta parametrizada así mandas Null inicialmente al parámetro y haces la validaciones de lugar para ver si tiene valor la variable, entonces si coincide con el valor esperado le haces la respectiva asignación de valor al parámetro.
  • 0




IP.Board spam blocked by CleanTalk.