I can write a function to do this, but why re-invent the wheel if it exists.
Is there a function to save the data contained in the elements of an array to a database field ? I'm using DBFCDX and ADS.
From: "Luis Krause Mantilla" <luis_krause@hotmail.com>
Subject: Re: Flexfile III
Date: Wednesday, December 22, 2004 6:19 PM
Colin
The 32 dll's (or whatever it was) from FF3 are unfinished and don't
work. I spend several days trying to make it work, but I realized
I was just wasting my time.
Because I only stored text and arrays in FF2 (I didn't use FF3),
DBFCDX or ADS will work just fine.
For storing arrays in xHarbour, usind ADS, I just created a function
to "stringify" the array before storing it in the memo field, and
a simple macro evaluation from the memo to get the array back.
If you use the V_xxx() functions, you'll also have to work your
way around this, but it won't be that difficult.
So far it's been more than I year since we've been using our app
with xHarbour + ADSCDX and we haven't missed FF.
This is the function to convert an array to a string (will work
with nested arrays)
* ÉÍ͹ Funci¢n ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
* º Nombre : wfAToC() º
* º Autor : C.P. Luis Krause Mantilla º
* º Objetivo : Convierte Arreglo a Cadena para almacenar en campos memo º
* º Fecha : 31/07/2003 º
* º Hora : 17:38:52 º
* ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
* º Argumentos : aArray º
* ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
* º Retorna : cArray º
* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Function wfAToC( aArray )
Local nI, nJ, cArray, nLen := Len( aArray ), cType, cString
cArray := "{"
For nI := 1 To nLen
cType := ValType( aArray[nI] )
If cType == "C" .or. cType == "M"
cString := aArray[nI]
// Considerar que la doble comilla puede ser parte de la cadena
Do While ( nJ := At( '"', cString ) ) > 0
cArray += '"' + SubStr( cString, 1, nJ - 1 ) + '"+["]+'
cString := SubStr( cString, nJ + 1 )
Enddo
cArray += '"' + cString + '"'
Elseif cType == "N"
cArray += LTrim( Str( aArray[nI] ) )
Elseif cType == "D"
cArray += "SToD(" + DToS( aArray[nI] ) + ")"
Elseif cType == "L"
cArray += If( aArray[nI], ".T.", ".F." )
Elseif cType == "A" // llamada recursiva para
cArray += wfAToC( aArray[nI] ) // procesar arreglos anidados
#ifdef __XHARBOUR__
Elseif cType == "P" // Pointer - s¢lo xHarbour
cArray += HB_NumToHex( aArray[nI] )
Elseif cType == "H" // Hash - s¢lo xHarbour; llamada recursiva para
cArray += wfAToC( aArray[nI] ) // procesar hashes anidados
#endif
Else // objects & codeblocks can't be stored anyway
cArray += "NIL"
Endif
If nI < nLen
cArray += ","
Endif
Next
cArray += "}"
Return cArray
This is the one that retrieves the array
* ÉÍ͹ Funci¢n ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
* º Nombre : wfCToA() º
* º Autor : C.P. Luis Krause Mantilla º
* º Objetivo : Convierte Cadena a Arreglo para restaurar de campos memo º
* º Fecha : 31/07/2003 º
* º Hora : 17:38:52 º
* ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
* º Argumentos : cArray º
* ÇÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄÄĶ
* º Retorna : aArray º
* ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
Function wfCToA( cArray )
Local aArray, bArray
If wfCompile( cArray, .F., @bArray ) // no queremos mensaje si truena
aArray := Eval( bArray )
Endif
If ! ValType( aArray ) == "A" // par metro no proporcionado o
aArray := {} // error al intentar convertir
Endif
Return aArray
Replace wfCompile() for you function that will test and trap
a possible error, i.e. Eval( &( "{||" + cArray + "}" ) )
HTH.
Colin Wisbey wrote:
> I am a FW (16 bit) user and have delayed going 32 bit due to extensive use
> of Flexfile functions in all my current apps. I love Flexfile. ADS doesn't
> suit my needs and I want to avoid using traditional memo fields if at all
> possible.
>
> I had the impression that Flexfile was not available for 32 bit but I just
> discovered that GrafX currently sell Flexfile III, including 32 bit.
>
> Is anyone using it with xHarbour? If so, I'd be grateful for any feedback on
> reliability etc in the 32 bit environment.
>
> (I've already emailed Grafx too and am awaiting their reply)
>
> TIA
> Colin Wisbey
>
>
--
Luis Krause Mantilla
lkrausem at shaw dot ca
luis_krause at hotmail dot com
"May the Source be with GNU"
// Convert a string to an array
// cSeparator is the separator character, defaults to TAB
function string2array(cString,cSeparator)
local nCount:=1,aArray:={},cToken:=""
default cSeparator:=chr(9)
do while .t.
cToken:= strToken(cString,nCount,cSeparator)
if ! empty(cToken)
aadd(aArray,cToken)
nCount++
else
exit
endif
enddo
return aArray
From: "Ron Pinkas" <Ron@remove-this.xharbour.com>
Subject: Re: Array in memo field?
Date: Thursday, December 02, 2004 9:13 AM
> Is it possible write an array in a memo field with xHarbour or
> Harbour?
Yes, xHarbour has ValToPrg() and ValToPrgExp() which will save ANY TYPE
(Even Objects) into a String.
Ron
function Main()
local aInfo := { { "one", 1, .T. }, { "two", 2, .F. }, { "three", 3, Date() } }
local cText := ASave( aInfo )
aInfo := nil
aInfo = ARead( cText )
MsgInfo( Len( aInfo ) )
MsgInfo( aInfo[ 1 ][ 1 ] )
MsgInfo( aInfo[ 3 ][ 3 ] )
return nil
Return to FiveWin for Harbour/xHarbour
Users browsing this forum: Silvio.Falconi and 55 guests