Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
Sugerencias?...

Hola amigos, me tope con un problema,veran..

en mi aplicacion, necesito insertar unos datos en una tabla con el update, eso me funcionaba cuando le escribia unos numeros, pero ahora, se tiene que insertar el resultado que se obtenga de una serie de operaciones antes, esas si se hacen bien, el problema es cuando quiero actualizar me da este error:

"error converting data type varchar to float"

los datos de la tabla estan en float..aunque creoo que ya se donde esta mi error..

despues de hacer las operaciones, esto es lo que tengo:


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


 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 = '"+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....

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


  ShowMessage("LISTO");
yo pienso que mi error esta en que los datos ID,P,...etc, los tengo como AnsiString, y al querer insertarlos me da el error, porque el resultado de las operaciones es con decimales (29.334498760123).
Quise corregirlo declarandolo como float, pero me marcaba varios errores..


aqui les dejo una imagen del programa:



los resultados con todos los decimales son los que quiero insertar en la tabla..


creo que el error es porque quiero insertar los datos con decimal a una tabla donde esta definido como float..que podre hacer?, cambiar el tipo de dato en la tabla?, o hacer algo en codigo?



de antemano agradezco su atencion..


un saludo..

Última edición por Bare fecha: 02-03-2010 a las 06:32:00.
Responder Con Cita
  #2  
Antiguo 02-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
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
  #3  
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
  #4  
Antiguo 03-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
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
  #5  
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
  #6  
Antiguo 04-03-2010
Avatar de escafandra
[escafandra] escafandra is offline
Miembro Premium
 
Registrado: nov 2007
Posts: 2.197
Poder: 20
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
  #7  
Antiguo 04-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_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
  #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 _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
  #9  
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
  #10  
Antiguo 05-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_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
  #11  
Antiguo 05-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
que tal cero, le puse el codigo y no dio errores, pero al ejecutarlo me decia que no encontraba el parametro 3:



aqui te dejo el codigo, para ver si le encuentras algun anomalidad..


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 = :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("ID1")->Value=ID1;
ADODataSet2->Parameters->ParamByName("P1")->Value=P1;
ADODataSet2->Parameters->ParamByName("ID2")->Value=ID2;
ADODataSet2->Parameters->ParamByName("P2")->Value=P2;
ADODataSet2->Parameters->ParamByName("ID3")->Value=ID3;
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");
Saludos.
Responder Con Cita
  #12  
Antiguo 05-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Es porque por error no puse el espacio entre el parametro3 y la consulta que sigue, solo agrega un espacio ahi:
Código:
 
...
    "  Localidad = :parametro3"
    "  'SELECT * FROM DiabetesMellitus_AnualMunicipios" //aqui es donde me falto el espacio
;

Última edición por _cero_ fecha: 05-03-2010 a las 07:37:48. Razón: Sobraba código.
Responder Con Cita
  #13  
Antiguo 06-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
ya se lo puse y ahora me salio este error...






segun lo que entendi del error, los decimales que da son demasiados, pero
no lo entiendo, en otra aplicacion que tengo, le ingrese un valor con mas decimales que los que hay aqui y no me dio error...
quiza por que en aquella aplicacion le meto los datos desde edits simples, y en esta lo hago con DBEdits??..., o que sera??,

Responder Con Cita
  #14  
Antiguo 06-03-2010
_cero_ _cero_ is offline
Miembro
 
Registrado: abr 2007
Posts: 147
Poder: 18
_cero_ Va por buen camino
Pues está confuso, intenta cambiar los tipos de las variables “parametro, parametro2, parametro3” a double o al tipo de dato del campo en la tabla, porque según entiendo está dando un error de tipos no de longitudes.
Responder Con Cita
  #15  
Antiguo 06-03-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow Sólo para aclarar el asunto

Yo trabajo con la versión 6 de C++Builder y segun la ayuda ,el componente TADODataSet sólo sirve para selecionar datos(Select) y no para Actualizar(Update) o para Borrar(Delete)
Textualmente la ayuda dice así:
Cita:
De la ayuda de C++Builder 6 >
...
Use the TADODataSet component's CommandText property to retrieve the dataset, specifying either a table name or an SQL statement (SELECT only ). TADODataSet is not capable of issuing Data Manipulation Language (DML) SQL statements that do not return result sets (like DELETE, INSERT, and UPDATE). For this use a component like TADOCommand or TADOQuery.
En otras palabras lo que debes usar es un componente TADOQuery..
Ahh.. y otra cosa ..segun observo en lo personal tu Consulta SQL no la entiendo , ya que al final de la consulta estas agregando un
Código SQL [-]
...
Select * FROM DiabetesMellutis_AnualMunicipios; 
lo cual no me cuadra con qué propósito haces eso; aparte que en ningun momento veo que estes concatenando (para concatenar String se usa el simbolo "+") los pedazos(por así decirlo) de la consulta SQL..
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #16  
Antiguo 07-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
Pues está confuso, intenta cambiar los tipos de las variables “parametro, parametro2, parametro3” a double o al tipo de dato del campo en la tabla, porque según entiendo está dando un error de tipos no de longitudes.
se los cambie y siguio con lo mismo...
Responder Con Cita
  #17  
Antiguo 07-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
Cita:
Empezado por rgstuamigo Ver Mensaje

En otras palabras lo que debes usar es un componente TADOQuery..

Que tal, segui tu consejo y siguio con lo mismo, me sigue marcando el error de que no encuentra el parametro, aqui te dejo el codigo...

Código:
AnsiString parametro,parametro2,parametro3;
double ID1,P1,ID2,P2,ID3,P3,ID4,IDG;



ID1 = DBEdit3->Text.ToDouble();    //LOCALIDAD
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();



ADOQuery1->SQL->Text=

"UPDATE"
    "  DiabetesMellitus_AnualMunicipios"
    " SET"
    "  ID_Control = :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"
    "  Localidad = :parametro3"
    "' SELECT * FROM DiabetesMellitus_AnualMunicipios"
;






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



Por alguna razon, la aplicacion le manda los datos a la base como varchar, y como el campo esta en float, me marca el error.
ahorita le cambie el tipo de dato a varchar en la tabla y asi si me actualizo...:S.
No hay alguna manera de decirle que me cambie el tipo de dato a float antes de hacer el update, y asi asegurarme de mandar los datos como float?

Saludos

Última edición por Bare fecha: 08-03-2010 a las 03:32:15. Razón: codigo erroneo
Responder Con Cita
  #18  
Antiguo 10-03-2010
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Arrow

Intenta Cambiar esta parte
Cita:
...
ID1 = DBEdit3->Text.ToDouble(); //LOCALIDAD
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();
...
por esta otra :
Cita:
...
ID1 = StrToFloat(DBEdit3->Text); //LOCALIDAD
P1 = StrToFloat(DBEdit4->Text); //TRIMESTRE
ID2 = StrToFloat(DBEdit7->Text); //LOCALIDAD
P2 = StrToFloat(DBEdit8->Text); //ANO
ID3 = StrToFloat(DBEdit11->Text);//LOCALIDAD
P3 = StrToFloat(DBEdit15->Text); //ANUAL
ID4 = StrToFloat(DBEdit14->Text); //CASOS
IDG = StrToFloat(DBEdit16->Text);
...
Y prueba de nuevo y nos comentas....
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
Responder Con Cita
  #19  
Antiguo 11-03-2010
Bare Bare is offline
Miembro
 
Registrado: feb 2010
Posts: 29
Poder: 0
Bare Va por buen camino
que tal, se lo cambie y siguio con lo mismo...
pero entre tanto meterme con este codigo no me di cuenta de que no es necesario que inserte los datos como float, ya que no voy a hacer operaciones matematicas con ellos, asi que creo que mi problema se resolvio.......

asi que primero me disculpo por tantas preguntas, y les agradezco su tiempo y paciencia....
aprendi varias cosas, y una de ellas fue el primero analizar bien y recurrir a su ayuda cuando sea realmente necesario...


a todos ustedes, muchas gracias por todo...

nos seguimos leyendo en el foro..

Saludos
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
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 11:28:47.


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