¿Cómo modificar datos del campo de una tabla?

Tengo datos en un campo
001-1589
0001-01479
001-004573
Quiero darles el mismo formato a estos datos. Ejemplo
0001-0001589
0001-0001479
0001-0004573
Otro dato: Estos datos están vinculados a un registro ¿Cómo verifico que el cambio sea en el registro correcto?

Gracias por su tiempo

Dios lo Bendiga

Respuesta
1

Haber un poco complicado tu caso

Por que no es igual el numero de dígitos antes del guion los que no están después del guion no hay problema ahora si todos son 0001 seria otra historia

El experto RAVENN me envío este código, supongo que es una macro.

LOCAL lcValor1, lnExtension, lnExt1, lcExpre1, lcValorReal1, lcValorReal2, lcNuevaExp
**--
SELECT tabla
GO TOP
**--Activamos scanner
SCAN
lcValor1 = tabla1.campoaformatear
**--Extension total de la expresión
lnExtension = LEN(lcValor1)
**--
lnExt1 = 1
**--
**--Evaluamos la primera parte de la expresión antes del "-"
FOR i = lnExtension TO 1 STEP -1
lcExpre1 = SUBSTR(lcValor1, lnExt1, 1)
**--Si el carácter es "-"
IF lcExpre1 = "-"
**--Obtenemos parte de la cadena hasta donde
**--delimita el primer guion
lcValorReal1 = SUBSTR(lcValor1, 1, lnExt1 - 1)
**--Rellenamos ceros a la izquierda
lcValorReal1 = PADL(lcValorReal1, 4, "0")
**--Tomamos el resto de la cadena después del guion y rellenamos con ceros
**--a la izquierda.
lcValorReal2 = SUBSTR(lcValor1, lnExt1 + 1, lnExtension - (lnExt1))
lcValorReal2 = PADL(lcValorReal2, 7, "0")
EXIT
ENDIF
**--Recargamos para pasar al siguiente valor
lnExt1 = lnExt1 + 1
ENDFOR

Me podrías explicar ¿Qué es lo que hace?

Muchas gracias por su tiempo

Lo que hace es buscar en el código el - para luego rellenar con 0 como tu necesitas cambiar tu código tanto a la izquierda como a la derecha del guion

1 respuesta más de otro experto

Respuesta

Es un placer saludarte. Gracias por consultar y espero poder ayudarte.

Lo que pides es fácil. ¿Qué tipo de datos es el campo? Imagino que carácter. La siguiente respuesta aplica a tipo de datos carácter. Si es numérico, simplemente los transformamos a carácter con STR().

Cuando decís que quieres darles un nuevo formato, imagino que te referís a reemplazar el dato del campo 001-1589 por 0001-0001589. ¿En otra tabla? ¿O en la misma tabla? Va, eso seria así:

LOCAL lcValor1, lnExtension, lnExt1, lcExpre1, lcValorReal1, lcValorReal2, lcNuevaExp

**--

SELECT tabla

GO TOP

**--Activamos scanner

SCAN

lcValor1 = tabla1.campoaformatear

**--Extension total de la expresión
lnExtension = LEN(lcValor1)
**--
lnExt1 = 1
**--

**--Evaluamos la primera parte de la expresión antes del "-"
FOR i = lnExtension TO 1 STEP -1
lcExpre1 = SUBSTR(lcValor1, lnExt1, 1)
**--Si el carácter es "-"
IF lcExpre1 = "-"
**--Obtenemos parte de la cadena hasta donde
**--delimita el primer guion
lcValorReal1 = SUBSTR(lcValor1, 1, lnExt1 - 1)
**--Rellenamos ceros a la izquierda
lcValorReal1 = PADL(lcValorReal1, 4, "0")
**--Tomamos el resto de la cadena después del guion y rellenamos con ceros
**--a la izquierda.
lcValorReal2 = SUBSTR(lcValor1, lnExt1 + 1, lnExtension - (lnExt1))
lcValorReal2 = PADL(lcValorReal2, 7, "0")
EXIT
ENDIF

**--Recargamos para pasar al siguiente valor
lnExt1 = lnExt1 + 1

ENDFOR

**--Armamos nueva cadena.
lcNuevaExp = lcValorReal1 + "-" + lcValorReal2

**--reemplazamos el dato en el campo en la misma tabla

SELECT tabla1

TABLEREVERT(.F.)

REPLACE tabla1.campoaformatear WITH lcNuevaExp

TABLEUPDATE(.F.)

ENDSCAN

**--//

Ahora mencionas esto:

Estos datos están vinculados a un registro ¿Cómo verifico que el cambio sea en el registro correcto?

¿No son todos los datos de la tabla? Pues en ese caso, tenes que aplicar un FOR al comando SCAN

SCAN tabla1 FOR campo1 = condiciondeseada

ENDSCAN

**--//

Y listo. :)

Avisame cualquier cosa!

Un abrazo!

Desde Managua, Nicaragua!

Ravenn

Espero te encuentres bien. ¿Has podido resolver tu duda? De ser así, te pido finalices la pregunta. Si no, avisame y con mucho gusto te ayudare a resolver.

Un abrazo! :)

Estimado Ravenn:

Soy nuevo en esto; el código que tan amablemente me haz proporcionado es para modificar los datos en la misma tabla? o en otra tabla?; este código debo pegarlo en un programa; ¿Cómo lo utilizo?; Disculpa la ignorancia.

Muchas gracias por tu valioso tiempo

Saludos cordiales

Disculpa la tardanza pero había estado fuera de linea. Ya estoy de regerso para colaborar con mucho entusiasmo!

El código, en la parte de abajo contiene esto

**--Reemplazamos el dato en el campo en la misma tabla
SELECT tabla1
TABLEREVERT(.F.)
REPLACE tabla1.campoaformatear WITH lcNuevaExp
Tableupdate(.F.)

Lo cual es PARA GRABAR EL REGISTRO NUEVO GENERADO (el código ya como vos lo quieres) en otra tabla. Tabla 1 es el nombre de esa tabla.. vos reemplázalo. Luego en donde dice REPLACE escribís, seguidamente el nombre de dicha tabla y el campo donde quieres guardar el dato. Ese dato a guardar es el que esta contenido en la variable lcNuevaExp

Ves! :)

El código lo podes pegar en el evento click de algún botón... asegurate si que las tablas a usar estén agregadas al entorno de datos del formulario (haces click derecho sobre el área de diseño del form y escoges dataenviroment y ahí agregas las tablas).

Cualquier cosa, avisame y te ayudo con mucho gusto.

Un abrazo... desde Managua, Nicaragua!

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas