Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
No muestras que tipo tienen las variables ID1, P1,ID2, P2, ID3, P3, ID4 y IDG.

En tu código se asume que son tipo double, si no es así, ese es el origen de tu error.

Saludos.
Responder Con Cita
  #2  
Antiguo 03-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
lo de text.todouble se lo agregue recien para ver si por eso me marcaba el error, porque arriba estan definidos como ansistring.
ese error solo me lo da cuando quiero meter datos con punto decimal, porque si le meto numeros enteros funciona bien..
no se porque me lo marque,la tabla donde se insertan los datos esta definida como tipo float.....

no entiendo muy bien lo de las variables, las defino como double? o que puedo hacer?...

Saludos..
Responder Con Cita
  #3  
Antiguo 03-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
Cita:
Empezado por Bare Ver Mensaje
....no entiendo muy bien lo de las variables, las defino como double? o que puedo hacer?...
Si:
Código:
double ID1 = DBEdit3->Text.ToDouble();     //ANIO
Ten en cuenta el tipo de separador decimal que tienes definido en el S.O. si es punto o coma, pues a la hora de convertir el valor puedes tener errores de conversión.

Saludos.
Responder Con Cita
  #4  
Antiguo 04-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
que tal escafandra, ya lo defini como double, pero me marca este error:

"Ilegal use of floating point".

el codigo quedo asi:

Código:
AnsiString parametro,parametro2,parametro3;//ID1,P1,ID2,P2,ID3,P3,ID4,IDG;
ADODataSet2->Close();//primero cierro el componente para volver a cargarlo


 parametro = ComboBox1->Text; //ANIO
 parametro3 = ComboBox3->Text; //LOCALIDAD


double ID1 = DBEdit3->Text.ToDouble();     //ANIO
 double P1 = DBEdit4->Text.ToDouble();    //TRIMESTRE
 double ID2 = DBEdit7->Text.ToDouble();    //LOCALIDAD
double P2 = DBEdit8->Text.ToDouble(); //ANO
double ID3 = DBEdit11->Text.ToDouble();//LOCALIDAD
double P3 = DBEdit15->Text.ToDouble(); //ANUAL
double ID4 = DBEdit14->Text.ToDouble(); //CASOS
double IDG = DBEdit16->Text.ToDouble();


 ADODataSet2->CommandText = "  UPDATE DiabetesMellitus_AnualMunicipios  SET ID_Control = '"+ID1+"', P_Control = '"+P1+"',ID_Informacion = '"+ID2+"',P_Informacion = '"+P2+"', ID_Promocion1 = '"+ID3+"', P_Promocion ='"+P3+"', ID_Promocion2 = '"+ID4+"',ID_General = '"+IDG+"'  where Año = '"+parametro+"' AND Localidad = '"+parametro3+"'SELECT * FROM DiabetesMellitus_AnualMunicipios";


       ADODataSet2->Open();//Aca abres la vista....
   //   ADODataSet5->Refresh();

  Tabla_DiabetesAnual->Close();


Tabla_DiabetesAnual->Open();

el error me lo marca aqui...'"+ID1+"', como ahora es de tipo double no se puede usar asi, como se escribe para asignarle esa variable en el campo de la tabla?

y fijate que no me habia fijado eso que mencionabas del separador decimal, yo pensaba que era punto y no es asi..., ..es coma, eso se lo puedo cambiar en builder? o tengo que modificar algo en el sistema?, o se puede dejar asi y meterlo en la tabla de sql?



Saludos
Responder Con Cita
  #5  
Antiguo 04-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.210
Poder: 22
escafandra Tiene un aura espectacularescafandra Tiene un aura espectacular
¿Que tipo de separador decimal usas?

Mira este ejemplo:
Esto funciona:
Código:
    
DecimalSeparator = ',';
 double d = String("1,2").ToDouble();
Esto da un error:
Código:
    
DecimalSeparator = '.';
double d = String("1,2").ToDouble();

Saludos.
Responder Con Cita
  #6  
Antiguo 04-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 20
_cero_ Va por buen camino
Thumbs up

Perdón que me meta pero el error es “Illegal use of floating point”?

Si es así se debe a que tratas de combinar tipos doublé con una cadena de texto, pon ...'"+String(ID1)+"'… y esto aslo con todas las variables tipo float, int o doublé que mescles con cadenas.

Por otro lado porque no usas parámetros en las consultas no es el modo más simple pero es el modo más efectivo de garantizar que los datos que introduzcas son del tipo que quieres y que el codigo se vea ordenado, por ejemplo.

Código:
    ad->Close();

    ad->CommandText=
        "UPDATE"
        "  Tabla1"
        " SET"
        "  campo1 = :campo1,"//los parametros se indican con ":" antes del nombre del parametro
        "  campo2 = :campo2"
    ;

    ad->Parameters->ParamByName("campo1")->Value=6; //al darle 6 como valor el ADODataSet da por echo que se trata de un entero.
    ad->Parameters->ParamByName("campo2")->Value=6.2;

    ad->Open();
Responder Con Cita
  #7  
Antiguo 05-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
Cita:
Empezado por _cero_ Ver Mensaje

Por otro lado porque no usas parámetros en las consultas no es el modo más simple pero es el modo más efectivo de garantizar que los datos que introduzcas son del tipo que quieres y que el codigo se vea ordenado, por ejemplo.

Código:
    ad->Close();

    ad->CommandText=
        "UPDATE"
        "  Tabla1"
        " SET"
        "  campo1 = :campo1,"//los parametros se indican con ":" antes del nombre del parametro
        "  campo2 = :campo2"
    ;

    ad->Parameters->ParamByName("campo1")->Value=6; //al darle 6 como valor el ADODataSet da por echo que se trata de un entero.
    ad->Parameters->ParamByName("campo2")->Value=6.2;//tambien le //intente con 6,2 y fue lo mismo.

    ad->Open();
que tal cero, lo intente con lo de los parametros y me marco un error, me decia que el campo "ID_Con" no existia, no se si este mal el codigo, porque ese campo si existe en mi base de datos..

Código:
 ADODataSet2->CommandText = "  UPDATE DiabetesMellitus_AnualMunicipios  SET ID_Con = :ID1, P_Control = '"+String(P1)+"',ID_Informacion = '"+String(ID2)+"',P_Informacion = '"+String(P2)+"', ID_Promocion1 = '"+String(ID3)+"', P_Promocion ='"+String(P3)+"', ID_Promocion2 = '"+String(ID4)+"',ID_General = '"+String(IDG)+"'  where Año = '"+parametro+"' AND Localidad = '"+parametro3+"'SELECT * FROM DiabetesMellitus_AnualMunicipios";

ADODataSet2->Parameters->ParamByName("ID_Con")->Value=6.2; 

       ADODataSet2->Open();//Aca abres la vista....
que estara mal?

Saludos
Responder Con Cita
  #8  
Antiguo 05-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
Cita:
Empezado por escafandra Ver Mensaje
¿Que tipo de separador decimal usas?

Mira este ejemplo:
Esto funciona:
Código:
    
DecimalSeparator = ',';
 double d = String("1,2").ToDouble();
Esto da un error:
Código:
    
DecimalSeparator = '.';
double d = String("1,2").ToDouble();
Saludos.
que tal escafandra, uso la coma.

implemente lo que me sugeriste,y me marco el mismo error..




asi quedo el codigo:

Código:
//--------------------------------------------------------------------
//-------------ACTUALIZAR DATOS---------------------------------------
AnsiString parametro,parametro2,parametro3;//,ID1,P1,ID2,P2,ID3,P3,ID4,IDG;
ADODataSet2->Close();//primero cierro el componente para volver a cargarlo


 parametro = ComboBox1->Text; //ANIO
 parametro3 = ComboBox3->Text; //LOCALIDAD

 DecimalSeparator = ',';
 double ID1 = String("1,2").ToDouble();
 double P1 = String("1,2").ToDouble();
 double ID2 = String("1,2").ToDouble();
 double P2 = String("1,2").ToDouble();
 double ID3 = String("1,2").ToDouble();
 double P3 = String("1,2").ToDouble();
 double ID4 = String("1,2").ToDouble();
 double IDG = String("1,2").ToDouble();

 ID1 = DBEdit3->Text.ToDouble();     //ANIO
 P1 = DBEdit4->Text.ToDouble();    //TRIMESTRE
 ID2 = DBEdit7->Text.ToDouble();    //LOCALIDAD
 P2 = DBEdit8->Text.ToDouble(); //ANO
 ID3 = DBEdit11->Text.ToDouble();//LOCALIDAD
 P3 = DBEdit15->Text.ToDouble(); //ANUAL
 ID4 = DBEdit14->Text.ToDouble(); //CASOS
 IDG = DBEdit16->Text.ToDouble();


 ADODataSet2->CommandText = "  UPDATE DiabetesMellitus_AnualMunicipios  SET ID_Control = '"+String(ID1)+"', P_Control = '"+String(P1)+"',ID_Informacion = '"+String(ID2)+"',P_Informacion = '"+String(P2)+"', ID_Promocion1 = '"+String(ID3)+"', P_Promocion ='"+String(P3)+"', ID_Promocion2 = '"+String(ID4)+"',ID_General = '"+String(IDG)+"'  where Año = '"+parametro+"' AND Localidad = '"+parametro3+"'SELECT * FROM DiabetesMellitus_AnualMunicipios";




       ADODataSet2->Open();//Aca abres la vista....
   //   ADODataSet5->Refresh();

  Tabla_DiabetesAnual->Close();


Tabla_DiabetesAnual->Open();
la sugerencia de cero funciono muy bien...,y tuve que ponerle lo del string porque si no me marcaba el error del uso ilegal del float... pero sigo sin poder insertar los datos a la tabla....


hay algun error en el codigo?..o algo?..

Saludos..
Responder Con Cita
  #9  
Antiguo 05-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 20
_cero_ Va por buen camino
Thumbs up

La razón del porque no te funciono, es que el parámetro que pusiste, no se llamaba “ID_Con”, si no ”ID1” ya que el nombre del parámetro es el que va después de “:” teniendo en cuenta tu código quedaría más o menos así:
Código:
String parametro,parametro2,parametro3;
double ID1,P1,ID2,P2,ID3,P3,ID4,IDG;
ADODataSet2->Close();

parametro = ComboBox1->Text;
parametro3 = ComboBox3->Text;

double numm=0;
TryStrToFloat(DBEdit3->Text, numm); //sugiero aser esto para evitar errores cuando el edit este vacio por ejemplo
D1 = numm;

//aunque esta forma rtambien es valida
P1 = DBEdit4->Text.ToDouble();    //TRIMESTRE
ID2 = DBEdit7->Text.ToDouble();    //LOCALIDAD
P2 = DBEdit8->Text.ToDouble(); //ANO
ID3 = DBEdit11->Text.ToDouble();//LOCALIDAD
P3 = DBEdit15->Text.ToDouble(); //ANUAL
ID4 = DBEdit14->Text.ToDouble(); //CASOS
IDG = DBEdit16->Text.ToDouble();

ADODataSet2->CommandText =
    "UPDATE"
    "  DiabetesMellitus_AnualMunicipios"
    " SET"
    "  ID_Control = "+String(ID1)+"," //tambien se puede pero lo veo mas confuso y/o desordenado
    "  P_Control = :P1,"
    "  ID_Informacion = :ID2,"
    "  P_Informacion = :P2,"
    "  ID_Promocion1 = :ID3,"
    "  P_Promocion = :P3,"
    "  ID_Promocion2 = :ID4,"
    "  ID_General = :IDG"
    " WHERE"
    "  Año = :parametro AND"
    "  Localidad = :parametro3"
    "'SELECT * FROM DiabetesMellitus_AnualMunicipios"
;

ADODataSet2->Parameters->ParamByName("P1")->Value=P1;
ADODataSet2->Parameters->ParamByName("ID2")->Value=ID2;
ADODataSet2->Parameters->ParamByName("P2")->Value=P2;
ADODataSet2->Parameters->ParamByName("P3")->Value=P3;
ADODataSet2->Parameters->ParamByName("ID4")->Value=ID4;
ADODataSet2->Parameters->ParamByName("IDG")->Value=IDG;
ADODataSet2->Parameters->ParamByName("parametro")->Value=parametro;
ADODataSet2->Parameters->ParamByName("parametro3")->Value=parametro3;

ADODataSet2->Open();

Tabla_DiabetesAnual->Close();
Tabla_DiabetesAnual->Open();

ShowMessage("LISTO");
Pd. Maneja sabiamente la función “TryStrToFloat” ya que te devuelve un 0 si el valor que le proporcionas en el edit no es un decimal o entero, pero esto es como comerse un error y todos sabemos que hay que ser cuidados@s con el manejo de errores.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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
Sugerencias a CodeGear / Embarcadero AngelV Noticias 73 05-08-2014 19:40:41
necesito sugerencias felixgo Firebird e Interbase 7 13-03-2007 15:06:40
Sugerencias con las INDY diegofhernando Internet 2 09-01-2006 21:06:15
Necesito sugerencias BetoAlonso Internet 5 18-10-2005 22:52:53


La franja horaria es GMT +2. Ahora son las 23:30:26.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi