Ir para conteúdo

Arquivado

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

matheusarruda

Problema ao ler dados de banco de dados com vinculo

Recommended Posts

Prezados,
Estou desenvolvendo um portal para a intranet da empresa onde trabalho, nessa intranet estou colocando uma página de aniversariantes do mês eu havia criado uma tabela com os dados dos funcionários manualmente e realizado a busca até ai tudo funcionou perfeitamente, porém a empresa é de porte multinacional e na área a qual trabalho existem 250 funcionários e está sempre alterando saindo gente e entrando gente nova então tive a seguinte ideia, buscar os dados direto do banco de dados do RH, criei uma tabela que esta com vínculos a tabela do RH, essa tabela possui usuário e senha para acesso e está em um servidor cujo o DSN se chama TO10.

Informações sobre o código:

Código que funciona com a tabela manual sem vínculos:

<%
Option Explicit
Session.LCID = 1046
Dim ObjConn, ObjRs, SQL
Set ObjConn = Server.CreateObject("ADODB.Connection")
Set ObjRs = Server.CreateObject("ADODB.RecordSet")
ObjConn.Open "DBQ=" & Server.MapPath("FuncionariosLTQ.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
SQL = "SELECT NmFunc, Area, DtAniversario, Email FROM TbFuncionariosLTQ WHERE month(DtAniversario) = month(Date()) ORDER BY DtAniversario;"
Set ObjRs = ObjConn.Execute(SQL)
dim data
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Aniversariantes do Mês</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="69%">
<tr>
<td width="50%"><img src="Informacoes.jpg" alt="Aniversariantes do Mês" width="262"
height="66"></td>
<td width="50%"><a href="Navegador.asp"><img src="BotaoInicio.bmp" align="right"
border="0" hspace="0" width="37" height="22"></a><a href="TipoAniversariantes.asp"><img
src="BotaoVoltar.bmp" align="right" border="0" hspace="0" width="37" height="26"></a></td>
</tr>
</table>
<p><br>
</p>
<table border="1" width="69%" bgcolor="#002866" height="1">
<tr>
<th align="left" width="205" bgcolor="#C0D9D9"><p align="center"><font face="arial">Nome</font></th>
<th align="left" width="62" bgcolor="#C0D9D9"><p align="center"><font face="arial">Área</font></th>
<th align="left" width="75" bgcolor="#C0D9D9"><p align="center"><font face="arial">Dia</font></th>
<th align="left" width="154" bgcolor="#C0D9D9"><p align="center"><font face="arial">E-mail</font></th>
</tr>
<% while not ObjRs.EOF
data=""
dim x,y,controle,t,data2
data2=""
data2 = ObjRs("DtAniversario")
x=1
y=1
controle=0
while controle < 2
if mid(data2,x,1)="/" then
controle=controle+1
end if
if controle < 2 then
data = data & mid(data2,x,1)
end if
x=x+1
wend
%>
<tr>
<td bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("NmFunc") %></font></td>
<td width="62" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("Area") %></font></td>
<td width="75" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write data%></font></td>
<td width="154" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("Email") %></font></td>
</tr>
<%ObjRs.MoveNext%>
<%Wend%>
<%
ObjConn.Close
Set ObjConn = Nothing
Set ObjRs = Nothing
%>
</table>
<p> </p>
</body>
</html>

Código que estou tentando usar na tabela com vínculos.

 

<%

Option Explicit
Session.LCID = 1046
Dim ObjConn, ObjRs, SQL
Set ObjConn = Server.CreateObject("ADODB.Connection")
Set ObjRs = Server.CreateObject("ADODB.RecordSet")
ObjConn.Open "DBQ=" & Server.MapPath("FuncionariosLTQvinculada.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
SQL = "SELECT NmFunc, Aniversario, Email FROM ACESITA_EMPREGADOS_ACE_SN WHERE and ACESITA_RH_EMPREGADOS_SN month(Aniversario) = month(Date()) ORDER BY Aniversario;"
dim data
%>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<meta name="GENERATOR" content="Microsoft FrontPage 3.0">
<title>Aniversariantes do Mês</title>
</head>
<body>
<table border="0" cellpadding="0" cellspacing="0" width="69%">
<tr>
<td width="50%"><img src="Informacoes.jpg" alt="Aniversariantes do Mês" width="262"
height="66"></td>
<td width="50%"><a href="Navegador.asp"><img src="BotaoInicio.bmp" align="right"
border="0" hspace="0" width="37" height="22"></a><a href="TipoAniversariantes.asp"><img
src="BotaoVoltar.bmp" align="right" border="0" hspace="0" width="37" height="26"></a></td>
</tr>
</table>
<p><br>
</p>
<table border="1" width="69%" bgcolor="#002866" height="1">
<tr>
<th align="left" width="205" bgcolor="#C0D9D9"><p align="center"><font face="arial">Nome</font></th>
<th align="left" width="62" bgcolor="#C0D9D9"><p align="center"><font face="arial">Área</font></th>
<th align="left" width="75" bgcolor="#C0D9D9"><p align="center"><font face="arial">Dia</font></th>
<th align="left" width="154" bgcolor="#C0D9D9"><p align="center"><font face="arial">E-mail</font></th>
</tr>
<% while not ObjRs.EOF
data= ""
dim x,y,controle,t,data2
data2= ""
data2 = ObjRs("Aniversario")
x=1
y=1
controle=0
while controle < 2
if mid(data2,x,1)="/" then
controle=controle+1
end if
if controle < 2 then
data = data & mid(data2,x,1)
end if
x=x+1
wend
%>
<tr>
<td bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("NmFunc") %></font></td>
<td width="62" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("Area") %></font></td>
<td width="75" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write data%></font></td>
<td width="154" bgcolor="#F0F0F0"><p align="center"><font size="2" face="arial"><% Response.write ObjRs("Email") %></font></td>
</tr>
<%ObjRs.MoveNext%>
<%Wend%>
<%
ObjConn.Close
Set ObjConn = Nothing
Set ObjRs = Nothing
%>
</table>
<p> </p>
</body>
</html>
Erro gerado:
Página abre normalmente, porem sem dados na tabela e exibe o seguinte erro:

ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

/DadosApl/AIT/cadernos/PC0009129/site_novo/aniversariantes/Aniversariantes.asp, line 43

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual exatamente a linha 43?

 

o erro diz que voce fechou o objeto antes dessa linha e depois tenta fazer uma operação com ele

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom dia Mário,
A linha é essa:

<% while not ObjRs.EOF


Continuação abaixo da linha 43

43. <% while not ObjRs.EOF
44.
45. data= ""
dim x,y,controle,t,data2
data2= ""
data2 = ObjRs("Aniversario")
x=1
y=1
controle=0
while controle < 2
if mid(data2,x,1)="/" then
controle=controle+1
end if
if controle < 2 then
data = data & mid(data2,x,1)
end if
x=x+1
wend
67. %>

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual codigo voce está usando exatamente

 

acima postou um onde abre o recorset

 

abaixo outro que não fez isso pode ser esse o erro

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario o primeiro código funciona normalmente, porem ele pega dados de uma tabela que eu fiz toda manual sem nenhum vinculo.

O segundo código eu estou tentando adaptar para a seguinte situação.

Aqui na empresa temos um banco de dados .mdb que é atualizado pelo RH, esse banco de dados possui usuário e senha para acesso o DSN do banco de dados se chama TO10, e as tabelas que preciso buscar dados delas são "ACESITA_EMPREGADOS_ACE_SN e ACESITA_RH_EMPREGADOS_SN".

Ai eu fiz o seguinte, criei um banco de dados com as pesquisas e nas tabelas eu simplesmente criei vínculos para a tabela do RH, quando eu abro essa tabela no access eu preciso escolher o servidor "TO10" e digitar o Usuário e Senha, nesse caso criei um usuário e senha teste no servidor "ACteste" e "Ac_teste" (User e Senha).
Agora preciso fazer com que a página crie essa conexão para o banco de dados funcionar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mas o erro está no segundo certo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

é porque voce não abriu o recordset mesmo

 

No primeiro codigo tem está linha

 

Set ObjRs = ObjConn.Execute(SQL)

 

no segundo não tem

Compartilhar este post


Link para o post
Compartilhar em outros sites

Já havia feito testes com essa linha, quando adiciono essa linha a página não abre e me aparece o seguinte erro.

 

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression 'and ACESITA_RH_EMPREGADOS_SN month(Aniversario) = month(Date())'.

/DadosApl/AIT/cadernos/PC0009129/site_novo/aniversariantes/Aniversariantes.asp, line 10


Acredito que esse problema ocorre ao tentar ler a tabela ACESITA_RH_EMPREGADOS_SN, pois para ler a mesma é preciso criar um parâmetro de conexão com o servidor TO10.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não necessariamente

 

imprima na tela o valor da SQL para tentarmos localizar o erro de sinaxe

 

mas a abertura do recorset deve ser feita com certeza

 

no aguardo

Compartilhar este post


Link para o post
Compartilhar em outros sites

O valor seria o texto de consulta?

"SELECT ACESITA_RH_EMPREGADOS_SN.NOM_ABREV_EMPRG AS NmFunc, ACESITA_RH_EMPREGADOS_SN.SIG_IDENT_LOTAC AS Area, Day([DAT_NASCI_EMPRG]) & "/" & Month([DAT_NASCI_EMPRG]) AS Aniversario, ACESITA_RH_EMPREGADOS_SN.NOM_EMAIL_EMPRG AS Email

FROM ACESITA_EMPREGADOS_ACE_SN INNER JOIN ACESITA_RH_EMPREGADOS_SN ON (ACESITA_EMPREGADOS_ACE_SN.COD_IDENT_EMPRE=ACESITA_RH_EMPREGADOS_SN.COD_IDENT_EMPRE) AND (ACESITA_EMPREGADOS_ACE_SN.COD_REG_EMPRG=ACESITA_RH_EMPREGADOS_SN.COD_REG_EMPRG)
WHERE (((ACESITA_RH_EMPREGADOS_SN.SIG_IDENT_LOTAC) Like "PLQ*") AND ((Month([DAT_NASCI_EMPRG]))=Month(Date())) AND ((ACESITA_RH_EMPREGADOS_SN.COD_SITUA_USUAR)="A"))
ORDER BY Day([DAT_NASCI_EMPRG]);"

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aparentemente seu erro está no INNER JOIN

 

Não compreendi bem o que quer fazer mas a estrutura deveria ser

 

TABELA1 INNER JOIN TABELA2 ON TABELA1.CAMPO = TABELA2.CAMPO

 

no seu tem um

 

TABELA1 INNER JOIN TABELA2 ON (TABELA1.CAMPO = TABELA2.CAMPO AND TABELA1.CAMPO2 = TABELA2.CAMPO2)

 

Use apenas o campo que relaciona as tabelas na construção do INNER JOIN

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boa sorte se estiver por aqui ainda continuo a ajudar

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mario,
acredito que demos um passo importante para solucionar o problema, refiz as condições do SQL adicionando as condições diretas da tabela do RH, o erro agora é a conexão com o servidor que está falhando segue o erro:

Microsoft OLE DB Provider for ODBC Drivers error '80004005'

[Microsoft][ODBC Microsoft Access Driver] ODBC--connection to 'TO10' failed.

/DadosApl/AIT/cadernos/PC0009129/site_novo/aniversariantes/Aniversariantes.asp, line 9


O sistema puxou corretamente o vinculo da tabela, o problema agora é criar um parâmetro de conexão com o servidor TO10.

Segue abaixo o código de conexão atualizado:

<%
Option Explicit
Session.LCID = 1046
Dim ObjConn, ObjRs, SQL
Set ObjConn = Server.CreateObject("ADODB.Connection")
Set ObjRs = Server.CreateObject("ADODB.RecordSet")
ObjConn.Open "DBQ=" & Server.MapPath("FuncionariosLTQvinculada.mdb") & ";Driver={Microsoft Access Driver (*.mdb)}"
SQL = "SELECT NOM_ABREV_EMPRG, SIG_IDENT_LOTAC, DAT_NASCI_EMPRG, NOM_EMAIL_EMPRG FROM ACESITA_EMPREGADOS_ACE_SN WHERE month(DAT_NASCI_EMPRG) = month(Date()) ORDER BY DAT_NASCI_EMPRG;"
Set ObjRs = ObjConn.Execute(SQL)
dim data
%>

Preciso informar ao código os parâmetros para conexão no TO10 que são:
Data source: TO10
TNS Service Name: po40

User ID: Acteste

Password: acteste


Compartilhar este post


Link para o post
Compartilhar em outros sites

Tentou usar os dados já na conexão?

Compartilhar este post


Link para o post
Compartilhar em outros sites

ObjConn.Open "DBQ=" & Server.MapPath("FuncionariosLTQvinculada.mdb") & ";Driver={Microsoft Access Driver (*.mdb)};Uid=Acteste;Pwd=acteste"

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.