Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-07-2007
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Insertar y/o modificar un campo con decimales

Hola a todos,

Nuevamente necesito de vosotros para seguir adelante.

Desde hace un tiempo me he acostumbrado a hacer las inserciones/modificacioens en las bases de datos sin utilizar campos permanentes, simplemente monto la sentencia SQL antes de ejecutarla y le añado los campos que se insertan o modifican:

Código:
SqlText:='INSERT INTO Proyectos (Descripcion, Importe) VALUES ('QuotedStr(AnsiUpperCase(Edit2.Text)) 
+ ', ' + CurrencyEdit1.Text + ')';  // El importe es numérico por eso no va entre comillas 
 ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(SqlText);
try
   ADOQuery1.ExecSQL;
except
   ShowMessage('Error de ejecución en la sentecia SQL'+#13+sqltext);
end;
Realmente me resulta cómodo pero tengo el problema del uso de decimales, por ejemplo, un insert con la sentencia anterior sería:

INSERT INTO Proyectos (Descripcion, Importe) VALUES ('PRUEBA', 125,85)
como podeís ver, la coma decimal del importe me convierte ese importe en dos valores para la sentencia SQL y da error (porque tengo dos campos y tres valores).

¿Alguién me puede dar un consejo?
Muchas gracias anticipadas.
__________________
Rafita.
Responder Con Cita
  #2  
Antiguo 27-07-2007
Mick Mick is offline
Miembro
 
Registrado: may 2003
Posts: 405
Poder: 21
Mick Va por buen camino
Salva algunas casos muy especiales nunca se deben montar las queries de ese modo, siempre siempre hay que usar parametros, por motivos de eficiencia y seguridad.

Saludos
Responder Con Cita
  #3  
Antiguo 27-07-2007
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Solucionado

Era simple pero no se me ocurría, basta con sustituir las comas por puntos en el momento de preparar la sentencia.

Donde ponía CurrencyEdit1, sustituirlo por
StringReplace(CurrencyEdit1.Text, ',', '.', [rfReplaceAll])

Así todo funciona perfectamente.

supongo que habrá algún otro método más ajustado pero el caso es que funcione.

Saludos a todos.
__________________
Rafita.
Responder Con Cita
  #4  
Antiguo 27-07-2007
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
Si hay un método mejor, utilizar parámetros.
Si utilizaras parámetros no tendrías que hacer eso truquitos para guardar decimales.

Y tambien podrías ahorrarte la variable SQLText.

Ejemplo:

Código Delphi [-]
With AdoQuery1 do begin
 If Active then Close;
 SQL.Clear;
 SQL.Add('INSERT INTO Proyectos (Descripcion, Importe)');
 SQL.Add('VALUES (:Descripcion, :Importe)');
 Parameters.ParamByName('Descripcion').AsString := Edit2.Text;
 Parameters.paramByName('Importe').AsCurrency := CurrencyEdit1.AsCurrency;
 Try
  ExecSQL;
 Except on E:EDBEngineError do begin
   If E.ErrorCode = 902 then  //902 es solo como ejemplo
     showmessgae('error 902'+' en:'+SQL.Text');
  end; //Except
 end; //Try
end; //with
__________________

Responder Con Cita
  #5  
Antiguo 27-07-2007
Avatar de Gabo
[Gabo] Gabo is offline
Miembro Premium
 
Registrado: mar 2007
Ubicación: Murcia (España)
Posts: 684
Poder: 18
Gabo Va por buen camino
Cita:
Si hay un método mejor, utilizar parámetros.
Si utilizaras parámetros no tendrías que hacer eso truquitos para guardar decimales.

Y tambien podrías ahorrarte la variable SQLText.
Y tanto que es mejor, recuerdo cuando empecé y hacía lo que nuestro amigo... Claro, cuando eran un par de controles valía, pero, ¿y si eran 10 o más?, el enredo que se formaba de concatenaciones (+ " ' ,). Eso es muy lioso y de un golpe de vista dificil de ver cuando lo revisas al tiempo despues...

Por cierto, esto me recuerda este artículo ...

http://www.clubdelphi.com/foros/show...en+programador
Responder Con Cita
  #6  
Antiguo 30-07-2007
rafita rafita is offline
Miembro
 
Registrado: ago 2003
Ubicación: Cuenca- España.
Posts: 309
Poder: 21
rafita Va por buen camino
Muchas gracias a todos por vuestras aportaciones.
Disculpad la tardanza pero este fin de semana ha sido "off line".

Los motivos de montar las sentencias así son dos: primero mi falta de conocimiento, y segundo el que un compañero empezó a hacerlo así.

Inicialmente me definía los campos de forma permanente, pero me complicaba la vida tener que introducir una sentencia sólo para poder definir los campos, aunque tenía sus ventajas como ponerles las propiedades a los campos (título, formato, ... ). Además, mis compañeros no controlaban esta forma y no sabían modificar los que yo creaba, así que lo mejor me acoplé yo a su forma.

Le agradezco a ContraVeneno que haya traducido mi codigo poniendole parámetros. Tomo nota y me pongo a cambiar el código que estoy haciendo.

Y también me tomo nota del artículo. Todo lo que sea aprender me parece bien (aunque me pilla viejo).

Saludos.
__________________
Rafita.
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
insertar o modificar un registro completo a otro osvrom SQL 10 23-01-2013 20:10:14
Como insertar, eliminar y modificar en c#? danytorres .NET 2 09-05-2006 22:29:47
lentitud al Modificar/Insertar kukinn Conexión con bases de datos 3 23-03-2004 09:37:57
Problema el insertar/modificar registro ing_alsaac Conexión con bases de datos 0 29-02-2004 09:18:15
ejemplo para insertar,modificar con tdataset marcelofabiani Firebird e Interbase 1 03-06-2003 18:44:06


La franja horaria es GMT +2. Ahora son las 23:25:21.


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