Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   enviar dato real a sql (https://www.clubdelphi.com/foros/showthread.php?t=59658)

Memo6015 03-09-2008 20:43:04

enviar dato real a sql
 
hola amigos de club delphi, miren tengo el siguiente problema

tengo un procedimiento almacenado en sql llamado

SP_MODIFICA_PRODUCTO

este recibe dos parametros un codigo de tipo entero y un valor de tipo real, por ejemplo cuando quiero modificar algo en sql lo puedo ejecutar asi

SP_MODIFICA_PRODUCTO 1, 15.5

sql trabaja los decimales con punto, en cambio en delphi las operaciones me las devuelve con coma

si por ejemplo en delphi tengo una variable que esta asi

valReal := 2/10;

valReal va a tener valor 0,2 si le llamo al procedimiento y le paso

SP_MODIFICA_PRODUCTO 1, valReal eso quedaria como

SP_MODIFICA_PRODUCTO 1, 0,2 y como uds saben que en sql la coma separa parametros me da un error cuando quiero escribir desde mi aplicacion delphi en la base de datos


como lo hago para enviar un valor real desde delphi a sql?

la consulta la hago asi

Query:='SP_MODIFICA_PRODUCTO '
+ IntToStr(CodigoIngreso_Int) + ','
+ FloatToStr(ValorIngreso_real);
Q_IngresaPlato.SQL.Clear;
Q_IngresaPlato.SQL.Add(query);
Q_IngresaPlato.ExecSQL;

pero esto me da error


espero entiendan mi problema, gracias por la ayuda

donald shimoda 03-09-2008 20:48:25

Cita:

Empezado por Memo6015 (Mensaje 311594)
Query:='SP_MODIFICA_PRODUCTO '
+ IntToStr(CodigoIngreso_Int) + ','
+ FloatToStr(ValorIngreso_real);
Q_IngresaPlato.SQL.Clear;
Q_IngresaPlato.SQL.Add(query);
Q_IngresaPlato.ExecSQL;

pero esto me da error


espero entiendan mi problema, gracias por la ayuda

Si usas parametros del query (en este caso store procedure ) no es mas simple? Tiene que funcionar.

Saludos.

Memo6015 03-09-2008 21:34:51

es que el dato lo debo capturar en el programa y del programa enviatr los datos a la tabla en sql

necesito saber como mandar numeros reales, con string e integers no hay problema

maeyanes 03-09-2008 21:39:51

Hola...

Intenta de esta forma:

Código Delphi [-]
Q_IngresaPlato.SQL.Text := 'SP_MODIFICA_PRODUCTO :Param1 :Param2';
Q_IngresaPlato.ParamByName('Param1').AsInteger := CodigoIngreso_Int;
Q_IngresaPlato.ParamByName('Param2').AsFloat := ValorIngreso_Real;
Q_IngresaPlato.ExecSQL;

Si no te funciona (no lo he probado :p), puedes intentar usando un componente para tratar con procedimientos almacenados, claro, esto depende de que componentes estés usando para conectarte a tu base de datos...



Saludos...

donald shimoda 03-09-2008 22:15:26

Cita:

Empezado por maeyanes (Mensaje 311613)
Hola...

Intenta de esta forma:
Código Delphi [-]
Q_IngresaPlato.SQL.Text := 'SP_MODIFICA_PRODUCTO :Param1 :Param2';
Q_IngresaPlato.ParamByName('Param1').AsInteger := CodigoIngreso_Int; 
Q_IngresaPlato.ParamByName('Param2').AsFloat := ValorIngreso_Real; 
Q_IngresaPlato.ExecSQL;

Saludos...

Es lo que decia, sin el código. ;)

Memo6015 04-09-2008 01:04:58

no me funciono :(

mi procedimiento almacenado es este

CREATE PROCEDURE SP_MODIFICA_PRODUCTO

@Cod smallint,
@Cant float
AS
update productos
set Cantidad = @Cant
where Codigo =@Cod

como ven recibe un dato float, con el entero no tengo problemas y lo malo que desde el programa debo trabajar obligatoriamente con datos float por que el integer hace un trunc y 15,5 lo deja en 15, enviar el dato como un string tampoco puedo por que la variable an sql esta definida como float
asi que me dara error si envio un string a un float

la parte que escribe es un ciclo

for i:=0 to Indice_Int-1 do
begin
ValorIngreso_real:=RestaProductosCod[i]/1000;
CodigoIngreso_Int:=StrToInt(codigo_Ing[i]);
{
Query:='SP_MODIFICA_PRODUCTO '
+ IntToStr(CodigoIngreso_Int) + ','
+ FloatToStr(ValorIngreso_real);
Q_IngresaPlato.SQL.Clear;
Q_IngresaPlato.SQL.Add(query);
Q_IngresaPlato.ExecSQL;
}
end;

ValorIngreso_real es el valor de tipo real definido en delphi como ven recibe una division que le da datos del tipo 14,5 47,8 etc
pero el procedimiento queda asi

SP_MODIFICA_PRODUCTO 1, 15,4
como ven se crean tres parametros debido a la coma de delphi me gustaria cambiar esa coma por punto :mad::mad:


bueno gracias por la ayuda

lo agradezco mucho, todos los puntos de vista me sirven

elmago 04-09-2008 08:01:21

Cambiar configuracion regional
 
Hola amigo Memo

Tu problema del signo de separacion de decimales lo tuve hace tiempo y lo resolvi cambiando la configuracion regional del win. alli donde se ingresa el signo para la separacion de miles le puse la "coma" y para la separacion de decimales le puse el "punto". Asi todo el Delphi trabaja con el formato aceptado por el SQL.

Espero que te sirva.

Un saludo.

Memo6015 04-09-2008 14:55:01

si eso era!!! mi configuracion regional estaba en comas

lo puse en puntos y ya funciona muchas
pero muchas gracias

donald shimoda 04-09-2008 19:55:22

Cita:

Empezado por elmago (Mensaje 311748)
Hola amigo Memo

Tu problema del signo de separacion de decimales lo tuve hace tiempo y lo resolvi cambiando la configuracion regional del win. alli donde se ingresa el signo para la separacion de miles le puse la "coma" y para la separacion de decimales le puse el "punto". Asi todo el Delphi trabaja con el formato aceptado por el SQL.
Un saludo.

Si, pero el problema es este problema causa side effects sobre otras aplicaciones del sistema. No porque la solución sea la más simple implica que es la correcta.

Yo te recomiendo que busques por el lado de los params o bien que fuerces dentro de tu código el separador decimal. Lo lógico sería hacerlo sobre windows pero como te digo puedes afectar a otras aplicaciones, y hay que ser solidarios en un entorno compartido.;)

Saludos

Memo6015 05-09-2008 07:01:21

si en eso tienes mucha razon por el momento puede ser una solucion temporal

lo otro que pense que tambien puede ser una muy buena solucion es
convertir la variable en sql de real a varchar asi podre enviar de delphi a
sql un string y como puedo extraer desde sql la variable como varchar y en delphi transformarla en float puedo operar sobre ella y devolverla como varchar de nuevo

y en sql para operar con esa variable puedo usar un CAST, estudiare algunas soluciones


gracias por los consejos

ninguno 05-09-2008 07:18:10

Hola

Como dice donald shimoda, te aconsejo que uses DecimalSeparator para establecer momentáneamente el tipo de separador decimal que quieras usar

Código Delphi [-]
var
  Sep: char;
begin
.....
  Sep := DecimalSeparator;
  try
    DecimalSeparator := '.';

    // operaciones
  
  finally
    DecimalSeparator := Sep;
  end;


La franja horaria es GMT +2. Ahora son las 20:43:24.

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