Problema para substraer datos de fecha

Tengo un problema para substraer datos de una fecha. La cual esta es ingresada en un formulario automáticamente o también si el usuario quisiera ingresarlo manualmente también, hay un textbox para digitar el día (28) y un combo box para seleccionar el mes (abril)
cuando lo guardo este lo grado en un campo fecha. Lo cual junto los datos de la siguiente manera día + "" +"De"+combobox y se guarda en el campo así: 28 de Abril pero cuando modificar el registro y este contiene la fecha de esa manera estaba intentando utiliza Substr pero no me sale.
Esto para que en el textbox día me muestre el día (28) y el combobox el mes respectivo al que se guardo para ese registro.

1 respuesta

Respuesta
1
¿Pero cómo estas usando el substr para extraer el mes y la fecha?
mira primero tengo un form para adicionar registros el cual tengo un textbox para mostrar el dia y combo para la lista de los meses y unt textbox para el año, pero esos datos lo inserto atomaticamente al presionar el boton nuevo
thisform.ctnchequera.txtdiaMes.Value=DAY(DATE())
thisform.ctnchequera.txtaño.Value=YEAR(DATE())
LOCAL mes
mes = MONTH(DATE())
DO CASE
CASE mes = 1
mes="ENERO"
CASE mes =2
mes ="FEBRERO"
CASE mes =3
mes = "MARZO"
CASE MES =4
mes ="ABRIL"
CASE mes=5
mes="MAYO"
CASE mes=6
mes="JULIO"
CASE mes = 7
mes = "JUNIO"
CASE mes = 8
mes = "AGOSTO"
CASE mes = 9
mes = "SEPTIEMBRE"
CASE mes = 10
mes = "OCTUBRE"
CASE mes = 11
mes = "NOVIEMBRE"
CASE mes = 12
mes = "DICIEMBRE"
endcase
thisform.ctnchequera.cboMes.Value=mes
Así es como muestro esos datos, luego cuando estos se guardan
local f
F =(alltrim(STR(.TXTDIAMES. VALUE)))+" "+"DE "+.CBOMES. VALUE
el tipo de datos de este campo es caracter debido a que cuando termino de realizar el registro hay que imprimirlo, y tiene que salir la fecha escrita o la fecha que el usuario ingrese, entonces en el campo se guarda por ejemplO 28 DE FEBRERO, pero tambien tengo otro formulario el cual me sirve para modificar los datos de ese registro pero cuando le digo que me muestre dichos datos, todo me lo muestra bien, pero menos la fecha por que este esta de la manera antes explicada y esto lo tengo que meter en sus respectivo caja de texto y en el combo. Estuve intentando utilizar substr y contaba los caracteres, pero solo logre que me mostrara el día, pero no el mes.
Haber el código que me enviaste es para que guardes la fecha lo cual esta bien pero lo que necesito es el código con el cual tratas de extraer la fecha para mostrarla, ayudame con eso para ver que solución se te puede dar
LOCAL f1, f2
            f1= SUBSTR(fechaletra,1,3)
            thisform.ctnchequera.txtdiaMes.value=f1
            f2=SUBSTR(fechaletra,4)
            thisform.ctnchequera.cboMes.Value=f2
la substraccion para el dia me sale bien, esto me inserta los primeros 2 digitos en la caja de texto, pero no me funciona con el combo
Te doy un consejo, en tu tabla a parte de grabar la fecha en formato carácter (14 de marzo del 2010) guarda en otro campo esa misma fecha pero en formato fecha (14/04/2010) dime si puedes hacer eso para indicarte después como hacer que se te muestre la fecha como tu deseas osea en el textbox y en el combo
Bueno me imagino yo que tendría que hacer casi lo mismo pero al revés de como inserto esa fecha en las cajas de texto al guardar, pero aquí seria por ejemplo agarrando el día lo inserto en una variables, luego leo el combo y con un do case le digo que si es ENERO otra variable va a ser 01, si es febrero va a ser 02 y así..., y luego
variable fecha = fecha1+"/"+fechames+año
Pienso yo que así podría ir. Pero no se dime tu si así estaría bueno
Si más o menos así, por ejemplo tu tienes el día en un textbox, el mes en un combo y el año en otro textbox, entonces para insertar tu fecha seria así :
ndia = thisform.textdia.value
nmes = thisform.combomes.listindex
nanio = thisform.textanio.value
dfechaaux = ndia+"/"+nmes+"/"+nanio
dfecha = cdate(dfechaaux)
Con esto guardarías la fecha que se almacena en dfecha ahora para mostrarla harías el proceso contrario más o menos así :
dfecha = nombretabla.nombrecampofecha
ndia = day(dfecha)
nmes = month(dfecha)
nanio = year(dfecha)
thisform.textdia.value = ndia
thisform.combomes.listindex = nmes
thisform.textanio.value = nanio
Ok, si pero algo más, mira la variable dfechaaux esta junta la fecha, pero algo, yo tengo que modificar la tabla donde guardo estos datos, voy a agregar un nuevo campo como fecha_aux tipo de dato date, pero que allí en esa variable siempre tengo que poner los /
Otra. ¿dfecha es una varialbe? Y que con cdate, lo otro para hacer lo al revés y alo manejo bien.
dfechaaux = ndia+"/"+nmes+"/"+nanio
dfecha = cdate(dfechaaux)
Dfechaaux es una variable carácter donde por ejemplo te almacenaría "14/04/2010" pero como carácter luego en dfecha se convierte esa fecha que esta en carácter en una variable tipo fecha y con formato fecha que seria la variable dfecha, ah por cierto me equivoque no es cdate la función correcta seria dfecha = ctod(dfechaaux). Ctod es una función que convierte una variable carácter en una variable fecha, para terminar en tu campo que vas a crear FECHA_AUX deberías grabar con la variable dfecha.
local ndia,nmes,nano,dfechaaux,dfecha
                ndia = thisform.ctnchequera.txtdiaMes.Value
                nmes = thisform.ctnchequera.cboMes.ListIndex
                nano = thisform.ctnchequera.txtaño.Value
                dfechaaux = ndia+"/"+nmes+"/"+nano
                dfecha = ctod(dfechaaux)
operator/operand tye mismatch- me muestra la linea de dfechaaux
ignore
function argument value, type or count is invalid, me muestra la liea de dfecha
ignore
data type mismatch y me muestra error donde guardo
replace fecha_aux WITH dfecha
Ah si cierto lo que pasa es que estas sumando o concatenando campos numéricos en este caso el día y el año, haber esa linea debería quedar así
dfechaaux = alltrim(str(ndia)) + "/" + alltrim(str(nmes)) + "/" + alltrim(str(nano))
Ok si mira algo más, lo que me pusiste yo me di cuenta, y lo hice como tu lo pusiste luego. Pero hay otra cosa, acuérdate que la variable del mes, tiene el valor pero el letra, y queremos pasar esto a numero pienso yo.. y lo hice de la siguiente manera.
local ndia,nmes,nano,dfechaaux,dfecha
  ndia = thisform.ctnchequera.txtdiaMes.Value
  nmes = thisform.ctnchequera.cboMes.value
  DO CASE
  CASE nmes ="ENERO"
  nmes=01
  CASE nmes ="FEBRERO"
  nmes =02
  CASE nmes ="MARZO"
   nmes = 3
   CASE nMES ="ABRIL"
  Nmes =04    
  CASE nmes="MAYO"
   nmes=05
                    CASE nmes="JULIO"
                    nmes=06
                    CASE nmes = "JUNIO"
                    nmes =07
                    CASE nmes = "AGOSTO"
                    nmes =08
                    CASE nmes = "SEPTIEMBRE"
                    nmes = 09
                    CASE nmes = "OCTUBRE"
                    nmes =10
                    CASE nmes = "NOVIEMBRE"
                    nmes = 11
                    CASE nmes = "DICIEMBRE"
                    nmes = 12
                endcase
                nano = thisform.ctnchequera.txtaño.Value
    dfechaaux = ALLTRIM(STR(ndia))+"/"+ALLTRIM(STR(nmes))+"/"+ALLTRIM(STR(nano))
                dfecha = CTOD(dfechaaux)
Y cuando hago el replace ahora ya no me da error, pero cuando voy al entorno de datos, y browse en la tabla, verifico el camop fecha_aux, y esta en blanco.. no me muestra los datos
El asunto con el combo del mes es el siguiente, el combo tiene una propiedad value que corresponde al mes pero por lógica tu muestras los meses ordenados osea de enero a diciembre entonces sabiendo eso tu puedes usar la propiedad listindex del combo el cual te devuelve el elemento que tienes seleccionado actualmente en el combo para así saber que mes tienes seleccionado ejemplo si escogiste agosto pues la propiedad value es AGOSTO pero la propiedad listindex es 8, básate en eso para que asignes correctamente los valores
Gracias.. mira realmente no me he puesto a modificar la parte en la que me estas ayudando, pero ya solo falta esa parte, por que lo ultimo no me guardaba, te finalizo para que puedas seguir ayudando a otras personas, pero mira a ver si me puedes enviar tu correo y así, cualquier cosita con el tema actual te lo preguntaría por correo. el mio es [email protected]
Gracias..

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas