PDA

Ver la Versión Completa : Truncar campo de Tabla con Datos cargados???


ungrande87
24-02-2012, 02:59:32
Hola a todos, ando necesitando ayuda en lo siguiente: Estoy trabajando en Delphi 7 con una base de datos en InterBase, mi problema es que tengo que truncar un campo de una tabla que es de 255 caracteres y pasar dicho campo a 64 pero no le encuentro la vuelta a como hacerlo porque ya probe con la siguiente sentencia y me tira error lo mismo. Cabe destacar que ya contiene registros cargados que sobrepasan los 64 caracteres.

Update Clientes

Set Email SUBSTR(Email,1,64)

Agradeceria muchisimo a quien pueda ayudarme.

Gracias

marcoszorrilla
24-02-2012, 07:05:38
Update Clientes

Set Email = SUBSTR(Email,1,64)

Un Saludo.

Casimiro Notevi
24-02-2012, 09:00:48
Agradeceria muchisimo a quien pueda ayudarme.Gracias

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración.

ungrande87
24-02-2012, 13:17:09
Código SQL [-] (http://www.clubdelphi.com/foros/#)Update Clientes

Set Email = SUBSTR(Email,1,64)




Un Saludo.

Amigo ya probe con esa funcion en realidad habia probado antes nada mas que en el tema me olvide del = pero exactamente como yo lo hacia incluso probe con el SUBSTRING pero me sigue diciendo que no reconoce la function. Espero que puedas ayudarme

marcoszorrilla
24-02-2012, 15:13:45
Update Clientes Set Email = SUBSTR(Email From 1 For 64)

Un Saludo.

ungrande87
24-02-2012, 19:53:14
Código SQL [-] (http://www.clubdelphi.com/foros/#)Update Clientes Set Email = SUBSTR(Email From 1 For 64)



Un Saludo.
sigue sin funcionarme :(.

Aclaro algo que me olvide y lo mejor es por eso que no me funciona lo que me dicen, el campo que quiero modificar tiene datos cargados y pertenece a un dominio xxxx de 255 caracteres, basicamente lo que quiero hacer es truncar los datos del campo Email a 64 caracteres para eso tengo un dominio tambien creado de 64 caracteres, lo que hacia antes era :

ALTER TABLE "CLIENTES" ALTER COLUMN "EMAIL" TYPE XXX;

pero lo mismo me tira este mensaje:

Unsuccessful metadata update
New size specified for column EMAIL must be at least 255 characters
Statement: ALTER TABLE "CLIENTES" ALTER COLUMN "EMAIL" TYPE XXX

despues de probar eso que escribi recien decidi acudir al foro, pero todavia no le puedo econtrar la vuelta.

Saludos y espero que puedan ayudarme si necesitan mas datos para poder darme una mano avisen.

Casimiro Notevi
24-02-2012, 20:22:27
Creo que el sql que ha puesto marcoszorrilla no debe darte ningún error.

ungrande87
24-02-2012, 20:40:01
Creo que el sql que ha puesto marcoszorrilla no debe darte ningún error.
Casimiro sigue sin funcionarme me dice que no existe la funcion SUBSTR probe con SUBSTRING y nada tampoco, buscando por otros medios me dijero que tenia que declarar dicha funcion entonces hize lo siguiente:

DECLARE EXTERNAL FUNCTION substr
CSTRING(255), SMALLINT, SMALLINT
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'
pero sigue sin funcionarme :(.

guillotmarc
24-02-2012, 21:12:20
Creo que el sql que ha puesto marcoszorrilla no debe darte ningún error.

El problema es que parece ser que usa Interbase y no Firebird (SUBSTRING es una función interna que se añadió en Firebird 1.5, pero no sé cual debe ser el equivalente en Interbase, si existe).

guillotmarc
24-02-2012, 21:13:58
Casimiro sigue sin funcionarme me dice que no existe la funcion SUBSTR probe con SUBSTRING y nada tampoco, buscando por otros medios me dijero que tenia que declarar dicha funcion entonces hize lo siguiente:

DECLARE EXTERNAL FUNCTION substr
CSTRING(255), SMALLINT, SMALLINT
RETURNS CSTRING(255) FREE_IT
ENTRY_POINT 'IB_UDF_substr' MODULE_NAME 'ib_udf'

pero sigue sin funcionarme :(.

Esto es declarar una función existente en una DLL externa, para poder usarla dentro de Interbase.

Para poder usar esta declaración, antes tienes que copiar esa librería ib_udf.dll a la carpeta \udf de tu Servidor Interbase.

Saludos.

Casimiro Notevi
24-02-2012, 21:14:19
Entonce es cuestión de mirar la documentación para ver cómo se llama esa función en interbase.

ungrande87
24-02-2012, 21:19:31
Entonce es cuestión de mirar la documentación para ver cómo se llama esa función en interbase.
Disculpa mi ignorancia pero hace menos de 3 dias que estoy usando Interbase, cuales podrian ser los posibles nombre de la funcion similar??
Y desde ya muchisimas gracias por todo el trabajo que brindas al Foro...

Casimiro Notevi
24-02-2012, 21:52:08
No uso interbase desde 1999, cuando salió firebird.
Si estás obligado a usar interbase, no sé, busca por palabras parecidas, no creo que sea muy diferente.

ecfisa
24-02-2012, 22:34:36
cuales podrian ser los posibles nombre de la funcion similar??

Hola.

Revisá si en este [artículo (http://edn.embarcadero.com/article/images/26126/extending_interbase_with_user_defined_functions.pdf)] encontrás lo que estás buscando.

Un saludo.

Edito: Aunque al parecer, confirma que efectivamente, el nombre sería substr.

RONPABLO
26-02-2012, 21:42:01
tiene que tener en cuenta que SUBSTR viene en una UDF y está limitada por muy pocos caracteres (creo recordar que solo acepta 180), así pues cuando el varchar tiene más de ese número sale error, para solucionar eso en firebird se creo la función substring que es interna y no viene en UDF, y acepta strings muy largos (no se exactamente el valor pero he probado con caracteres superiores a 2000 caracteres)... según leo por ahí en Interbase no existe dicha función, solo se puede usar la de la Udf y esa era la que se usaba en firebird antes y creo que también tendrá el limite del tamaño de caracteres a 180 (180 es lo que se me vienen a la mente, puede ser un poco más, pero no mayor a 250 caracteres)

Casimiro Notevi
26-02-2012, 21:45:57
Pues nada, un programita en delphi que lea el campo, lo recorte y lo guarde. Eso son 5 minutos.

ungrande87
28-02-2012, 15:02:44
Pues nada, un programita en delphi que lea el campo, lo recorte y lo guarde. Eso son 5 minutos.

Lo solucione de esa forma, muchas gracias!!! :)