Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 03-09-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
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
Responder Con Cita
  #2  
Antiguo 03-09-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por Memo6015 Ver Mensaje
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.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #3  
Antiguo 03-09-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
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
Responder Con Cita
  #4  
Antiguo 03-09-2008
[maeyanes] maeyanes is offline
Capo de los Capos
 
Registrado: may 2003
Ubicación: Campeche, México
Posts: 2.732
Poder: 23
maeyanes Va por buen camino
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 ), 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...
Responder Con Cita
  #5  
Antiguo 03-09-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por maeyanes Ver Mensaje
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.
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #6  
Antiguo 04-09-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
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


bueno gracias por la ayuda

lo agradezco mucho, todos los puntos de vista me sirven
Responder Con Cita
  #7  
Antiguo 04-09-2008
Avatar de elmago
elmago elmago is offline
Miembro
 
Registrado: ene 2006
Ubicación: El fin del mundo.
Posts: 43
Poder: 0
elmago Va por buen camino
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.
__________________
Lo importante no es tener todas las respuestas, lo importante es hacer las preguntas correctas.
Responder Con Cita
  #8  
Antiguo 04-09-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
si eso era!!! mi configuracion regional estaba en comas

lo puse en puntos y ya funciona muchas
pero muchas gracias
Responder Con Cita
  #9  
Antiguo 04-09-2008
Avatar de donald shimoda
donald shimoda donald shimoda is offline
Miembro
 
Registrado: jul 2008
Ubicación: Argentino en Santa Cruz de la Sierra
Posts: 1.083
Poder: 17
donald shimoda Va por buen camino
Cita:
Empezado por elmago Ver Mensaje
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
__________________
Donald Shimoda [Team RO] - Blogs: Remobjects Pascal
Responder Con Cita
  #10  
Antiguo 05-09-2008
Memo6015 Memo6015 is offline
Miembro
 
Registrado: ago 2008
Posts: 35
Poder: 0
Memo6015 Va por buen camino
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
Responder Con Cita
  #11  
Antiguo 05-09-2008
ninguno ninguno is offline
Miembro
 
Registrado: sep 2008
Posts: 45
Poder: 0
ninguno Va por buen camino
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;
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
¿como enviar una consulta de un dato a un qreport en c++ builder? soma25 Impresión 0 19-12-2007 06:32:15
¿como enviar una consulta de un dato a un qreport en c++ builder? soma25 C++ Builder 0 14-12-2007 20:47:49
dato real no exacto jsanchez Firebird e Interbase 2 05-09-2007 23:01:20
necesito enviar un dato de un edit a una campo predeterminado en word pipe Varios 1 27-07-2007 06:32:05
Enviar correo con dato adjunto jncrls Internet 1 06-05-2003 15:26:33


La franja horaria es GMT +2. Ahora son las 16:30:57.


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
Copyright 1996-2007 Club Delphi