Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Galera, sei que função serve pra retornar um valor e subs para executar comandos. Eu quero criar uma sub, função ou seja lá o que for pra poder conectar em um banco diferente em cada página .ASP.
Vejam como eu fiz:
sub AbreConexao(NomeBanco)
caminho = "../bancos/" & NomeBanco & ".mdb"
Dim banco
Dim strConexao
strConexao="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(caminho)
Set banco = SERVER.CreateObject("ADODB.CONNECTION")
Set ObjRs = Server.CreateObject("ADODB.Recordset")
banco.OPEN strConexao
end sub
Aí, dentro da página eu chamo e uso o recordset que criei, coisa e tal:
call AbreConexao("federacoes")
sql = "SELECT * FROM federacoes order by id"
ObjRs.Open sql, banco,3,3
while not ObjRs.eofAlguém sabe o motivo? Não tá retornando erro pq tá dentro de um select mas se for necessário eu tiro do select pra ver o erro que dá...
Já dei um "print" na variável 'caminho' e está certa....Código adaptado pra aparecer o erro (sem <select>):
<div style="float:left; padding-bottom:20px;">
Selecione as federações ao lado
<%
sql = "SELECT * FROM federacoes order by id"
ObjRs.Open sql, banco,3,3
while not ObjRs.eof
response.write(ObjRs("id"))
response.write("<br />")
ObjRs.MoveNext
wend
ObjRs.Close
Set ObjRs = nothing
%>
</div>
e na linha onde abro o banco, dá o seguinte erro:
Microsoft VBScript runtime error '800a01a8'
Object required: ''
/cbv2008/institucional/federacoes.asp, line 97
o que tem na linha 97?
pelo visto você está colocando o nome de uma variavel no lugar do nome de um objeto
a linha 97 é a "ObjRs.Open sql, banco,3,3".
Se eu tiro a sub e faço a conexão manualmente, sem chamar variáveis e sub-rotinas funciona normalmente; acho que o problema está na sub; devo estar fazendo algo que não pode ser feito... não um erro de digitação ou algo do gênero mas algo do tipo "to tentando abrir um banco dentro de uma rotina quando isso só pode ser feito com funções".
Fora da SUB coloca assim:
Public banco
E posta o resultado.
pelo visto o erro vai ocorrer porque o recordset também é declarado dentro da sub. as variaveis devem ser declaradas fora da função
galera valeu a ajuda, olhem só como funcionou, na minha página .ASP eu coloquei o seguinte código:
<!--#include file="../includes/conexao.asp" -->
<%
call AbreConexao("federacoes")
%>
e o include:
<%
Dim caminho,banco,strConexao
Set banco = SERVER.CreateObject("ADODB.CONNECTION")
Set ObjRs = Server.CreateObject("ADODB.Recordset")
sub AbreConexao(NomeBanco)
caminho = "../bancos/" & CStr(NomeBanco) & ".mdb"
strConexao="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(caminho)
banco.OPEN strConexao
end sub
sub FechaConexao()
banco.close
set banco = nothing
end sub
%>
Valeu a dica sobre declarar variável fora da função!
E hargon, eu tentei do jeito que você falou mas deu o mesmo erro...
Brigadão pela ajuda galera!
Muito bom. http://forum.imasters.com.br/public/style_emoticons/default/thumbsup.gif
Estranho ter dado o erro, eu utilizo da forma que falei.
Sobre o que você fez, já que usou SET, não era obrigatório usar DIM.
Da forma que falei seria:
Public banco, ObjRs
Set ObjRs = Server.CreateObject("ADODB.Recordset")
sub AbreConexao(NomeBanco)
Dim strConexao
Set banco = SERVER.CreateObject("ADODB.CONNECTION")
caminho = "../bancos/" & CStr(NomeBanco) & ".mdb"
strConexao="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(caminho)
banco.OPEN strConexao
end sub
eu tinha tentado só colocando o Public, sem tirar o ObjRs de dentro da sub ;)
mas posso aproveitar pra perguntar qual é exatamente a diferença entre "public" e "dim" ?
Public e Dim são utilizados para declaram variáveis.
Dim declara variável dimensional e Public declara variável global.
No caso acima tanto faz usar Public ou Dim.
Posta o erro ae pra agente vê!!!