Ir para conteúdo

Arquivado

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

marcosbruno.mb

ADODB.Recordset erro '800a0e78' Operação não permitida quando

Recommended Posts

erro:

 

ADODB.Recordset erro '800a0e78'

Operação não permitida quando o objeto está fechado.

teste.asp, linha 40

-----

a linha 40 é essa: <% do while (not RS.eof) %>

----

código inteiro:

<%

Public wCABEC(4)
wCABEC(0)="HORA"
wCABEC(1)="NR_ACORTO"
wCABEC(2)="CASH"
wCABEC(3)="REFIN"
wCABEC(4)="TOTAL"
set ARQ1=Server.CreateObject("Scripting.FileSystemObject")
Set CONEXAO=Server.CreateObject("ADODB.Connection")
ConnString = "Provider=SQLOLEDB.1; SERVER=xxx.xxx.xxx.xxx; DATABASE=xxx; UID=xxxxxxx; PASSWORD=xxxxxx; OPTION=3"
CONEXAO.Open ConnString
SQL2="DECLARE @DATA DATETIME SET @DATA='20/09/2013' DECLARE @TABHORA TABLE (HORA INT,NR_ACORDO INT,CASH MONEY, REFIN MONEY, TOTAL MONEY)INSERT INTO @TABHORA SELECT HORA = DATEPART(hh, BB.EMISSAOTIME), NR_ACORDO = BB.NR_ACORDO, CASH = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN (BA.[VR_AVISTA]) ELSE (BA.[VR_ENTRADA]) END), REFIN = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN 0 ELSE (BA.[VR_FINANC]) END), TOTAL = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN (BA.[VR_AVISTA]) ELSE (BA.[VR_ENTRADA]) END) + SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN 0 ELSE (BA.[VR_FINANC]) END) FROM dbo.BOLETOS AS BB (NOLOCK), dbo.BOL_AUX AS BA (NOLOCK) WHERE (BB.EMISSAO = @DATA) AND (BB.PARCELA = 0) AND (ISNULL(BB.STATUS, 0) <> 3) AND(BB.PAGAMENTO IS NULL) AND BB.BOLETAGEM IS NULL AND BB.NR_ACORDO = BA.NR_ACORDO GROUP BY BB.NR_ACORDO,DATEPART(hh, BB.EMISSAOTIME) SELECT HORA,NR_ACORTO = COUNT(*),CASH = SUM(CASH), REFIN = SUM(REFIN), TOTAL = SUM(TOTAL) FROM @TABHORA GROUP BY HORA UNION ALL SELECT HORA=99, NR_ACORTO = COUNT(*), CASH = SUM(CASH), REFIN = SUM(REFIN), TOTAL = SUM(TOTAL) FROM @TABHORA"
Set RS=CONEXAO.Execute(SQL2)
%>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="iso-8859-1">
<title>Relatório</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="">
<meta name="author" content="">
</head>
<body>
<table class="table flat-table flat-table-1">
<thead>
<tr>
<% for index=0 to (RS.fields.count-1) %>
<th>
<% Response.Write wCABEC(index) %>
</th>
<% next %>
<% do while (not RS.eof) %>
</tr>
</thead>
<tbody>
<tr>
<% for index=0 to (RS.fields.count-1) %>
<td>
<%= RS(index)%>
</td>
<% next %>
</tr>
<% RS.MoveNext %>
<% Loop %>
</tbody>
</table>
</body>
</html>
<% CONEXAO.Close %>
----------
alguém sabe porque está acontecendo esse erro?

Compartilhar este post


Link para o post
Compartilhar em outros sites

verifique se o MDAC esta atualizado também. Este erro pode ser causado quando você tenta acessar valores a partir de um conjunto de registros vazio ou a partir de um conjunto de registros que já foi fechado. A causa mais comum, no entanto, parece resultar de chamar um procedimento armazenado que não usa SET NOCOUNT ON.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifique as permissões de pastas e arquivos

tudo permitido

verifique se o MDAC esta atualizado também. Este erro pode ser causado quando você tenta acessar valores a partir de um conjunto de registros vazio ou a partir de um conjunto de registros que já foi fechado. A causa mais comum, no entanto, parece resultar de chamar um procedimento armazenado que não usa SET NOCOUNT ON.

 

também acho que não seja esse o problema, já que testei tanto em localhost quando em servidor, e em ambos da o mesmo erro, a unica diferença é que no servidor o erro é apontado em ingles

 

ADODB.Recordset error '800a0e78'

Operation is not allowed when the object is closed.

/teste.asp, line 47

só para agregar informações, se eu troco aquela sentença toda do SQL por algo simples do tipo "select * from controle" aparece numa boa, sem erro...

 

isso mostra que também não é nenhum problema com a conexão com o banco

Compartilhar este post


Link para o post
Compartilhar em outros sites

dá um response.write na sua string SQL para ver o que esta sendo passado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

apenas para teste, execute sua SQL através do objeto recordset ao invés do objeto connection, tipo:

 

Set CONEXAO=Server.CreateObject("ADODB.Connection")

ConnString = "Provider=SQLOLEDB.1; SERVER=xxx.xxx.xxx.xxx; DATABASE=xxx; UID=xxxxxxx; PASSWORD=xxxxxx; OPTION=3"
CONEXAO.Open ConnString
Set rs=Server.CreateObject("ADODB.Recordset")
SQL2="DECLARE @DATA DATETIME SET @DATA='20/09/2013' DECLARE @TABHORA TABLE (HORA INT,NR_ACORDO INT,CASH MONEY, REFIN MONEY, TOTAL MONEY)INSERT INTO @TABHORA SELECT HORA = DATEPART(hh, BB.EMISSAOTIME), NR_ACORDO = BB.NR_ACORDO, CASH = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN (BA.[VR_AVISTA]) ELSE (BA.[VR_ENTRADA]) END), REFIN = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN 0 ELSE (BA.[VR_FINANC]) END), TOTAL = SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN (BA.[VR_AVISTA]) ELSE (BA.[VR_ENTRADA]) END) + SUM(CASE WHEN (BA.[PERC_FINANC] = 0) THEN 0 ELSE (BA.[VR_FINANC]) END) FROM dbo.BOLETOS AS BB (NOLOCK), dbo.BOL_AUX AS BA (NOLOCK) WHERE (BB.EMISSAO = @DATA) AND (BB.PARCELA = 0) AND (ISNULL(BB.STATUS, 0) <> 3) AND(BB.PAGAMENTO IS NULL) AND BB.BOLETAGEM IS NULL AND BB.NR_ACORDO = BA.NR_ACORDO GROUP BY BB.NR_ACORDO,DATEPART(hh, BB.EMISSAOTIME) SELECT HORA,NR_ACORTO = COUNT(*),CASH = SUM(CASH), REFIN = SUM(REFIN), TOTAL = SUM(TOTAL) FROM @TABHORA GROUP BY HORA UNION ALL SELECT HORA=99, NR_ACORTO = COUNT(*), CASH = SUM(CASH), REFIN = SUM(REFIN), TOTAL = SUM(TOTAL) FROM @TABHORA"

RS.Open, SQL, Conexao, 1,3

' assim vc usa as opções de cursortype e locktype

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.