Los datos los he comprobados antes de ser pasado al RecordSet y todos coinciden con el tipo de campo, no obstante pongo aqui el c贸digo donde abro los recordset y paso los datos a una dbf y luego de la dbf al recordset. Observe que hay dos funciones INFO() e INFO2() La primera es para verificar las propiedades del Recordset y la segunda los datos de cada campo del recordset.
cTempLin := cArea+"MODLIN.DBF"
aadd(aEstruc,{"CODIGO" ,"C", 14,0 } )
aadd(aEstruc,{"CONCEPTO" ,"C", 50,0 } )
aadd(aEstruc,{"CANTIDAD" ,"N", 7,2 } )
aadd(aEstruc,{"PRECIO" ,"N", 10,5 } )
aadd(aEstruc,{"IVA" ,"N", 5,2 } )
aadd(aEstruc,{"CUOIVA" ,"N", 10,2 } )
aadd(aEstruc,{"REC" ,"N", 5,2 } )
aadd(aEstruc,{"CUOREC" ,"N", 10,2 } )
aadd(aEstruc,{"IMPORTE" ,"N", 10,2 } )
aadd(aEstruc,{"FECHA" ,"D", 8,0 } )
aadd(aEstruc,{"IVAINCL" ,"L", 1,0 } )
aadd(aEstruc,{"NUMERO" ,"N", 6,0 } )
aadd(aEstruc,{"REGISTRO" ,"N", 6,0 } )
aadd(aEstruc,{"BORRADO" ,"L", 1,0 } )
dbCreate(cTempLin,aEstruc)
dbUseArea(.T.,,cTempLin,"TEMP",.F.,,)
oRsLineas := FW_OpenRecordSet(oConex,cSource1,3,2,1)
oRsArti := FW_OpenRecordSet(oConex,cSource2,3)
oRsLineas:MoveFirst()
ASIZE(aTempDat, oRsLineas:Fields:Count)
AFILL(aTempDat,.T.)
aTempDat := BlankDatos(aTempDat,oRsLineas)
oRsLineas:Find("Numero ="+Alltrim(Str(Int(nAlbar))),0,1,1 )
If oRsLineas:Eof() .and. oRsLineas:Bof()
Msginfo("No se han encontrado lineas")
oRsLineas:Close()
oRsArti:Close()
dbCloseAll()
Ferase(cTempLin)
Return nil
EndIf
nNumero := oRsLineas:Fields("numero"):Value
WHILE nNumero = Int(nAlbar)
aTempDat := BlankDatos(aTempDat,oRsLineas)
aTempDat := LoadDatos(aTempDat,oRsLineas)
TEMP->(dbAppend())
TEMP->CODIGO := aTempDat[ 2]
TEMP->CONCEPTO := aTempDat[ 3]
TEMP->CANTIDAD := aTempDat[ 4]
TEMP->PRECIO := aTempDat[ 5]
TEMP->IVA := aTempDat[ 6]
TEMP->CUOIVA := aTempDat[ 7]
TEMP->REC := aTempDat[ 8]
TEMP->CUOREC := aTempDat[ 9]
TEMP->IMPORTE := aTempDat[10]
TEMP->FECHA := aTempDat[11]
TEMP->IVAINCL := aTempDat[12]
TEMP->NUMERO := aTempDat[ 1]
TEMP->REGISTRO := oRsLineas:Bookmark
TEMP->BORRADO := .f.
TEMP->(dbUnlock())
ALTARTICULO(aTempDat,oRsArti)
oRsLineas:MoveNext()
If oRsLineas:Eof()
Exit
Else
nNumero := oRsLineas:Fields("numero"):Value
EndIf
EndDo
TEMP->(dbCommitAll())
OLDLINEAS()
oRsLineas:MoveFirst()
Return nil
Nota: paso los datos desde la dbf a un array porque luego me sirve para dar de baja al stock de articulos