Willi aunque ya lo tienes solucionado el problema está aquí:
Function RelProductos(oMySQL, aDesPro, cCodi)
aDesPro := {}Los arrays son tratados por referencia pero tu rompes la referencia tal como tratas aDesPro
Si quieres más rapidez yo lo haría así:
- Code: Select all Expand view
Function CargaDatos()
aDesPro := RelProductos(oMySQL, "QAZ123")
? aDesPro[ 2] // muestra "01" // los datos no cambiaron luego del AADD()
? aDesPro[12] // muestra "UNIDAD"
...
..
.
Function RelProductos(oMySQL, cCodi)
local aDesPro
oDatos := DatosProducto(oMySQL, cCodi) // aquí recabamos los datos de una tabla en MySQL
nLen := oDatos:RecCount()
aDesPro := array( nLEn )
FOR nCont := 1 TO nLen // 77 campos
aDesPro[nCont ] := oDatos:FieldGet(nCont) // llenamos el array con los datos en forma unidimencional
NEXT nCont
? aDesPro[ 2] // muestra "01"
? aDesPro[12] // muestra "UNIDAD"
// realizo un cambio
aDesPro[ 2] := "12"
aDesPro[12] := "DOCENA"
? aDesPro[ 2] // muestra "12"
? aDesPro[12] // muestra "DOCENA"
Return(aDesPro) // retorno el array con datos
He modificado tu función RelProductos para que devuelva un array nuevo, además está optimizada ya que array( nElemen ) crea un array con la dimension adecuada y dentro del for se asignan los elementos.
Con AADD tu programa tiene que REALOCAR memoria en cada llamada y eso es menos optimo. Siempre que se sepa la
dimensión del array es mejor hacerlo como yo te digo. Espero que te valga.
PD: Pronto voy a sacar HDO para SQLite y me gustaría que fueras betatester si puedes