Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   Error al guardar Número Telefónico (https://www.clubdelphi.com/foros/showthread.php?t=91330)

koalasoft 05-01-2017 10:10:44

Error al guardar Número Telefónico
 
buenas ..

Pues ese es el detalle, intento guardar en una tabla el valor de un número telefónico con el clasico código:

Código:

Table1.Open;
try
Table1.FieldByName('TEL_CL').AsInteger :=StrToInt(Edit1.Text);
finally
Table1.Post;
end;

Si guardo un valor por ejemplo: 1234567890, si lo guarda sin problema, pero si quiero agregar un valor por ejemplo: 9384568579, me envía un mensaje de error: "raised exception class EConvertError whit message "9384568579" is not a valid integer value"

El campo TEL_CL en la BD lo tengo de tipo Numérico.

Intenté de igual forma usar una variable para mayor rango de número:

Código:

Var
 TEL  : Int64;

begin
TEL: = =StrToInt(Edit1.Text)
Table1.Open;
try
Table1.FieldByName('TEL_CL').AsInteger :TEL;
finally
Table1.Post;
end;

Alguna idea por que ese valor no me lo acepta?

Casimiro Notevi 05-01-2017 11:26:24

Pues porque ese valor excede al máximo de un número entero.

Neftali [Germán.Estévez] 05-01-2017 11:51:51

Prueba a utilizar esto:

Código Delphi [-]
  Table1.FieldByName('TEL_CL').AsString := TEL;

AgustinOrtu 05-01-2017 12:03:08

Yo usaría StrToInt64 para convertir el valor

Casimiro Notevi 05-01-2017 12:54:44

Es que habría que saber también qué tipo de integer usa la base de datos ¿access?

Neftali [Germán.Estévez] 05-01-2017 13:36:46

Habría que aclarar:

1) Qué tipo hay en la Base de Datos y qué tipo debe ser.
2) Qué tipo de dato tiene la variable y qué tipo debe ser.
3) Cómo asignar los valores (porque si se asigna como AsInteger va a fallar).

La asignación de AsInteger usa el tipo LongInt:
Código Delphi [-]
function GetAsInteger: Longint; virtual;

Que según la ayuda está definido así:
Cita:

LongInt -2147483648..2147483647 Signed 32-bit
Habría que usar AsLargeInt, que usa LargeInt=Int64 definido como:

Cita:

Int64 -2^63..2^63-1 Signed 64-bit

koalasoft 05-01-2017 17:51:33

Cita:

Empezado por Neftali (Mensaje 512194)
Prueba a utilizar esto:

Código Delphi [-]
  Table1.FieldByName('TEL_CL').AsString := TEL;

Muestra "Incompatible type String and Int64"

Gracias!!

koalasoft 05-01-2017 17:55:18

Cita:

Empezado por AgustinOrtu (Mensaje 512195)
Yo usaría StrToInt64 para convertir el valor

Si lo guarda pero al consultar ese valor guarda otro datos diferente.. Por ejemplo guarde el numero 9383869090, lo guardo y al consultarlo guardo el número: 793934498

mamcx 05-01-2017 18:25:19

Aparte de esto, un telefono se debe guardar como texto, no solo porque hay "números" pocos usuales (ej: +71 333, o *555)

Si no porque ademas, no tiene sentido preguntar "Sacame el promedio de la columna teléfono".

koalasoft 05-01-2017 19:07:36

Cita:

Empezado por mamcx (Mensaje 512203)
Aparte de esto, un telefono se debe guardar como texto, no solo porque hay "números" pocos usuales (ej: +71 333, o *555)

Si no porque ademas, no tiene sentido preguntar "Sacame el promedio de la columna teléfono".

Muchas gracias por el consejo !! ..

AgustinOrtu 05-01-2017 23:28:45

Cita:

Empezado por mamcx (Mensaje 512203)
Aparte de esto, un telefono se debe guardar como texto, no solo porque hay "números" pocos usuales (ej: +71 333, o *555)

Si no porque ademas, no tiene sentido preguntar "Sacame el promedio de la columna teléfono".

Yo me fui a dormir reflexionando justamente sobre este tema. El que los datos "sean todos numeros" no implica que se deban almacenar en un tipo de datos numerico (mas alla de tu correcta observacion, los telefonos pueden contener caracteres no numericos), sino que la decision esta mas ligada a lo que voy a hacer con los datos.

Los numeros "estan buenos" para: identificar algo(porque las comparaciones sobre numeros son muchisimo mas rapidas que las de string), calcular sumas, promedios, estadisticas,... el string es mas "permisivo" (en realidad es super permisivo, admite cualquier cosa, el unico limite es el tamaño del campo) pero tambien tiene algo interesante, que son las busquedas parciales. Cualquier motor SQL te permite implementar busquedas con "LIKE" y esto para los telefonos en algunos casos puede ser util (ie. buscar todos los telefonos que comienzan con "0800")

koalasoft 06-01-2017 01:32:31

Cita:

Empezado por AgustinOrtu (Mensaje 512206)
Los numeros "estan buenos" para: identificar algo(porque las comparaciones sobre numeros son muchisimo mas rapidas que las de string), calcular sumas, promedios, estadisticas,... el string es mas "permisivo" (en realidad es super permisivo, admite cualquier cosa, el unico limite es el tamaño del campo) pero tambien tiene algo interesante, que son las busquedas parciales. Cualquier motor SQL te permite implementar busquedas con "LIKE" y esto para los telefonos en algunos casos puede ser util (ie. buscar todos los telefonos que comienzan con "0800")

Efectivamente, ese tipo de búsqueda es interesante al igual que si ns piden "todas los numero locales de los móvil que inicien en "044" o "045"

Saludos !!


La franja horaria es GMT +2. Ahora son las 03:04:18.

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