Loop/movenext com ADODB no xHarbour

Forum sobre SQL.

Moderador: Moderadores

Avatar do usuário
fertriod3
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 18 Set 2009 14:05
Localização: Tietê-SP

Loop/movenext com ADODB no xHarbour

Mensagem por fertriod3 »

Olá caríssimos,

Tenho que percorrer um recordset, numa consulta ao MySQL com ADO. No xharbour com DBF eu faria assim:

Código: Selecionar todos

while !chq->(eof())                                         
	if ascan(arr_reg,Cid->numreg) == 0 .OR. Cid->numreg == "   "
		chq->(dbskip())
		loop
	endif
	chq->(dbskip())
end
O loop (abaixo) no recordset dá erro, alguem sabe como deveria proceder?

Código: Selecionar todos

while !oRSChq:eof()                                         
	if ascan(arr_reg,Cid->numreg) == 0 .OR. Cid->numreg == "   "
		oRsChq:movenext()
		orsChq:loop()
	endif
	oRsChq:movenext()
end
Obrigado
Fernando Lara
fernando.pareschi@gmail.com
Clipper 5.2 - Blinker 7 - Samba
xHarbour
alxsts
Colaborador
Colaborador
Mensagens: 3109
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Loop/movenext com ADODB no xHarbour

Mensagem por alxsts »

Olá!

O método "loop" não existe em ADO.

Tente assim:

Código: Selecionar todos

 while !oRSChq:eof()                    
  if ascan(arr_reg, oRSChq:fields:"numreg") == 0 .OR. oRSChq:fields:"numreg" == " "
     oRsChq:movenext()
     LOOP
  endif
  oRsChq:movenext()
 end
Deve ser código exemplo pois está esquisito. Se não satisfizer a condição, despreza registro. Senão, despreza registro...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
fertriod3
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 18 Set 2009 14:05
Localização: Tietê-SP

Loop/movenext com ADODB no xHarbour

Mensagem por fertriod3 »

Beleza Alexandre, eu alterei aqui e pelo menos passou sem erro, agora vou conferir o relatorio.
Muito obrigado pela força
Fernando Lara
fernando.pareschi@gmail.com
Clipper 5.2 - Blinker 7 - Samba
xHarbour
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20416
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP
Curtiram: 1 vez

Loop/movenext com ADODB no xHarbour

Mensagem por JoséQuintas »

alxsts escreveu:O método "loop" não existe em ADO.
Não existe nem em ADO, e nem em DBF.
Tem a ver com DO WHILE/ENDDO e não banco de dados.

Estranhei o Fields, que eu saiba seria Fields( "codigo" ):Value

E nesta parte talvez melhor inverter:

if ascan(arr_reg, oRSChq:fields:"numreg") == 0 .OR. oRSChq:fields:"numreg" == " "

Deste jeito nem perde tempo fazendo scan se for " " (apesar que a comparação continua esquisita)

IF oRSChq:fields( "numreg" ):Value == " " .OR. ascan(arr_reg, oRSChq:fields( "numreg" ):Value ) == 0
José M. C. Quintas
Harbour 3.2, mingw, multithread, gtwvg, fivewin 25.12, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui), (hmg3), (hmg extended), (oohg), PNotepad, ASP, (Linux/Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
alxsts
Colaborador
Colaborador
Mensagens: 3109
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Loop/movenext com ADODB no xHarbour

Mensagem por alxsts »

Olá!
JoséQuintas escreveu:Tem a ver com DO WHILE/ENDDO e não banco de dados.
Loop é um comando xBase. Pose ser usado com Do...While...Enddo, For...Next e provavelmente For...Each...Next (nunca testei).
JoséQuintas escreveu:Estranhei o Fields, que eu saiba seria Fields( "codigo" ):Value
Tem razão... na pressa, esqueci o :value. O correto é rs:fields("field"):value
JoséQuintas escreveu:E nesta parte talvez melhor inverter:
Tem razão. Eu ia dizer isto. Esta técnica é conhecida como shortcutting, ou seja: numa série de condições agrupadas com .OR., qualquer uma delas que for verdadeira valida toda a serie. Da mesma forma, numa série de condições agrupadas com .AND., qualquer uma delas que falhar invalida toda a serie. Este é o comportamento padrão do compilador e pode ser alterado para testar todas as condições, com o switch -z (isto vem do Cl*pper).
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
fertriod3
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 18 Set 2009 14:05
Localização: Tietê-SP

Loop/movenext com ADODB no xHarbour

Mensagem por fertriod3 »

Amigos,

Realmente, deixando somente "loop" resolveu. Coloquei em produção esses dias e deu tudo certo. Obrigado José Quintas e Alexande Santos pela ajuda. Interessante a dica de que o loop faz tem a ver com o DO WHILE e não com a base de dados que é usada, eu ainda misturo as coisas, rs
Fernando Lara
fernando.pareschi@gmail.com
Clipper 5.2 - Blinker 7 - Samba
xHarbour
Avatar do usuário
fertriod3
Usuário Nível 1
Usuário Nível 1
Mensagens: 36
Registrado em: 18 Set 2009 14:05
Localização: Tietê-SP

Loop/movenext com ADODB no xHarbour

Mensagem por fertriod3 »

Outra coisa que ia me esquecendo, somente pra deixar registrado: Cid->numreg é em dbf e eu acesso normalmente com select (não sei se é possível fazer select com dbf) então nesse caso é dbf junto com MySql

Código: Selecionar todos

ascan(arr_reg,Cid->numreg) == 0 .OR. Cid->numreg == "   "
Até mais
Fernando Lara
fernando.pareschi@gmail.com
Clipper 5.2 - Blinker 7 - Samba
xHarbour
Responder