Bom dia!
Faço uma conexão com o Firebird utilizando AdoDb que está funcionando, porém não consigo varrer todos os registros da tabela selecionada, fica sempre posicionada no início do RecordSet. Vejam:
public CNN
try
CNN:=CreateObject("ADODB.Connection")
CNN:Open("DRIVER=Firebird/InterBase(r) driver;UID=SYSDBA;PWD=masterkey;DBNAME=127.0.0.1:C:\CONVER~1\santor~1\Arquiv~1\Emdesa~1\Fashion\Dados\01\data.fdb;CHARSET=WIN1252;DIALECT=3;CLIENT=fbEmbed.dll")
catch e
Error Connection CNN
ExitProcess(0)
end
try
oCursor:=CreateObject("ADODB.Recordset")
catch e
Error Connection CNN
return
end
oCursor:Open("select * from CLIENTE order by CODCLIENTE", CNN, 2, 3)
&& O problema está no bloco abaixo, ele deveria varrer a tabela com o :MoveNext() porém isto não está ocorrendo.
oCursor:MoveFirst()
do while .not. oCursor:Eof()
msgstop( oCursor:Fields["NOMECLIENTE"]:Value, "" )
oCursor:MoveNext()
enddo
Ele não se movimenta, mostra sempre o mesmo registro e entra em loop. Alguém já passou por esta situação e poderia me dar uma dica? Não encontro o erro, o AdoDb.ch que estou utilizando é do exemplo Agenda postado anteriormente. Muito obrigado!
Adilson
Conexão com Firebird via ADO :MoveNext()
Moderador: Moderadores
- tetraetila
- Usuário Nível 1

- Mensagens: 2
- Registrado em: 29 Ago 2013 09:20
- Localização: Belo Horizonte MG
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Conexão com Firebird via ADO :MoveNext()
Olá!
Seja bem-vindo ao fórum Adilson.
Parece tudo normal no teu código... (por favor, sempre coloque código entre a tag code, localizada na barra de ferramentas na janela onde se posta as mensagens)
O código abaixo funciona normalmente, compilado com xHarbour (não testei com Harbour mas deve funcionar também). Experimente trocar nele a string de conexão e o select pelo que você usa e teste. Uma dica legal em ADO, é que você pode colocar o recorset todo em um array usando um único método ADO: Continue postando.
Seja bem-vindo ao fórum Adilson.
Parece tudo normal no teu código... (por favor, sempre coloque código entre a tag code, localizada na barra de ferramentas na janela onde se posta as mensagens)
O código abaixo funciona normalmente, compilado com xHarbour (não testei com Harbour mas deve funcionar também). Experimente trocar nele a string de conexão e o select pelo que você usa e teste.
Código: Selecionar todos
#include "ado.ch"
PROCEDURE Main()
LOCAL oCn, oRs, oErr
AltD()
TRY
oCn := CreateObject( "ADODB.Connection" )
oCn:ConnectionString := "Provider=OraOLEDB.Oracle;Data Source=XE;User ID=system;Password=abc123;FetchSize=100;CacheType=Memory;"
oCn:Open()
oRs := CreateObject("ADODB.RecordSet")
With Object oRs
:cursorType := adOpenDynamic
:activeConnection( oCn )
:cursorLocation = adUseServer
:maxRecords = 100000
:cacheSize = 100
:source := "SELECT ROWNUM AS REC, COUNTRY_ID, COUNTRY_NAME FROM HR.Countries"
// ou troque as linhas:
// oRs:activeConnection( oCn )
// oRs:source := "SELECT ROWNUM AS REC, COUNTRY_ID, COUNTRY_NAME FROM HR.Countries"
// por:
// oRs:open( "SELECT ROWNUM AS REC, COUNTRY_ID, COUNTRY_NAME FROM HR.Countries", oCn )
:open()
:moveFirst()
CLS
Do While ! :eof()
QOut( Transform( :Fields( "rec" ):value, "999" ), "-", ;
:Fields( "Country_id" ):Value, "-", ;
:Fields( "Country_Name" ):Value )
:MoveNext()
ENDDO
:Close()
oRs := Nil
End
oCn:Close()
oCn := Nil
CATCH oErr
Alert( "Error: " + oErr:Operation + " -> " + oErr:Description )
END
RETURN
//--------------------------------------------------------------------------------Código: Selecionar todos
aArray := oRs:getRows()[]´s
Alexandre Santos (AlxSts)
Alexandre Santos (AlxSts)