FTP | CCD | Buscar | Trucos | Trabajo | Foros |
#1
|
|||
|
|||
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"); 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. |
#2
|
||||
|
||||
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. |
#3
|
|||
|
|||
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.. |
#4
|
||||
|
||||
Cita:
Código:
double ID1 = DBEdit3->Text.ToDouble(); //ANIO Saludos. |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
¿Que tipo de separador decimal usas?
Mira este ejemplo: Esto funciona: Código:
DecimalSeparator = ','; double d = String("1,2").ToDouble(); Código:
DecimalSeparator = '.'; double d = String("1,2").ToDouble(); Saludos. |
#7
|
|||
|
|||
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(); |
#8
|
|||
|
|||
Cita:
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.... Saludos |
#9
|
|||
|
|||
Cita:
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(); hay algun error en el codigo?..o algo?.. Saludos.. |
#10
|
|||
|
|||
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"); |
#11
|
|||
|
|||
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"); |
#12
|
|||
|
|||
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. |
#13
|
|||
|
|||
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??, |
#14
|
|||
|
|||
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.
|
#15
|
||||
|
||||
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:
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 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
|
#16
|
|||
|
|||
se los cambie y siguio con lo mismo...
|
#17
|
|||
|
|||
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 |
#18
|
||||
|
||||
Intenta Cambiar esta parte
Cita:
Cita:
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7
|
#19
|
|||
|
|||
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 |
Herramientas | Buscar en Tema |
Desplegado | |
|
|
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 |
|