FoxPro/Visual FoxPro - agregar fecha a una tabla

 
Vista:
Imágen de perfil de giancarlo

agregar fecha a una tabla

Publicado por giancarlo (4 intervenciones) el 12/06/2014 00:30:57
buenas tardes, tengo problema al querer agregar una fecha.

el tipo de datos de la columna es date, pero cuando quiero usar insert into... me sale error. la fecha debe ser una ingresada por el usuario.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

agregar fecha a una tabla

Publicado por Fidel José (558 intervenciones) el 12/06/2014 01:46:51
Si quieres decir que el dato se ingresa en un TExtbox, revisa la configuración de ese textbox
* En el init del form, o en init del TextBox (o en el cuadro de propiedades)
with Thisform.TxtFecha
.Format="D"
.Inputmask="" && acá te tiene que quedar ( none) en el cuadro de propiedades
.Value=Ctod("") && puedes predefinir la fecha con .Value=date()
endwith
Luego, Replace CampoFEcha with thisform.txtFEcha.value
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo

agregar fecha a una tabla

Publicado por giancarlo (4 intervenciones) el 12/06/2014 02:33:15
estoy ingresandolo como parametro a un prg
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

agregar fecha a una tabla

Publicado por Fidel José (558 intervenciones) el 12/06/2014 13:04:04
El tema es que habías dicho que la fecha la ingresaba un usuario. Entonces, cómo es que hace un usuario para pasar un parámetro?. O dicho de otra forma, de donde surge el valor parámetro?. Y ya que es un parámetro, supongamos
PROCEDURE GuardarDAtos
LPARAMETERS tdFEcha,tnValor,tcString
IF VARTYPE(tdFecha)#"D"
Messagebox("El parámetro tdFEcha no es tipo Date. Es "+Vartype(tdFecha))
REturn
endif
IF VARTYPE(tnValor)#"N"
Messagebox("El parámetro tnValor no es un número. Es "+VArtype(tnValor)
Return
endif

O sea, programación defensiva.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de giancarlo

agregar fecha a una tabla

Publicado por giancarlo (4 intervenciones) el 12/06/2014 16:11:59
lo que pasa es que no tiene interfaz grafica, asi que el usuario solo ejecuta el prg y ya esta.

intente el codigo y sale bien al verificar si sea fecha, sin embargo como puedo pasarle una fecha sin que me diga que es del tipo caracter? y como le hago para inserarlo a una tabla?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 1.011
Oro
Ha mantenido su posición en FoxPro/Visual FoxPro (en relación al último mes)
Gráfica de FoxPro/Visual FoxPro

agregar fecha a una tabla

Publicado por Fidel José (558 intervenciones) el 12/06/2014 17:05:46
Vaya, no entiendo.
"la fecha debe ser una ingresada por el usuario."
"lo que pasa es que no tiene interfaz grafica, asi que el usuario solo ejecuta el prg y ya esta"
En qué quedamos? Vuelvo a preguntar: de dónde surge la variable de supuesta fecha que se pasa como parámetro?

Si la fecha es un tipo caracter, escrito como "12/06/2014", lo transformas a fecha con CTOD("12/06/2014") y saldrá bien de acuerdo con SET DATE BRITISH (o el que corresponda usar).
Si no quieres depender de SET DATE, tienes que escribir una función

PROCEDURE CharToDate(tcFecha)
*-------------------------------------------------
if occurs("/" , tcFecha) # 2 or len(tcFecha)#10
Messagebox("formato inválido")
return
endif
LOCAL ARRAY gaLines
alines(gaLines,tcFecha,1,"/")
* El array galines se conformará como cDia, cMes , cAño
REturn Date( Val(gaLines[3]) , Val(gaLines[2]) , Val( gaLines[1] )

y ahí, por ejemplo
SELECT TABLA
REPLACE CampoFecha with CharToDate( lcFecha )

También puedes usar una función como la que sigue para saber si un alfanumérico podría ser una fecha
Con esta función puedes cambiar la anterior

PROCEDURE CharToDate(tcFecha)
*-------------------------------------------------
if !TestFecha(tcFecha)
Messagebox("Formato Inválido")
REturn
endif

LOCAL ARRAY gaLines
alines(gaLines,tcFecha,1,"/")
* El array galines se conformará como cDia, cMes , cAño
REturn Date( Val(gaLines[3]) , Val(gaLines[2]) , Val( gaLines[1] )


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
PROCEDURE TEstFecha(xcValor,xcSep)
**********************************
* xcValor es un String que puede ser una Fecha
* Formato esperado "99/99/9999" "99-99-9999", etc
local nlen,mi_,lNumero,ndia,nmes,nano,lnp,nfin
xcSep=EVL(xcSep,"/")
if vartype(xcValor)#"C" OR empty(xcValor) OR Len(xcValor)#10
	return .f.
endif
lnp=ALINES(gapart,xcValor,1,xcSep)
IF lnp#3
	RETURN .f.
ENDIF
 
ndia=VAL(gapart[1])
nMes=VAL(gapart[2])
nAno=VAL(gapart[3])
if nano<1900
	return .f.
endif
if !between(nmes,1,12)
	return .f.
ENDIF
nFin=0
DO case
	CASE INLIST(nmes,1,3,5,7,8,10,12)
		nFin=31
	CASE INLIST(nmes,4,6,9,11)
		nFin=30
	OTHERWISE
		if nano=2000
			lBisiesto=.t.
		else
			lBisiesto=iif(Mod(nAno,4)=0,iif(Mod(nano,25)=0,.f.,.t.),.f.)
		endif
		nFin=IIF(lbisiesto,29,28)
 
ENDCASE
if !between(ndia,1,nfin)
	return .f.
endif
RETURN .T.
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de giancarlo

agregar fecha a una tabla

Publicado por giancarlo (4 intervenciones) el 12/06/2014 17:56:13
Gracias por la ayuda, poniendole el CTOD( salio perfecto! y ya puedo agregar.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar