 |
Club Builder Foro de C++Builder en español
|
| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Vie 02 Dic, 2005 5:21 pm Asunto: Double y floats |
|
|
Buenas!
Alguin me puede ayudar, tengo un problema a la hora de registrar numeros con comas.
Yo intento dar de alta información que contiene numeros como por ejemplo 1,5 -0,3 o sea numeros con decimales.
El problema llega cuando voy a dar de alta una graduacion de unas gafas. Yo e definido en la BD (access 2000) los numeros como dobles y entonces en el Builder no ser que ponerle al pasarle la información a la accion. (StrToFloat?? no ser) Al recibirla la cojo como double:
AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
double ESd,double ESe,double ADd,double ADe,double MDd,double
MDe,double AVscd,double AVsce,double AVud,double AVue)
Pero en el FieldByName no me sale el tipico AsDouble. Entonces no ser como montarmelo. Al final le puse AsFloat. Me compilaba pero me petaba al pasarlo en la BD.
El error que me dice es:
"1.4 isn't a integer"
Alguin me podria ayudar a aclararme??
Muchas gracias! |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Vie 02 Dic, 2005 7:42 pm Asunto: |
|
|
Que tal shumi
| Cita: |
AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
double ESd,double ESe,double ADd,double ADe,double MDd,double
MDe,double AVscd,double AVsce,double AVud,double AVue)
|
Por lo que veo, tu función tiene el prímer parámeto declarado como entero. Posiblemente por eso te manda ese error, prueba cambiarlo a double.
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Mar 06 Dic, 2005 12:45 pm Asunto: schumi |
|
|
| Buenas! El entero este es pq le paso el codigo del ciente. Si no no me podrias referenciar a nadie. |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mar 06 Dic, 2005 4:20 pm Asunto: |
|
|
Puedes agregar parte de tu código donde mandas a traer tu función para ver cómo estas enviando los parámetros?.
Saludos _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Mie 07 Dic, 2005 12:47 pm Asunto: |
|
|
Buenas de nuevo!
Aquí pongo el codigo al pasar la info a la acción:
| Código: | else
{
OG->AltaUll(StrToInt(eCodiCli->Text),
StrToInt(eEixd->Text),StrToInt(eEixe->Text),StrToInt(eCild->Text),StrToInt(eCile->Text),StrToInt(eEsfd->Text),
StrToInt(eEsfe->Text),StrToInt(eAddd->Text),StrToInt(eAdde->Text),StrToInt(eMDdd->Text),StrToInt(eMDde->Text),
StrToInt(eAVscd->Text),StrToInt(eAVsce->Text),StrToInt(eAVud->Text),StrToInt(eAVue->Text));
|
Y luego en mi objeto tengo la siguiente accion:
| Código: |
void Graduacio::AltaUll(Integer C,double Ed,double Ee,double Cd,double Ce,
double ESd,double ESe,double ADd,double ADe,double MDd,double MDe,
double AVscd,double AVsce,double AVud,double AVue)
{
Global::Alta(DataModule2->UllsLluny); // heretem de l'obj Global
DataModule2->UllsLluny->FieldByName("CodiClie")->AsInteger = C;
DataModule2->UllsLluny->FieldByName("Eixd")->AsInteger = Ed;
DataModule2->UllsLluny->FieldByName("Eixe")->AsInteger = Ee;
DataModule2->UllsLluny->FieldByName("Cild")->AsInteger = Cd;
DataModule2->UllsLluny->FieldByName("Cile")->AsInteger = Ce;
DataModule2->UllsLluny->FieldByName("Esfd")->AsInteger = ESd;
DataModule2->UllsLluny->FieldByName("Esfe")->AsInteger = ESe;
DataModule2->UllsLluny->FieldByName("Addd")->AsInteger = ADd;
DataModule2->UllsLluny->FieldByName("Adde")->AsInteger = ADe;
DataModule2->UllsLluny->FieldByName("MDDd")->AsInteger = MDd;
DataModule2->UllsLluny->FieldByName("MDDe")->AsInteger = MDe;
DataModule2->UllsLluny->FieldByName("AVscd")->AsInteger = AVscd;
DataModule2->UllsLluny->FieldByName("AVsce")->AsInteger = AVsce;
DataModule2->UllsLluny->FieldByName("AVud")->AsInteger = AVud;
DataModule2->UllsLluny->FieldByName("AVue")->AsInteger = AVue;
DataModule2->UllsLluny->Post();
DataModule2->UllsLluny->Close();
}
|
El programa me peta al momento de pasar los valors y no dentro de la ación.
gRACIAS |
|
| Volver arriba |
|
 |
Buildero Master


Registrado: 23 Dic 2003Mensajes: 523Ubicación: Puebla, México
|
Publicado: Mie 07 Dic, 2005 3:35 pm Asunto: |
|
|
Que tal Shumi,
A simple vista todo parece normal.
Por lo que veo no realizas algún proceso adicional con tus datos.
¿Porque no utilizas los controles de datos para realizar tus inserciones? Es decir en lugar de utilizar Edit utiliza DBEdit (es solo una sugerencia).
Y bueno, con el otro tema, creo que tiene que ver con la configuración regional. Tengo entendido que para España los decimales se representan con la coma: (34,56) en el caso de México es con el punto (34.56). Por lo tanto un valor escrito en el Edit (ej 1.4 ) con configuración regional para España marcará error y viceversa.
Saludos. _________________ Quien hace una pregunta teme parecer un ignorante durante cinco minutos, quien no pregunta se mantiene ignorante toda la vida. |
|
| Volver arriba |
|
 |
juanma Cmdr

Registrado: 17 Nov 2005Mensajes: 127Ubicación: Almeria - España
|
Publicado: Mie 07 Dic, 2005 3:42 pm Asunto: |
|
|
Yo lo que veo es que la funcion espera un entero y el resto de parámetros double, y tu la llamas intentando pasar todo enteros (deberias usar el strtofloat)
Al igual que en la asignacion a los campos de la tabla debes usar: AsFloat (si es que realmente quieres guardar decimales). |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mie 07 Dic, 2005 9:21 pm Asunto: |
|
|
Son doubles en la llamada de la funcion pero en la base de datos los tienes como entero, o cuando menos aqui
| Código: |
DataModule2->UllsLluny->FieldByName("Eixd")->AsInteger
|
PD. No seas tan parco en el nombre de tus variables, ponlas normales
EixD=eIdUsuario , ya que sera mas facil el mantenimiento en el futuro. _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Jue 08 Dic, 2005 11:21 am Asunto: |
|
|
Buenas de nuevo!
Primero decir que acepto el comentario de la variables, la verdad es que si, a veces me ago un lio.
Otra cosa, cuando pase el codigo aquí, si que estava en ->AsInteger, pero lo e probada de todas las maneras. Una duda que tengo es que no se si no existe pero a mi no me sale AsDouble o AsDbl o como sea. Lo e probado con AsFloat i tampoco me funcionava. Nose, siguo mirando buestros comentarios y provando.
Gracias |
|
| Volver arriba |
|
 |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Jue 08 Dic, 2005 11:35 am Asunto: |
|
|
Buenas otra vez.
Una especificacion, e puesto en la BD todo como double, pero haber, en la declaracion de la acción le puedo poner double o float. Si pongo float dentro de la acción puedo poner AsFloat pero si pongo double dentro que pongo?? AsFloat?
Ahora estoy viendo que yo introduzco un valor con comas directamente en los registros de la BD i me los conserva pero cuando executo el programa "no me muestra los decimales, ose solo me muestra el entero".
Supongo que aquí hay algun prolema.
Alguien le a pasado lo mismo o sabe que pasa??
Muchisimas gracias |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Dom 11 Dic, 2005 4:42 am Asunto: |
|
|
double dTuDoble=0;
dTuDoble=qry->FieldByName("xxx")->AsFloat; _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
schumi Cdt

Registrado: 12 May 2005Mensajes: 19
|
Publicado: Dom 18 Dic, 2005 12:29 pm Asunto: |
|
|
Buenas! Y e solucionado el problema pero me queda una ultima question, al ser double me escribe el numero con unos 8 digitos de decimales. Puedo determinar que solo me guarde 2 o 3 decimales solo??? Es que si escribo 2.45 el me escrie por ejemplo 2.44444444449 o algo asi. Me gustaria solo que me guardase el 2.45.
Eso es porque és un double?? Sino que tendria que ser,decimal?
Gracias |
|
| Volver arriba |
|
 |
Touchsoftwares Master


Registrado: 16 Dic 2002Mensajes: 869Ubicación: MEXICO Playa del Carmen
|
Publicado: Mar 20 Dic, 2005 3:37 am Asunto: |
|
|
La solucion, por lo menos en mysql fue usar el tipo de campo DECIMAL(8,2)
8 ENTEROS Y 2 DECIMALES _________________ Ing. Gabriel Góngora Navarrete
TouchSoftwares Inc
http://www.touchsoftwares.com |
|
| Volver arriba |
|
 |
|
|
No puedes publicar temas nuevos en este foro No puedes responder a temas en este foro No puedes editar tus mensajes en este foro No puedes borrar tus mensajes en este foro No puedes votar en las encuestas de este foro
|
© 2002–2026 Club Builder · Funciona con phpBB.
|