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: 3092
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: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

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, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, 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: 3092
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