Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Firebird e Interbase
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 04-03-2005
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
no actualiza un campo correctamente ( decimal)

Hola pues tengo lo siguiente :

TSQLConnection
TSQLQuery ( llamado qryModifica)

con 1 TcurrencyEdit llamado precio

luego tengo la el campo PRECIO el cual es un numeric(15,4)

pues bien actualizo dicho campo de la siguiente manera..

Código:
with datos.qryModifica do begin
  SQL.Add('UPDATE articulos SET PRECIO1 = ''' + precio.Text + '''');
  SQL.Add('WHERE clave = 7507');
  ExecSQL;
  end;
Si le meto por ejemplo : 12,12

en la db se guarda como 1212 ( sin la , )


alguien me puede ayudar?

saludos y gracias..
Responder Con Cita
  #2  
Antiguo 04-03-2005
AdrianD AdrianD is offline
Miembro
 
Registrado: may 2003
Ubicación: San Juan - Argentina
Posts: 113
Poder: 21
AdrianD Va por buen camino
por que cargarlo de esa maner???
Lo mejor seria con un parametro

with datos.qryModifica do begin
SQL.Add('UPDATE articulos SET PRECIO1 = :Precio');
SQL.Add('WHERE clave = 7507');
ParamByName('Precio').AsCurrency := StrToCurr(precio.Text);
ExecSQL;
end;
ExecSQL;
end;
Responder Con Cita
  #3  
Antiguo 04-03-2005
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
gracias AdrianD por contestar

lo que me has indicado funciona la 1º vez ( algo raroo)

no tenía conocimiento de parametros ( para que veas que estoy algo verde xD).


en realidad tengo 3 datos reales en una clase derivada de TField ( QcurrEdit)

la cual me devuelve un valor real con el método Value ( ejemplo : Precio.value)

a la hora de hacer la actualización obtengo un error EdatabaseError parametro 'Descuento' no found.

tengo lo siguiente a la hora de actualizar :


Código:
SQL.Add('UPDATE clientes SET nombre = ''' + txtNombre.Text + ''',');
SQL.Add('RFC = ''' + txtRfc.Text+ ''',');
SQL.Add('CALLE = '''+ Calle.Text + ''',');
SQL.Add('Ciudad = '''+ Ciudad.Text+ ''',');
SQL.Add('LOCALIDAD = '''+ localidad.Text + ''',');
SQL.Add('ESTADO = '''+ estado.text+ ''',');
SQL.Add('CP = ''' + cp.Text + ''',');
SQL.Add('DESCUENTO =  :Descuento '',');
....
...
SQL.Add('LIMITECREDITO = :Credito '',');
SQL.Add('precio =  :Precio ' );
SQL.Add('WHERE clave = ' + IntToStr(iClave));
ParamByName('Descuento').AsString  := FloatToStr(txtDescuento.Value);
ParamByName('Credito').AsString := FloatToStr(txtCredito.Value);
ParamByName('Precio').AsString := FloatToStr(txtPrecio.Value);
ExecSQL;
Close;
Si pudieras orientarme, es que haciendolo directamente ( sin parametros) no se guarda la maldita coma (,)


saludos
Responder Con Cita
  #4  
Antiguo 04-03-2005
AdrianD AdrianD is offline
Miembro
 
Registrado: may 2003
Ubicación: San Juan - Argentina
Posts: 113
Poder: 21
AdrianD Va por buen camino
Vamos al principio:
1- ¿Que componentes usas?
2- ¿Por que cargar el query de esa forma y no hacerlo en tiempo de diceño?
3- si para 2 hay una respuesta valida, antes de volverlo a cargar deberias "limpiarlo" con: datos.qryModifica.SQL.Clear; o algo parecido
Responder Con Cita
  #5  
Antiguo 05-03-2005
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
1- ¿Que componentes usas?

TSQLConnection
TSQLQuery ( llamado qryModifica)

2- ¿Por que cargar el query de esa forma y no hacerlo en tiempo de diceño?

Pq dicho query lo utilizo tb para otros updates de diferentes tablas y en otros forms.


3- aqui no te entiendo.

El problema que tengo es que a la hora de actualizar/insertar el campo precio, no se me actualizan/insertan los decimales ( si le meto 1,2 al hacer el update se guarda como 12)

saludos y espero que me heches una mano, ya que no puedo seguir haciendo cosas sin resolver este problema.

gracias y saludos
Responder Con Cita
  #6  
Antiguo 05-03-2005
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
he estado por ahy y a lo mejor puede ser por culpa de la base de datos

en la propiedad DEFAULT CHARACTER SET;

esta propiedad indica el juego de caracteres que se utiliza

podría poner lo siguiente ?

DEFAULT CHARACTER SET WIN1250;

que opinas ?

saludos
Responder Con Cita
  #7  
Antiguo 05-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
Cita:
Empezado por DynaRoc
lo que me has indicado funciona la 1º vez ( algo raroo)
Cita:
Empezado por AdrianD
3- si para 2 hay una respuesta valida, antes de volverlo a cargar deberias "limpiarlo" con: datos.qryModifica.SQL.Clear; o algo parecido
La primera vez, el sql.text está vacio, por eso funciona, pero la segunda vez que llamas a esa query, ya tiene el sql.text anterior, y lo que estas haciendo es añdiendo sentencias, es decir, la segunda vez, tendrás en el sql algo como esto:

Código SQL [-]
UPDATE articulos SET PRECIO1 = 1500
WHERE clave = 7507
UPDATE articulos SET PRECIO1 = 100
WHERE clave = 250
La primera vez actualizas la clave de 7507 y la segunda vez 250
Te debería dar un error en la sentencia sql.

Solución:
- Antes de hacer el sql.Add pon un sql.Clear

En cuanto a la otra pregunta, puede que la coma la esté tomando como separador de miles en lugar de separador decimal, (que por otra parte es lógico en españa), usa 1.2 en lugar de 1,2

Saludos
Responder Con Cita
  #8  
Antiguo 05-03-2005
DynaRoc DynaRoc is offline
Miembro
 
Registrado: nov 2004
Posts: 12
Poder: 0
DynaRoc Va por buen camino
Cita:
Empezado por Lepe
La primera vez, el sql.text está vacio, por eso funciona, pero la segunda vez que llamas a esa query, ya tiene el sql.text anterior, y lo que estas haciendo es añdiendo sentencias, es decir, la segunda vez, tendrás en el sql algo como esto:

Código SQL [-]
UPDATE articulos SET PRECIO1 = 1500
WHERE clave = 7507
UPDATE articulos SET PRECIO1 = 100
WHERE clave = 250
La primera vez actualizas la clave de 7507 y la segunda vez 250
Te debería dar un error en la sentencia sql.

Solución:
- Antes de hacer el sql.Add pon un sql.Clear
Exacto con eso se soluciona el error a medias

pues como dices ahora ...

Cita:
En cuanto a la otra pregunta, puede que la coma la esté tomando como separador de miles en lugar de separador decimal, (que por otra parte es lógico en españa), usa 1.2 en lugar de 1,2
Pues si, he probado utilizar el punto (.) como separador decimal y funciona, pero esto no es lo que quiero ya que en españa suena mal introducir un número (123123123,12) y se transforme en el QcurrEdit como 123,123,123.12)

Aunque en la DB se guarda correctamente ( 123123123,12)

hombre me gustaría saber como utilizar el separador coma ( ,) como DECIMAL

saludos
Responder Con Cita
  #9  
Antiguo 05-03-2005
Avatar de vic_ia
vic_ia vic_ia is offline
Miembro
 
Registrado: ene 2004
Posts: 238
Poder: 21
vic_ia Va por buen camino
HOLA...

si quieres cambiar esta accion por default en todo el sistema de tu maquina lo que tienes que hacer es entrar a Panel de Control, Configuracion Regional, seleccionar en el primer Tab los formatos generales del idioma/pais o personalizarlos....

si solo te interesa que sea adecuado en tu programa solo necesitas al iniciar tu programa cambiar el valor de :
Código Delphi [-]
DecimalSeparator := ',';
// y correspondientemente
ThousandSeparator := '.'; // o el valor que le quieras dar al separador de miles
espero te sirva...

saludos...
Responder Con Cita
  #10  
Antiguo 06-03-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 28
Lepe Va por buen camino
A la acertada respuesta de Vic_ia solamente añadir que debes hacerlo en el primer Form o datamodule que crees en tu aplicación, en la seccion initialization del mismo, es decir, abajo del todo de la unidad, tienes que añadir:
Código Delphi [-]
initialization
  DecimalSeparator := ',';
  // y correspondientemente
  ThousandSeparator := '.'; // o el valor que le quieras dar al separador de miles

Tu siguiente pregunta será como usar el punto que hay en el teclado numerico como separador decimal..... te veo venir porque me ha pasado, así que te recomiendo este dichoso separador decimal


Saludos

Última edición por Lepe fecha: 06-03-2005 a las 11:33:15.
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


La franja horaria es GMT +2. Ahora son las 05:46:26.


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