Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Convertir , por . en una consulta sql (https://www.clubdelphi.com/foros/showthread.php?t=75626)

negrokau 08-09-2011 18:21:30

Convertir , por . en una consulta sql
 
hola, estoy con un inconveniente, estoy actualizando registros desde una tabla a otra asi:
Código Delphi [-]
procedure TF_FACTURACION.DESHACERClick(Sender: TObject);
VAR
CODIGO, CANTIDAD: INTEGER;
begin
CODIGO:=dm.Q_DET_FACT.FieldValues['CODIGO'];
CANTIDAD:=dm.Q_DET_FACT.FieldValues['CANTIDAD'];

DM.CONSULTA.CLOSE;
DM.CONSULTA.SQL.Clear;
DM.CONSULTA.SQL.Add('UPDATE STOCK SET CANTIDAD=CANTIDAD+'+INTTOSTR(CANTIDAD)+' WHERE COD_STOCK='+inttostr(CODIGO));
DM.CONSULTA.ExecSQL;
mi inconveniente es que al descontar un numero con decimal (1,5) lo redondea (2) y lo que necesito es que descuente (1,5)
Investigando me entere de que en sql toma (.) en vez de (,), creo que es por eso que me redondea al actualizar la tabla, Alguna sugerencia?

maeyanes 08-09-2011 18:40:51

Hola...

Pásale los valores a la consulta vía parámetros.

Otra cosa que veo es que tus variables las declaras como enteros, si quieres manejar valores decimales debes usar el tipo Double...



Saludos...

ecfisa 08-09-2011 18:44:41

Hola.

No entiendo que tiene que ver el código que estas poniendo con el redondeo.

CANTIDAD vaya y pase, pero... el campo CODIGO esta declarado como NUMERIC ????

Saludos.

ecfisa 08-09-2011 18:58:29

Hola de nuevo.

Como te dice maeyanes, siempre es más seguro el uso de parámetros.

Además a CANTIDAD siempre le estas sumando un valor entero, de no ser así, tendrías un error de conversión al aplicar la función IntToStr.


Saludos.

defcon1_es 09-09-2011 10:12:20

Hola. Si declaras la variable CANTIDAD como INTEGER, no esperes que funcione con números fraccionarios...
Debes definirla de tipo double.

Código Delphi [-]
procedure TF_FACTURACION.DESHACERClick(Sender: TObject);
VAR CODIGO: String;  //En otro hilo tratas los códigos como string, no sé si éste es el caso también
    CANTIDAD: Double;
begin
  CODIGO:=dm.Q_DET_FACT.FieldValues['CODIGO'];
  CANTIDAD:=dm.Q_DET_FACT.FieldValues['CANTIDAD'];
  DM.CONSULTA.CLOSE;
  DM.CONSULTA.SQL.Clear;
  DM.CONSULTA.SQL.Add('UPDATE STOCK SET CANTIDAD=CANTIDAD+:PARCANTIDAD WHERE COD_STOCK= :PARCODIGO');
  DM.CONSULTA.ParamByName('ParCODIGO').AsString:=CODIGO;
  DM.CONSULTA.ParamByName('ParCANTIDAD').AsFloat:=CANTIDAD;
  DM.CONSULTA.ExecSQL;

negrokau 13-09-2011 00:06:31

Cita:

Empezado por defcon1_es (Mensaje 411449)
Hola. Si declaras la variable CANTIDAD como INTEGER, no esperes que funcione con números fraccionarios...
Debes definirla de tipo double.

Código Delphi [-]
procedure TF_FACTURACION.DESHACERClick(Sender: TObject);
VAR CODIGO: String; //En otro hilo tratas los códigos como string, no sé si éste es el caso también
CANTIDAD: Double;
begin
CODIGO:=dm.Q_DET_FACT.FieldValues['CODIGO'];
CANTIDAD:=dm.Q_DET_FACT.FieldValues['CANTIDAD'];
DM.CONSULTA.CLOSE;
DM.CONSULTA.SQL.Clear;
DM.CONSULTA.SQL.Add('UPDATE STOCK SET CANTIDAD=CANTIDAD+:PARCANTIDAD WHERE COD_STOCK= :PARCODIGO'); DM.CONSULTA.ParamByName('ParCODIGO').AsString:=CODIGO; DM.CONSULTA.ParamByName('ParCANTIDAD').AsFloat:=CANTIDAD;
DM.CONSULTA.ExecSQL;

no me va a funcionar porque designo el valor de cantidad y codigo al las variables CODIGO Y CANTIDAD y luego los elimino asi:
Código Delphi [-]
procedure TF_FACTURACION.DESHACERClick(Sender: TObject);
VAR
CODIGO: INTEGER;
CANTIDAD: DOUBLE;
begin
CODIGO:=dm.Q_DET_FACT.FieldValues['CODIGO'];
CANTIDAD:=dm.Q_DET_FACT.FieldValues['CANTIDAD'];
dm.Q_DET_FACT.Delete;//ACA ELIMINO
DM.CONSULTA.CLOSE;
DM.CONSULTA.SQL.Clear;
DM.CONSULTA.SQL.Add('UPDATE STOCK SET CANTIDAD=CANTIDAD+'+INTTOSTR(CANTIDAD)+' WHERE COD_STOCK='+inttostr(CODIGO));
DM.CONSULTA.ExecSQL;


La franja horaria es GMT +2. Ahora son las 03:59:20.

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