The TTOD() conversion is working fine, up to recno() 124.
Something happen from there. I´ve cheched the MDB table called "pacientes" and I cannot see any difference on the date record type between it and the prior records. The Debug Window shows rs.Fields(8).value as a DATETIME() type, as the other ones but when runnig it stops at RECORD 124 and give this error:
"Fuction argument value, type or count is invalid"
If I ignore it, it stops again 4 or 5 records ahead. Could I handle thi with "ON ERROR" and record all the ocurrences without stopping the prg run?
The complete code is:
*CONVERSION DE BASE4.MDB A DBF
* Creo dos tablas temporarias para importar los datos de la tabla pacientes.dbf
* Luego haré lo mismo con la segunta tabla de la .MDB que es pacientes PAMI. Ambas
* tienen un campo relacional que es el Nro. de afiliado, con lo cual finalamente
* ya desde VFP, haremos un join de ambas para generar la tabla definitiva NOVEDADES.DBF
* que es el objetivo final. Con la novedades.dbf hay que generar una aplicación sencilla
* para filtrar todos los pacientes cuya internación estuviera vigente durante un determinado
* mes y generar reportes y estadísticas varias.
SET DEFAULT TO c:\frenopat*SET DATE BRITISH
*SET DEBUG ON
*SET STEP ON
* rutina de Les
CLEAR
FN = GETFILE("MDB")
IF EMPTY ( FN )
RETURN
ENDIF
ConnStr = "Driver={Microsoft Access Driver (*.mdb)};Dbq=" + FN + ";Uid=Admin;Pwd=;"
LOCAL Conn as ADODB.Connection
Conn = CREA ( "ADODB.Connection" )
conn.Open(ConnStr)
LOCAL rs as ADODB.Recordset
rs = Conn.Execute("Select * from Pacientes")
rs.MoveFirst
* Abro la primera tabla temporaria que creé para importar los datos de la tabla pacientes.dbf
USE paci_nov EXCLUSIVE
DELETE ALL
PACK
APPEND BLANK
DO WHILE NOT rs.EOF
TRANSFORM(rs.Fields(9).value)
TRANSFORM(rs.Fields(3).value)
TRANSFORM(rs.Fields(4).value)
TRANSFORM(rs.Fields(2).value)
TRANSFORM(rs.Fields(33).value)
TRANSFORM(rs.Fields(43).value)
TRANSFORM(rs.Fields(44).value)
TRANSFORM(rs.Fields(45).value)
TRANSFORM(rs.Fields(36).value)
TRANSFORM(rs.Fields(37).value)
TRANSFORM(rs.Fields(8).value)
TRANSFORM(rs.Fields(26).value)
* Los TRANSFORM están completados para los campos requeridos
* ---------------------------------------------------------
* guardo el contenido de los campos en variables en la misma secuencia
* Hace falta ? O directamente se puede hacer un REPLA de cada campo?
* Parece que con sólo REPLACE va bien
* STORE rs.Fields(9).value TO import9
* STORE rs.Fields(3).value TO import3
* STORE rs.Fields(4).value TO import4
* STORE rs.Fields(2).value TO import2
* Aqui debo detectar si viene un campo .NULL. porque era un campo vacío. Por
* ejemplo porque la operadora olvidó de cargar el domicilio del paciente
* El caso es que más adelante cuando intenta hacer un REPLACE en la tabla temporaria
* si viene un campo .NULL. da error
* USANDO NVL()
* Aqui trato de REPLACE directamente a ver si NVL actúa como un "IF" en un campo que
* SE que viene vacío pero no sé si en este caso, si no viene NULL ... un REPLA directo
* Start debug
IF RECNO() = 121
SET ECHO ON
SUSPEND
ENDIF
REPLACE codben WITH INT(VAL(NVL(rs.Fields(9).value,"DATO NO DISPONIBLE")))
REPLACE t_doc WITH NVL(rs.Fields(3).value,"DATO NO DISPONIBLE")
REPLACE n_doc WITH INT(VAL(NVL(rs.Fields(4).value,"DATO NO DISPONIBLE")))
REPLACE apenom WITH NVL(rs.Fields(2).value,"DATO NO DISPONIBLE")
REPLACE calle WITH NVL(rs.Fields(33).value,"DATO NO DISPONIBLE")
REPLACE nro WITH NVL(rs.Fields(43).value,"DATO NO DISPONIBLE")
REPLACE piso WITH NVL(rs.Fields(44).value,"DATO NO DISPONIBLE")
REPLACE dpto WITH NVL(rs.Fields(45).value,"DATO NO DISPONIBLE")
REPLACE localidad WITH NVL(rs.Fields(36).value,"DATO NO DISPONIBLE")
REPLACE provincia WITH NVL(rs.Fields(37).value,"DATO NO DISPONIBLE")
REPLACE f_ingreso WITH NVL(rs.Fields(8).value,"DATO NO DISPONIBLE")
******** HERE IS where the problem take place********
STORE NVL(rs.Fields(26).value, "Dato No Disponible") TO diafecha
REPLACE f_egreso WITH TTOD(diafecha)
APPEND BLANK
rs.MoveNext()
ENDDO
LOCAL dr as
conn.Close()
* Cierro la tabla
USE