Ir para conteúdo

POWERED BY:

Arquivado

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

claudemircruz

[Resolvido] Transações em ASP SQLServer O que há de errado

Recommended Posts

tenho duas tabelas (na verdade mais DO QUE ISTO, MAIS COMECEMOS POR AI)que preciso preencher, agenda_prof_qtd_atender E agenda_prof_atend, e estou tentando usar transasções no asp com os seguinte código:

 

ASP
<%

   'Option Explicit  

   On Error Resume Next

   Dim oConn, oRs

   Dim Maximo

   Dim Atual

   Dim Inserir

   Dim SQUERY

   

   Inserir = 0

   

   set oConn = Server.CreateObject("ADODB.Connection")

   oConn.Open MM_conexao2_STRING

   

   if err.Number <> 0 then

           response.Write("<BR>Erro ao abrir conexão...")

           response.Write("Descrição do erro: " & err.Description & "...<BR>")

           

           ObjectContext.SetAbort()

           Response.End()

   else

          Response.Write("A conexão foi aberta com exito...<BR>")

          ObjectContext.SetComplete()   

          'Paciente, Data, Horário_Id

          ' Prof_q_Encaminhou, Cnes_enc,

          Response.Write("<P class='chapeu'>Paciente: "&session("nUsuarioNome")&"</P>")  

   

          set oRS = Server.CreateObject("ADODB.RecordSet")

         

          SQUERY = "select * from agenda_prof_qtd_atender where horario_id = " + request.QueryString("horario_id") + " and data_consulta = '" + request.QueryString("data") + "'"

          oRS.open SQUERY, oConn, 3

          RESPONSE.Write( SQUERY+ "          "+ Cstr(oRS.RecordCount)+ "<br>")

          if (oRS.RecordCount > 0) then

                 Maximo = Cstr(oRS.Fields.Item("num_max").Value)

                 Atual = Cstr(oRS.Fields.Item("num_atual").Value)

                 RESPONSE.Write(  "<br> Maximo = "+Maximo+ "  <= M  A=>  Atual =" + Atual + "<br>")

                 SQUERY = "UPDATE agenda_prof_qtd_atender SET num_atual = num_atual + 1 where horario_id = " + request.QueryString("horario_id") + " and data_consulta = '" + request.QueryString("data") + "' "

                 RESPONSE.Write( SQUERY+ "<br>")

                 if (MAXIMO <> "") AND (Maximo > Atual) then

                        oRS.Execute SQUERY

                        Inserir = 1

                 else

                        OnTransactionAbort()

                 end if

          else

                 SQUERY = "INSERT INTO agenda_prof_qtd_atender (horario_id, data_consulta, num_max, num_atual ) VALUES (" + request.QueryString("horario_id") + ", '" + request.QueryString("data") + "','" + request.QueryString("num_max_pac") + "',1 )"

                 'RESPONSE.Write( SQUERY+ "<br>")

                 oRS.Execute SQUERY

                 Inserir = 1

          end if

          if (Inserir <> 0 ) then

                 SQUERY = "INSERT INTO agenda_prof_atend (co_usuario, data_consulta, horario_id) VALUES ('"+session("nUsuarioID")+"', '"+ request.QueryString("data") + "',  "+ request.QueryString("horario_id")+ ")"

                 'RESPONSE.Write( SQUERY+ " LINHA 58<br>")

                 oConn.Execute SQUERY

          end if

          if err.Number <> 0 Then

                 Response.Write "<BR>Erro ao executar a comandos...N="+Cstr(err.Number)+"<BR>"

                 Response.Write "<BR>Descrição do erro: " & err.Description & "...<BR>"

                 oRS.Close

                 oConn.Close

                 Set oConn = Nothing

                 ObjectContext.SetAbort

                 Response.End

          else

                 Response.Write "<BR>Comandos realizados com êxito...<BR>"

                 ObjectContext.SetComplete

          end If

   end if

oRS.Close

oConn.Close

        Response.Write "<BR>A conexão foi fechada com êxito...<BR>"

        Set oRS = Nothing

        set oConn = Nothing

       

        Response.Write "<BR>O teste foi concluído com êxito...<BR>"

 

        Sub OnTransactionCommit()

                        Response.Write "<p><B>A transação foi realizada</B>."

                        Response.Write( SQUERY + "<br>")

                        Response.Write "Esta mensagem é proveniente de "

                        Response.Write "Manipulador de eventos OnTransactionCommit()."

        End Sub

 

        Sub OnTransactionAbort()

                        Response.Write "<p ><B>A transação foi anulada</B>."

                        Response.Write( SQUERY + "<br>")

                        Response.Write "Esta mensagem é proveniente de "

                        Response.Write "Manipulador de eventos OnTransactionAbort()."

        End Sub

%>

 

 

e consigo ver com as linhas que coloquei pra tentar achar o erro o seguinte:

 

 

A conexão foi aberta com exito...

 

Paciente: ANA UMBELINA DA SILVA XAVIER

 

select * from agenda_prof_qtd_atender where horario_id = 2 and data_consulta = '2007/11/2' 0

 

Erro ao executar a comandos...N=438

 

Descrição do erro: O objeto não dá suporte para a propriedade ou método...

 

A transação foi anulada.INSERT INTO agenda_prof_atend (co_usuario, data_consulta, horario_id) VALUES ('1600135272000005', '2007/11/2', 2)

Esta mensagem é proveniente de Manipulador de eventos OnTransactionAbort().

 

 

ALGUEM PODE ME AJUDAR A DESCUBRIR QUAL O ERRO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

já tentou retirar Set oConn = Nothing ObjectContext.SetAbortque está dentro do on error resume next?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Faz o seguinte, comente o ON ERROR RESUME NEXT, deixa ele apresentar o erro em sua forma nativa e mostre pra nós.

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Fiz o que pediu, DAW e ocorreu o seguinte erro:

 

Tipo de erro:

Microsoft OLE DB Provider for SQL Server (0x80040E07)

The conversion of a char data type to a datetime data type resulted in an out-of-range datetime value.

/smsproducao/agendando_consulta_pac.asp, line 35

 

 

a linha da query gerada para ser executada e dá o erro é a seguinte:

 

select COUNT(horario_id) AS TOTAL

from agenda_prof_qtd_atender where horario_id = 2 and data_consulta = '2007/10/19'

 

Quando executo a query no SQL Query Analyser não dá erro nenhum.

 

não entendi? O que acha que pode ser

Compartilhar este post


Link para o post
Compartilhar em outros sites

Estranho mesmo...

 

A query parece estar perfeita mas reparei que ele acusa o erro na linha 35.

Pode ver nesta página qual a linha 35 e indicar pra gente Claudemir?

 

Vamo lá que vai funcionar.

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

...

ASP
SQUERY = "select count(horario_id) as Total from agenda_prof_qtd_atender where horario_id = " + request.QueryString("horario_id") + " and data_consulta = '" + request.QueryString("data") + "'"

               

oRS.open SQUERY, oConn, 3 ' <= esta é a linha 35

         

RESPONSE.Write( "            "+ Cstr(oRS.Fields.Item("Total").Value)+ "<br>")

          if (oRS.Fields.Item("Total").Value > 0) then

 

...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Antes dá linha 35 dê um response.Write por favor em SQUERY

ASP
response.Write SQUERY : response.End
para eu ver como ele está mandando esta data para o banco. Por favor...

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

DAW agora está assim:select count(horario_id) as Total from agenda_prof_qtd_atender where horario_id = 2 and data_consulta = '2007/19/10'mas quando a data está assim : '2007/10/19' dá erro com o SELECT. O estranho é que se for fazer o update:UPDATE agenda_prof_qtd_atender SET num_atual = num_atual + 1 where horario_id = 2 and data_consulta = '2007/19/10' ai dá erro na data, tenho que por 2007/10/19.o que devo configurar no sqlserver?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quando você mandar pro SQL Server pode mandar no formato BR, 19/10/2007 que vai beleza.

Se estiver com collate certinho do banco.

 

Quanto a consultar você faz assim ó ...

ASP
SQUERY = "select count(horario_id) as Total from agenda_prof_qtd_atender where horario_id = " + request.QueryString("horario_id") + " and data_consulta = Convert(Datetime, '" + request.QueryString("data") + "')"

 

Vê se funfa.

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Será que eu tô maluco?o ADODB.Connection aceita data tipo 'aaaa/mm/dd' eo ADODB.RecordSet aceita data tipo 'aaaa/dd/mm'que maluco, mais é isto que está acontecendo aqui comigo, alguém sabe como acabar com isto, e os dois ficarem iguais.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Claudemir,

 

usa o convert para datetime em suas duas querys então, acho que funfa.

Como eu indiquei no post anterior, coloque tanto na consulta quanto na inserção.

 

[]tz ;)

Compartilhar este post


Link para o post
Compartilhar em outros sites

update agenda_prof_qtd_atender set num_atual = num_atual + 1 where horario_id = 5 and data_consulta = '2007/10/18' MESMO COM A DATA NO TIPO 'AAAA/MM/DD' NÃO ESTÁ FAZENDO O UPDATE, ESTÁ DANDO ERRO.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tem que ficar:

update agenda_prof_qtd_atender set num_atual = num_atual + 1 where horario_id = 5 and data_consulta = Convert(Datetime, '2007/10/18')

 

Entendeu?

Compartilhar este post


Link para o post
Compartilhar em outros sites

cAROS COLEGAS O PROBLEMA FOI SANADO, DAW A CONVERSÃO DEU CERTO, É QUE TINHA OUTRO ERRO NO IF.oBRIGADO.AGORA PRECISO SABER COMO FAZER IMPRESSÃO MATRICIAL COM ASP, E DAS MÁQUINAS DE CUPOM FISCAL.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Legal Claudemir, com calma tudo sai!

 

Crie outro tópico com esta nova dúvida, ok?

 

[]tz ;)

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.