Ir para conteúdo

POWERED BY:

Arquivado

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

notax

[Resolvido] Problemas no ObjConn

Recommended Posts

To com um mistério aqui que não to sabendo resolver...

 

Tenho um arquivo chamado login.asp, se nesse arquivo coloco esse trecho de codigo:

Set objConn =  Server.CreateObject("ADODB.Connection")
path_bd = request.servervariables("APPL_PHYSICAL_PATH")
path_bd = replace (path_bd, "wwwroot\", "")
objConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="&path_bd&"db\bd.mdb"
categoria = "geral"
ComandoSQL = "SELECT * FROM site where categoria = '"&categoria&"' "
Set ObjRs = objConn.Execute(ComandoSQL)

 

 

Funciona perfeito!

 

Já se eu coloco esse trecho abaixo no arquivo conexao.asp

 

Sub AbrirDB()

Set objConn =  Server.CreateObject("ADODB.Connection")
path_bd = request.servervariables("APPL_PHYSICAL_PATH")
path_bd = replace (path_bd, "wwwroot\", "")
objConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="&path_bd&"db\bd.mdb"

end sub

 

 

E lá no arquivo login.asp mudo para isso:

 

<!--#include file="conexao.asp"-->
<%
Call AbrirDB
categoria = "geral"
ComandoSQL = "SELECT * FROM site where categoria = '"&categoria&"' "
Set ObjRs = objConn.Execute(ComandoSQL)

%>

 

 

Dá esse erro: Object required: 'objConn'

 

Só pra adiantar... tenho certeza que o include está funcionando pq já debuguei conexao.asp e veio certinho!

 

Pq será? Onde está o meu erro?

 

Valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não é porque você está declarando isso aqui ?

 

Set ObjRs = objConn.Execute(ComandoSQL)

Se você colocar somente isso aqui:

 

objConn.Execute(ComandoSQL)

Funciona ?

Compartilhar este post


Link para o post
Compartilhar em outros sites

teste assim:

caminho= server.mappath("db\bd.mdb")
conexao="dbq="&caminho&";driver={microsoft access driver (*.mdb)}"
set objConn=server.createobject("adodb.connection")
objConn.open conexao

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ué, mas se eu não declarar o recordset a consulta vai parar de funcionar, não?

 

Acho que nada a ver... uma coisa é o set do objeto de conexão e outra o set de recordset... mas enfim, só a minha opinião...

 

 

Além disso o erro ocorre no set do objeto conexão que é antes dessa linha, ou seja, certamente não é por aí não...

 

Srá que rolam mais dicas?

Compartilhar este post


Link para o post
Compartilhar em outros sites

TED'K, obrigado pelo retorno, mas dessa forma deu esse erro:

 

[Microsoft][ODBC Microsoft Access Driver]General error Unable to open registry key 'Temporary (volatile) Jet DSN for process 0x1f1c Thread 0x4190 DBC 0x10b90e8c Jet'.

 

Linha 15 = objConn.open conexao

 

Meu codigo esta assim:

Sub AbrirDB()

'Set objConn =  Server.CreateObject("ADODB.Connection")
'path_bd = request.servervariables("APPL_PHYSICAL_PATH")
'path_bd = replace (path_bd, "wwwroot\", "")
'objConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="&path_bd&"db\bd.mdb"

caminho= server.mappath("db\bd.mdb")
conexao="dbq="&caminho&";driver={microsoft access driver (*.mdb)}"
set objConn=server.createobject("adodb.connection")
objConn.open conexao

end sub

 

Fiz alguma coisa errada?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você precisa declarar o objConn na pagina k esta chamando o include tb

 

Dim objconn

<!--#include file="conexao.asp"-->
<%
Dim objconn
Call AbrirDB
categoria = "geral"
ComandoSQL = "SELECT * FROM site where categoria = '"&categoria&"' "
Set ObjRs = objConn.Execute(ComandoSQL)
%>

Sub AbrirDB()
'Set objConn =  Server.CreateObject("ADODB.Connection")
'path_bd = request.servervariables("APPL_PHYSICAL_PATH")
'path_bd = replace (path_bd, "wwwroot\", "")
'objConn.Open "PROVIDER=MICROSOFT.JET.OLEDB.4.0;DATA SOURCE="&path_bd&"db\bd.mdb"

caminho= server.mappath("db\bd.mdb")

---> aqui , tente assim
'conexao="dbq="&caminho&";driver={microsoft access driver (*.mdb)}"
conexao="provider=microsoft.JET.OLEDB.4.0;Data Source=" & Server.MapPath("db/bd.mdb")
set objConn=server.createobject("adodb.connection")
objConn.open conexao
end sub

neste code , supondo k seu banco esta em

C:\Inetpub\wwwroot\db\bd.mdb

Compartilhar este post


Link para o post
Compartilhar em outros sites

sempre uso o Option explicit, além de melhorar a performance das páginas você detectará erros de digitação imediatamente, evitando horas de depuração de código para descobrir que o problema era uma variável com alguma letra trocada

Compartilhar este post


Link para o post
Compartilhar em outros sites

Declarando a variável funcionou...

 

e eu achei isso muito estranho... alguém sabe tecnicamente o pq disso? Tem a ver com o escopo dae variáveis?

 

Outra dúvida:

 

Sempre que a sintaxe comoça com objConn.execute Update... não funciona...

 

Sei lá... to achando muito estranho isso tudo e ta dando no fim muito mais trabalho...

 

Acho que vou fazer um include só pra ter o caminho e vou manter a bertura e o fechamento das conexões como antigamente...

 

O que me dizem?

Compartilhar este post


Link para o post
Compartilhar em outros sites

option explicit, melhorar a performance das páginas você detectará erros de digitação

e você deve declarar a variavel de um include na pagina k esta chamando

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sim! Eu entendo que o option.explicit ajude a encontrar/evitar/sanar erros. Agora se o código não tem erros não entendo que option.explicit agilize alguma coisa, estou errado?

 

Além disso, mesmo declarando a variável o problema nos updates continua... quando uso a essa sintaxe, por exemplo, como no trecho abaixo:

 

<!--#include file="conexao.asp"-->

<%
'request de variáveis... 
Call AbrirDB

objConn.Execute "update site set title = '"&title&"', description = '"&descricao&"', revisit = "&revisit&", key = '"&key&"', titulo = '"&titulo&"', texto = '"&texto&"' where codigo = "&codigo&" "

Call FecharDB

%>

Esse codigo por exemplo imprime esse erro em tela: Syntax error in UPDATE statement.

 

Esse erro não acontece se set e abro o objconn sem ser por intermedio de includes ou subs... pq será?

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o k esta sendo passado e certifique-se que o tipo dos campos estaun corretos

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí é que tá... nem preciso debugar ela, pq se seto e abro a conexão na própria página do update fucniona perfeito... só ocorre erro quando tento fazer isso por um include...

 

A questão é realmente muito chata!

 

Será que rolam mais helps?

 

valews

Compartilhar este post


Link para o post
Compartilhar em outros sites

imagine um arquivo com esse conteudo, tendo o arquivo em

c:\Inetpub\wwwroot\atualizacao.asp e o arquivo de include no diretorio

c:\Inetpub\wwwroot\conn

 

<!--#include file="conn/conexao1.asp"-->
	<% 'abro a conexao
	call abreconexao
	'crio o rs
	set rs=Server.createobject("ADODB.Recordset")
	'crio a SQL
	SQL="UPDATE login SET login='"&varlogin&"',senha='"&varsenha&"',email='"&varemail&"' WHERE codigo="&varcodigo&""
	rs.open SQL,conexao,1,3

Compartilhar este post


Link para o post
Compartilhar em outros sites

Obrigado! Setando o Objeto Recordset funciona perfeito...

 

Mas existe alguma forma de fazer funcionar apenas executando a instrução através do ObjConn?

Compartilhar este post


Link para o post
Compartilhar em outros sites

você pode abrir um recordset atraves do metodo Execute do obj connection, ou metodo Open do obj recordset, ou metodo Execute do obj command

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.