Luiz FERNANDO

[RESOLVIDO] Percorrer um select

13 posts in this topic

Pessoal eu ainda não uso Analysis de banco de dados, a unica forma que sei dar um select seria dessa forma

sS_CmdSQL =

[

	SELECT p.codigo,p.descricao,p.valor,p.tipo,p.valor2,p.volume,p.embalage

	,p.custo,p.grupo,p.mini1,'',p.multiplico,p.desc_max1,ifnull(p.kilo,'0'),ifnull(p.preco_kilo,'0')

	,p.marca,p.iva_in,iva_ex

 	FROM produto as p

 	WHERE ifnull(p.desativa1,'0')<>'1'

 	AND ifnull(p.desativa5,'0')<>'1'

 ]



IF SQLExec(sS_CmdSQL,"aSQL")=False THEN

	SQLInfo("aSQL")

	sS_Mensagem=SQL.MesErreur

	Info(sS_Mensagem)

	SQLClose("aSQL")

	RETURN

END



WHILE SQLFetch("aSQL") = 0 

  // aqui irei percorrer meu resultado do select

END

estou com uma situação aqui aonde preciso percorrer mais N vezes esse resultado, mais o WHILE SQLFetch("aSQL") = 0 só funciona uma unica vez, a segunda ele nem entra dentro do WHILE, alguém saberia me dizer como faço para setar ele no inicio novamente.

Obg
  

Share this post


Link to post
Share on other sites

Usa SQLFirst("aSQL") e depois manda repetir o While novamente

Share this post


Link to post
Share on other sites
1 hora atrás, Cassiano disse:

Usa SQLFirst("aSQL") e depois manda repetir o While novamente

Cassiano já fiz isso, não da certo.

Share this post


Link to post
Share on other sites

Em teoria era pra ter funcionado, então tenta o seguinte, cria uma STRUCTURE, carrega ela com o resultado e depois varre ela qtas vezes quiser.

Share this post


Link to post
Share on other sites
9 horas atrás, Cassiano disse:

Em teoria era pra ter funcionado, então tenta o seguinte, cria uma STRUCTURE, carrega ela com o resultado e depois varre ela qtas vezes quiser.

Cassiano eu joguei numa array uma outra vez, na situação agora são 45 campos, antes de ter todo este trabalho de alimentar a array, resolvi postar aqui antes, pois se o resultado esta la dentro de "aSQL" não faz muito sentido não poder usar ela mais de uma vez.

Share this post


Link to post
Share on other sites

Segundo o próprio help, o uso dessa função seria dessa maneira mesmo (https://help.windev.com/?3072011&name=sqlfetch_function)
Sugiro ir debugando mais detalhadamente para ver se encontra algo como:
- Ver se não tem nenhum SQLClose no meio do tratamento da recuperação do resultado do select
- Confirmar se a consulta realmente está retornando mais de um registro usando diretamente a interface do gerenciador do banco de dados que usa
- Colocar o retorno do SQLFetch em uma variável e ver qual o valor que ela retorna, apenas para debug, e verificar se o código retornado indica algum erro
- Utilizar o próprio debug da ferramenta, para ver o conteúdo das variáveis passo a passo, as vezes isso lhe indica um caminho do erro

Share this post


Link to post
Share on other sites

Posted (edited)

Nathanreys acredito que tenha algum bug nisso, tudo que vc mencionou acima eu já fiz, a unica coisa que não fiz , e não sei como fazer é pegar "o retorno do SQLFetch em uma variável e ver qual o valor que ela retorna"

nContador is int



nContador=1



WHILE SQLFetch("aSQL") = 0 

   IF nContador=1

      Info("Entra aqui normal")

   END

   nContador++

END



SQLFirst("aSQL")



WHILE SQLFetch("aSQL") = 0



   Info("Não entra aqui ")



END

 

Edited by Luiz FERNANDO

Share this post


Link to post
Share on other sites
nContador is int = 0

nRetorno is int



nRetorno = SQLFetch("aSQL")

Trace("primeiro retorno: " + nRetorno)

WHILE nRetorno = 0

  nContador += 1

  nRetorno = SQLFetch("aSQL")

  Trace("meu retorno dentro do while agora foi " + nRetorno)

END

Trace("entrei no loop " + nContador + " vezes")

Algo nesse sentido

Veja também se usando SQLNext não resolve sua situação, baseado no exemplo do help (https://help.windev.com/?3072030&name=sqlnext_function)

1 person likes this

Share this post


Link to post
Share on other sites

Posted (edited)

1 hora atrás, Cassiano disse:

Fiz uma simulação aki conforme @nathanreys e funcionou.

Cassiano vc esta usando Analysis de banco de dados ? vc primeiro mandou percorrer com WHILE SQLFetch("aSQL") = 0

  eu copie e colei o código dele no meu projeto, não entra no while no segundo WHILE

 

Edited by Luiz FERNANDO

Share this post


Link to post
Share on other sites

Fiz conforme o exemplo aki do manual 

Logico q adaptando pra minha realidade, antes fiz um SQLConnect 

nConnection is int = SQLConnect("localhost","root","1234","farmasys","MariaDB")

sSQLQuery is string = [
						SELECT * FROM Produtos LIMIT 10
						]

IF SQLEXect(sSQLQuery, "MyQuery") THEN
	SQLFirst("MyQuery")
	WHILE SQL.Out = False
		Trace( SQLCol("MyQuery", 2))
		SQLNext("MyQuery")
	END

	// Aki mandei repetir
	SQLFirst("MyQuery")
	WHILE SQL.Out = False
		Trace( SQLCol("MyQuery", 2))
		SQLNext("MyQuery")
	END


ELSE
	SQLInfo()
	Error("Erro na execução da query", SQL.MesError)
END

SQLClose("MyQuery")

Não usei analisys.

Share this post


Link to post
Share on other sites

Faça um teste, removendo a clausula where, continua a mesma situação ?
:D

Todo teste é valido

 

Share this post


Link to post
Share on other sites

Pessoal funcionou aqui 100%, meu problema que no primeiro WHILE estava insistindo em usar  SQLFetch("aSQL") = 0, só depois no segundo que estava fazendo conforme a dica do nathanreys , a partir de agora somente irei usar o WHILE SQL.Out = False não terei mais problema nesse sentido, pq usando SQLFetch("aSQL") ele realmente zera o conteúdo.

Obg a todos pelo ajuda.

4 people like this

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!


Register a new account

Sign in

Already have an account? Sign in here.


Sign In Now