Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

praxade

Sistema de cotação de dólar

Recommended Posts

Olá pessoal, estou desenvolvendo um sistema de cotação de dólar. Ele está dando um erro do intervalo, o erro é esse:Erro de tempo de execução do Microsoft VBScript erro '800a0009' Subscrito fora do intervalo: '[number: 1]' Ae está a linha que ele acusa o erro:sql = "UPDATE TabelaCotacao SET Data = '" & (dados(0)) & "', Compra = " & NumeroSQL(dados(1)) & ", Venda = " & NumeroSQL(dados(2))Fernando :rolleyes:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente sua matriz dados não está correta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Matriz dados e não MATRIZ DE DADOS.

dados(0) - isso me indica que é uma matriz e que se está requisitando o valor cujo indice dela é 0(zero). O erro apresentado indica que não existe posição 1(um) em sua matriz.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Acho que esses falores não são fixos vam mudar ...certo...sql = "UPDATE TabelaCotacao SET Data ='"&(dados(0))&"', Compra = '"&NumeroSQL(dados(1))&"', Venda = '"&NumeroSQL(dados(2))"'"conexão.execute(sql)OBS:::Foi oq ue praxade falu.... esse campo ae....(dados(0))..meio compriado...outra coisa pq não postar o codigo todo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Este é o código:

 

 

<font color="#003366" size="1" face="Verdana, Arial, Helvetica, sans-serif">

<%

Session.LCID = 1046

Set obj = CreateObject("MSXML2.ServerXMLHTTP")

obj.open "GET", "http://www.bcb.gov.br/htms/infecon/taxas/taxas.htm"

obj.send

textHTML = obj.ResponseText

dados = LCase(textHTML)

 

i = 1

i = inStr(i,dados,"taxa de venda")

 

i = inStr(i,dados,"<tr")

f = inStr(i,dados,"</tr")

dados = Mid(dados,i,(f-i))

 

dados = Replace(dados,"</font>","|",1,2)

dados = Trim(LimpaHTML(dados))

dados = Split(dados,"|") 'Aqui ele cria a matriz, será que é aqui que está errado?

dat = Date

set conn = Server.CreateObject("ADODB.Connection")

conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("dolar.mdb")

sql = "UPDATE TabelaCotacao SET Data = '" & (dados(0)) & "', Compra = " & NumeroSQL(dados(1)) & ", Venda = " & NumeroSQL(dados(2)) 'Aqui é a linha que está dando o erro!

conn.execute(sql)

conn.close

set conn = nothing

'inf = Array("Data","Compra","Venda")

'For i = lbound(dados) to ubound(dados)

' Response.Write inf(i) & " : " & dados(i) & "<br>"

'Next

 

 

Function Strzero(val,num)

val = Trim(CStr(val))

Strzero = String(num-len(val),"0") & val

End Function

 

Function ConverteData (valor,formato)

if not isDate(valor) then

Response.Write "Data Inválida !"

Response.End

else

formato = UCase(formato)

if Trim(formato) = "" then formato = "DD/MM/YYYY HH:MI:SS"

formato = Replace(formato,"YYYY",Year(valor))

formato = Replace(formato,"MM",Strzero(Month(valor),2))

formato = Replace(formato,"DD",Strzero(Day(valor),2))

formato = Replace(formato,"HH",Strzero(Hour(valor),2))

formato = Replace(formato,"MI",Strzero(Minute(valor),2))

ConverteData = Replace(formato,"SS",Strzero(Second(valor),2))

end if

End Function

 

Function LimpaHTML(matriz)

Do While True

ini = InStr(1,matriz,"<")

If ini = 0 Then Exit Do

fim = InStr(ini,matriz,">")

parcial = Mid(matriz,ini,fim-ini+1)

matriz = Replace(matriz,parcial,"")

Loop

LimpaHTML = matriz

End Function

 

Function NumeroSQL(numero)

dim x

x = numero

x = Replace(x,".","")

x = Replace(x,",",".")

If isNumeric(x) Then

NumeroSQL = x

Else

NumeroSQL = numero

End If

End Function

 

%>

</font>

 

 

Bem pessoal ae está meu código, o link ond estou testando esse sistema é esse:

 

http://www.portal.netium.com.br/start/dolar/exibe.asp

 

Obrigado pela a atenção.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estive olhando o código fonte html da página "http://www.bcb.gov.br/htms/infecon/taxas/taxas.htm", que é de onde vem os valores e reparei que não existe mais formatação de font diretamente no html (TAGS <font></font>), e era justamente uma tag </font> que era substituida para gerar posteriormente a Matriz. É nescessário se verificar e alterar a função.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, estava verificando o código fonte da pág "http://www.bcb.gov.br/htms/infecon/taxas/taxas.htm" , e não consegui enxergar a função matriz que era antes </font>. E agora?

você te alguma idéia como posso descobrir a função que estão usando???

Outros acham que é Array que está errado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O Array está errado exatamente por não mais possuir a TAG html </font> no arquivo requisitado. Agora será nescessário fazer um novo estudo para separar esses dados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Caro Salgado.O que que eu devo muda no meu código. Tentei de tudo e não consegui, ae vai ele.Este é o código:<font color="#003366" size="1" face="Verdana, Arial, Helvetica, sans-serif"><%Session.LCID = 1046Set obj = CreateObject("MSXML2.ServerXMLHTTP")obj.open "GET", "http://www.bcb.gov.br/htms/infecon/taxas/taxas.htm"obj.sendtextHTML = obj.ResponseTextdados = LCase(textHTML)i = 1i = inStr(i,dados,"taxa de venda")i = inStr(i,dados,"<tr")f = inStr(i,dados,"</tr") dados = Mid(dados,i,(f-i)) dados = Replace(dados,"</font>","|",1,2) dados = Trim(LimpaHTML(dados)) dados = Split(dados,"|") 'Aqui ele cria a matriz, será que é aqui que está errado?dat = Dateset conn = Server.CreateObject("ADODB.Connection")conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("dolar.mdb")sql = "UPDATE TabelaCotacao SET Data = '" & (dados(0)) & "', Compra = " & NumeroSQL(dados(1)) & ", Venda = " & NumeroSQL(dados(2)) 'Aqui é a linha que está dando o erro!conn.execute(sql)conn.closeset conn = nothing'inf = Array("Data","Compra","Venda")'For i = lbound(dados) to ubound(dados)' Response.Write inf(i) & " : " & dados(i) & "<br>"'NextFunction Strzero(val,num)val = Trim(CStr(val))Strzero = String(num-len(val),"0") & valEnd FunctionFunction ConverteData (valor,formato)if not isDate(valor) thenResponse.Write "Data Inválida !"Response.Endelseformato = UCase(formato)if Trim(formato) = "" then formato = "DD/MM/YYYY HH:MI:SS"formato = Replace(formato,"YYYY",Year(valor))formato = Replace(formato,"MM",Strzero(Month(valor),2))formato = Replace(formato,"DD",Strzero(Day(valor),2))formato = Replace(formato,"HH",Strzero(Hour(valor),2))formato = Replace(formato,"MI",Strzero(Minute(valor),2))ConverteData = Replace(formato,"SS",Strzero(Second(valor),2))end ifEnd FunctionFunction LimpaHTML(matriz)Do While Trueini = InStr(1,matriz,"<")If ini = 0 Then Exit Dofim = InStr(ini,matriz,">")parcial = Mid(matriz,ini,fim-ini+1)matriz = Replace(matriz,parcial,"")LoopLimpaHTML = matrizEnd FunctionFunction NumeroSQL(numero)dim xx = numerox = Replace(x,".","")x = Replace(x,",",".")If isNumeric(x) ThenNumeroSQL = xElseNumeroSQL = numeroEnd IfEnd Function%></font>Valeu Salgado, e espero pela a sua ajudaO sistema está trabalhando com banco de dados, por causa do conversor de moeda.Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Achei a troca que resolve o problema. Substitua aquele </font> por </td>.Assim:

<%
Session.LCID = 1046
Set obj = CreateObject("MSXML2.ServerXMLHTTP")
obj.open "GET", "http://www.bcb.gov.br/htms/infecon/taxas/taxas.htm"
obj.send
textHTML = obj.ResponseText
dados = LCase(textHTML)

i = 1
i = inStr(i,dados,"taxa de venda")

i = inStr(i,dados,"<tr")
f = inStr(i,dados,"</tr")
dados = Mid(dados,i,(f-i))

dados = Replace(dados,"</td>","|",1,2)
dados = Trim(LimpaHTML(dados))

dados = Split(dados,"|")
dat = Date
set conn = Server.CreateObject("ADODB.Connection")
conn.open "Driver={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("dolar.mdb")
sql = "UPDATE TabelaCotacao SET Data = '" & (dados(0)) & "', Compra = " & NumeroSQL(dados(1)) & ", Venda = " & NumeroSQL(dados(2)) 'Aqui é a linha que está dando o erro!
Response.Write SQL
conn.execute(sql)
conn.close
set conn = nothing
'inf = Array("Data","Compra","Venda")
'For i = lbound(dados) to ubound(dados)
' Response.Write inf(i) & " : " & dados(i) & "<br>"
'Next


Function Strzero(val,num)
val = Trim(CStr(val))
Strzero = String(num-len(val),"0") & val
End Function

Function ConverteData (valor,formato)
if not isDate(valor) then
	Response.Write "Data Inválida !"
	Response.End
else
	formato = UCase(formato)
	if Trim(formato) = "" then formato = "DD/MM/YYYY HH:MI:SS"
	formato = Replace(formato,"YYYY",Year(valor))
	formato = Replace(formato,"MM",Strzero(Month(valor),2))
	formato = Replace(formato,"DD",Strzero(Day(valor),2))
	formato = Replace(formato,"HH",Strzero(Hour(valor),2))
	formato = Replace(formato,"MI",Strzero(Minute(valor),2))
	ConverteData = Replace(formato,"SS",Strzero(Second(valor),2))
end if
End Function

Function LimpaHTML(matriz)
Do While True
	ini = InStr(1,matriz,"<")
	If ini = 0 Then Exit Do
	fim = InStr(ini,matriz,">")
	parcial = Mid(matriz,ini,fim-ini+1)
	matriz = Replace(matriz,parcial,"")
Loop
LimpaHTML = matriz
End Function

Function NumeroSQL(numero)
dim x
x = numero
x = Replace(x,".","")
x = Replace(x,",",".")
If isNumeric(x) Then
	NumeroSQL = x
Else
	NumeroSQL = numero
End If
End Function
%>

Compartilhar este post


Link para o post
Compartilhar em outros sites

É que ficou um response.Write, é só tirar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.