Olá!
agora seria ficar preso novamente ao padrão DBF,|
Isso que é inversão!
Agora vc está preso ao ADO! Não existe nenhuma diferença de ADO para DBF.
ADO que é está PRESO nas engrenagens das DLLs do WINDOWS.
Vai ver como são as outras alternativas e deixe de preconceito.
O que é diferente de ADO para DBF ? Ainda não vi NADA, parece até a mesma coisa. A Vantagem do DBF é que funciona em qualquer lugar, não depende de SO.
E tem várias linguagens que trabalham com DBF. DBF não tem nada a ver com falta de performance nem com FICAR PRESO em conceitos, quem tem problema com isso parece que é vc.
Vantagens do DBF para ADO são várias, qual é vantagem do ADO ?
DBF podemos indexar, filtrar, relacionar, etc, etc... Vc está confundindo SQL com ADO isso sim que é um problema.
SQL é uma coisa, DBF é outra e ADO outra.
Se SQLMIX não fosse bom, não teria ninguém usando. Nem o Eric Landvai estaria criando o novo DRIVE de conexão compatível com os conceitos do FOXPRO em cima do SQLMIX.
Veja o drive do Rodrigo Moreno para PG, muita gente usa e não tem nada com DBF, piorou ADO.
oQuery := oServer:Query( "SELECT code, name, description, sales FROM test" )
FOR EACH i IN oQuery:Struct()
? i[ 1 ], i[ 2 ], i[ 3 ], i[ 4 ]
NEXT
? "Fields:", oQuery:FCount()
oRow := oQuery:Blank()
? ;
oRow:FCount(), ;
oRow:FieldPos( "sales" ), ;
oRow:FieldGet( 1 ), ;
oRow:FieldName( 2 ), ;
oRow:FieldType( 1 ), ;
oRow:FieldDec( 1 ), ;
oRow:FieldLen( 1 )
oRow:FieldPut( 1, 150 )
oRow:FieldPut( 2, "MY TEST" )
? oRow:FieldGet( 1 ), oRow:FieldGet( 2 )
? oRow:aRow[ 1 ], oRow:aRow[ 2 ], oRow:aOld[ 1 ], oRow:aOld[ 2 ]
? oQuery:Append( oRow )
? oQuery:ErrorMsg()
DO WHILE ! oQuery:Eof()
? ;
oQuery:RecNo(), ;
oQuery:FieldPos( "code" ), ;
oQuery:FieldGet( oQuery:FieldPos( "code" ) ), ;
oQuery:FieldGet( 4 ), ;
oQuery:FieldGet( 2 ), ;
oQuery:FieldName( 1 ), ;
oQuery:FieldType( 1 ), ;
oQuery:FieldDec( 1 ), ;
oQuery:FieldLen( 1 ), ;
oQuery:FieldGet( 3 )
IF oQuery:RecNo() == 50
oRow := oQuery:getrow()
oRow:FieldPut( 2, "My Second test" )
? "Update:", oQuery:Update( oRow )
ENDIF
IF oQuery:RecNo() == 60
oRow := oQuery:getrow()
? "Delete:", oQuery:Delete( oRow )
ENDIF
oQuery:Skip()
ENDDO
Praticamente a mesma coisa, de usar com ADO ou DBF. Só que funciona independente de OS.
O importante é isso: oQuery := oServer:Query( "SELECT code, name, description, sales FROM test" )
Tanto faz se vai ser com ADO/DBF/XXX, aprender SQL não tem nenhuma relação com DBF ou ADO. Agora quais são as ferramentas que vc tem para tratar o RETORNO da sentença é que importa.
Saudações,
Itamar M. Lins Jr.