SELECT DENTRO DE UM LOOP

MLALEX 03/11/2015 17:38:46
#453362
Olá meus anjos da guarda!!

Estou com um problema que não tenho a menor idéia de como resolver.

Tenho um código em Code Behind que faz um loop em para encontrar em um array, determinados endereços. A medida que vai encontrando esses endereços, aciona uma função em javascript que busca em um banco de dados MySQL informações referente a cada endereço encontrado. O problema é que o loop chega ao final antes de aparecer o primeiro resultado do primeiro endereço e quando esse resultado chega é do último endereço informado.

Segue uma ilustração do código que estou usando.

do until idx = NumeroDeLinhasDoArray


if endereço <> [Ô][Ô] then
txtEndereço.text = endereço [ô]aqui joga o endereço em um textbox para a função javascript capturar
ScriptManager.RegisterStartupScript(Me, Me.GetType(), [Ô]MinhaFunção[Ô], [Ô]BuscaInfo();[Ô], True) [ô]aciona a função javascript
end if


idx = idx + 1
loop


A questão é, como fazer essa sequência de select dentro de um loop ???

MLALEX 03/11/2015 18:01:43
#453363
Pensei... não teria como juntar todos os endereços numa variável e fazer um select só mas com resultados individuais?? Tipo o primeiro resultado é do primeiro endereço... Se a resposta é sim, como seria esse Select??
DS2T 03/11/2015 18:07:43
#453364
Resposta escolhida
Mas essa condição nunca vai funcionar mesmo.
Em nenhum momento você está passando algum valor para a variável [Ô]endereco[Ô]

Coloque isso após iniciar o loop:

endereço = SeuArray(idx)


Não entendi porque você joga para um textbox para depois rodar uma função javascript. Mesmo usando o método RegisterStartupScript, você ainda pode rodar funções javascript passando parâmetros.

Outra coisa que não entendi, é o fato de usar javascript para conexão com banco de dados MySQL. Sou meio novato com web ainda, mas javascript não é só client-side? Por que não conecta com asp mesmo?

Abraços
MLALEX 03/11/2015 19:56:30
#453367
Trabalho há mais de 10 anos com VB6. Agora que estou me aventurando pelo Asp.net. Se você é novato com web eu ainda tô no útero. Não sei nada!! Mas tenho força de vontade, pesquiso bastante e aos [Ô]trancos e barrancos[Ô], com a ajuda de anjos como você. vou conseguindo fazer o que preciso.

Vamos lá:

Citação:

Em nenhum momento você está passando algum valor para a variável [Ô]endereco[Ô]



Na verdade eu coloquei apenas uma idéia de como funciona o código. No código correto o endereço esta sendo carregado exatamente como você sugeriu.

Citação:

Não entendi porque você joga para um textbox para depois rodar uma função javascript. Mesmo usando o método RegisterStartupScript, você ainda pode rodar funções javascript passando parâmetros.



Trabalho relativamente bem no Code Behind porque é muito parecido com VB6. JavaScript pra mim é grego, mas foi o único jeito que descobri de como acessar a API do google maps. Jogo o endereço no TextBox porque foi o jeito que descobri de pegar os valores:
var endereço = document.getElementById([ô]txtEndereco[ô]).value;



Citação:

Outra coisa que não entendi, é o fato de usar javascript para conexão com banco de dados MySQL. Sou meio novato com web ainda, mas javascript não é só client-side? Por que não conecta com asp mesmo?



Porque a maior parte dos parâmetros que preciso para realizar a consulta MySQL é gerada pelo javascript que acessa a API do google maps. Se eu soubesse como trazer esses parâmetros para o code behind seria muito mais fácil prá mim.

Meu código funciona quando faço uma consulta para cada endereço, mas quando jogo no loop...

Eu acho que esse loop deveria ser feito no javascript e não no code behind, mas não sei fazer isso
MOUSER 03/11/2015 20:48:43
#453370
Vocês me deram uma ideia sobre a duvida que eu tinha... Link da minha duvida, semelhante a esta!
Citação:

http://vbmania.com.br/index.php?modulo=forum&metodo=abrir&id=453325&mundo=2&ultimapagina=1



DS2T 04/11/2015 02:58:18
#453384
[Ô]Porque a maior parte dos parâmetros que preciso para realizar a consulta MySQL é gerada pelo javascript que acessa a API do google maps. Se eu soubesse como trazer esses parâmetros para o code behind seria muito mais fácil prá mim.[Ô]


Vamos trabalhar em cima disso então, apesar de não ser o método mais recomendado... vai quebrar seu galho.
Existem alguns meios de pegar um valor de uma função javascript.
O que eu recomendo é que depois de você pegar os dados que você precisa da api do googlemaps, você envie para o servidor pra trabalhar no code behind.

Realize os seguintes passos:
1 - Referencie a biblioteca JQuery no seu código client-side.
2 - Crie um método público estático no code behind com o atributo WebMethod e um parâmetro chamado ParametroRetorno
3 - No client-side, assim que você pegar os dados que precisa, jogue para o servidor através de uma requisição:

$.ajax({
type: [Ô]POST[Ô],
url: [Ô]SUA_PAGINA.aspx/NOME_DO_SEU_METODO_ESTATICO[Ô],
data: [ô]{ParametroRetorno: [Ô][ô] + VARIAVEL_COM_SEUS_DADOS + [ô][Ô] }[ô],
contentType: [Ô]application/json; charset=utf-8[Ô],
dataType: [Ô]json[Ô]
});

Quando isso rodar, vai mandar a requisição pro servidor e ele vai chamar a função estática que você declarou. Os dados que você passou, vao estar no parâmetro da função. Aí você faz o que quiser com ela.

Espero ter ajudado!

E sobre o ASP.NET com WebForms... recomendo que estude bastante o ciclo de vida da página. Acho que isso é o que mais confunde os programadores que estão acostumados com WinForm. Mas depois que você entende, fica bem mais fácil.




MLALEX 04/11/2015 16:19:48
#453427
Vou estudar o que você sugeriu. Pela minha inexperiência, isso deve levar algum tempo. Talvez 1 a 2 dias. Assim que eu tiver uma posição ou uma nova dúvida, recorro á sua generosidade e lhe peço ajuda. Por enquanto VALEU!!!
MLALEX 05/11/2015 16:24:01
#453491
Não tem jeito. Vou ter que fazer o loop no javascript mesmo, então me ajudem por favor. Como faço para enviar meu array para a função javascript?

Tentei o seguinte sem sucesso:

Dim SplitOS() As String

SplitOS = Split(LblConteudo.Text, [Ô],[Ô])

ScriptManager.RegisterStartupScript(Me, Me.GetType(), [Ô]myFunction[Ô], [Ô]codeAddress([ô][Ô] & SplitOS & [Ô][ô]);[Ô], True)


Isso não funcionou. Qual é o jeito certo de fazer isso???

MLALEX 05/11/2015 17:43:19
#453497
O que deixa a gente bastante chateado é como que determinados exemplos simples não funcionam com a gente.

So para testar, joguei os valores em um listbox (no code behind tudo funciona perfeitamente) e tentei fazer um loop nesse listbox pelo javascript:

var ArrayList = document.getElementById([ô]ListBox1[ô]).value;


for (i = 0; i < ArrayList.length; i++) {
alert(ArrayList.options[i].innerHTML);
alert(ArrayList.options[i].text);
alert(ArrayList.options[i].value);
alert(ArrayList.options[i].item.value);

}



Existem 1.600.000 exemplos parecidos com esses acima. Tentei um por um, mas nenhum desses [Ô]alert[Ô] funcionou

Gente??? Que mistério é esse???
DS2T 05/11/2015 18:59:20
#453507
Primeiro:

O código está sendo disparado? Isto é, se você colocar um alert antes do for, ele vai disparar?

Segundo:

Tente mudar essa parte:

var ArrayList = document.getElementById([ô]ListBox1[ô]).value;
for (i = 0; i < ArrayList.length; i++) {



Para isso:

var ArrayList = document.getElementById([ô]ListBox1[ô]);
for (i = 0; i < ArrayList.options.length; i++) {

MLALEX 05/11/2015 19:39:51
#453511
Como diria uma antiga propaganda de televisão [Ô]Existem 1001 maneira de se preparar Neston[Ô]. Isso deve ter uns 100 anos e de vez em quando uso essa [Ô]pérola de sabedoria[Ô] em minha vida.

Se não vai de um jeito, vai de outro e as vezes, de um jeito bem mais simples.

Por enquanto, resolvi da seguinte maneira. Transformei o array em string; Joguei a string no javascript; Fiz um split e depois o loop:

Citação:

<script type=[Ô]text/javascript[Ô]>


function codeAddress2(conteudo) {

var ArrayList = conteudo.split([Ô];[Ô])

for (var i in ArrayList) {
alert(ArrayList[i]);
}

}
</script>



FUNCIONOU!!!

Vou manter o tópico aberto ainda por mais um dia para ver se não aparece mais alguma dúvida, mas já quero lhe agradecer DS2T pelo carinho e atenção comigo.

VALEU!!!
Página 1 de 2 [13 registro(s)]
Tópico encerrado , respostas não são mais permitidas