Ir para conteúdo

POWERED BY:

Arquivado

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

yogodoshi

[Resolvido] Problema na sub para conectar ao banco

Recommended Posts

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.eof

mas não tá funcionando...

Algué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....

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

o que tem na linha 97?

 

pelo visto você está colocando o nome de uma variavel no lugar do nome de um objeto

Compartilhar este post


Link para o post
Compartilhar em outros sites

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".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fora da SUB coloca assim:

Public banco

 

E posta o resultado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

pelo visto o erro vai ocorrer porque o recordset também é declarado dentro da sub. as variaveis devem ser declaradas fora da função

Compartilhar este post


Link para o post
Compartilhar em outros sites

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!

Compartilhar este post


Link para o post
Compartilhar em outros sites

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

Compartilhar este post


Link para o post
Compartilhar em outros sites

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" ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

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.

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.