#define AD_BIGINT 20
#define AD_DATE 7
#define AD_DOUBLE 5
#define AD_VARCHAR 200
#define AD_LONGVARCHAR 201
#define AD_FLD_KEYCOLUMN 0x8000
#define AD_FLD_ISNULLABLE 0x20
#define AD_FLD_MAYBENULL 0x40
#define AD_FLD_UPDATABLE 0x4
ADOCreate( aStru )
LOCAL oADO, oElement
oADO := win_OleCreateObject( "ADODB.Recordset" )
FOR EACH oElement IN aStru
DO CASE
CASE oElement[ DBS_TYPE ] == "I"
oADO:Fields:Append( oElement[ DBS_NAME ], AD_BIGINT, oElement[ DBS_LEN ], AD_FLD_KEYCOLUMN )
CASE oElement[ DBS_TYPE ] == "N"
IF oElement[ DBS_DEC ] == 0
oADO:Fields:Append( oElement[ DBS_NAME], AD_BIGINT, oElement[ DBS_LEN ] )
ELSE
oADO:Fields:Append( oElement[ DBS_NAME ], AD_DOUBLE, oElement[ DBS_LEN ] )
oADO:Fields( oElement[ DBS_NAME ] ):NumericScale := oElement[ DBS_DEC ]
ENDIF
CASE oElement[ DBS_TYPE ] == "C"
oADO:Fields:Append( oElement[ DBS_NAME ], AD_VARCHAR, oElement[ DBS_LEN ] )
CASE oElement[ DBS_TYPE ] == "D"
oADO:Fields:Append( oElement[ DBS_NAME ], AD_DATE )
CASE oElement[ DBS_TYPE ] == "M"
oADO:Fields:Append( oElement[ DBS_NAME ], AD_LONGVARCHAR )
ENDCASE
NEXT
RETURN oADO
Converter de DBF pra ADO, e mostrar:
USE arquivo
oADO := ADOCreate( dbStruct() )
oADO:Open()
DO WHILE ! Eof()
oADO:AddNew()
FOR nCont = 1 TO FCount()
oADO:Fields( FieldName( nCont ) ):Value := FIeldGet( nCont )
NEXT
SKIP
ENDDO
CLOSE DATABASES
oADO:Save( "arquivo.ado" )
oADO:Open( "arquivo.ado" )
DO WHILE ! oADO:Eof()
? oADO:Fields( 0 ):Value, oADO:Fields( 1 ):Value, oADO:Fields( 2 ):Value
oADO:MoveNext()
ENDDO
oADO:Close()
Podem brincar com o browse mostrado no outro tópico.
http://www.pctoledo.com.br/forum/viewtopic.php?f=45&t=15328
Neste caso é ADO puro, sem qualquer banco de dados.
Dá pra fazer pesquisa, filtro, browse, etc.
Talvez até dê pra usar os recordsets do ADO em geradores de relatório.... quem sabe...
Ou transferir entre aplicativos, ou sei lá mais o que...