Problema con llamada a un procedimiento Almacenado
Tengo una palicacion en VB6 contra Oracle 9i la cual interactúa sin problemas pero en un procedimiento determinado me da un error (me dice que no encuentra un dato que debe recuperar, ya que lo inserto previamente en la misma llamada al procedimiento). Entonces para comprobarlo lo depuro directamente en oracle y no me da ningún error. Sabéis que le puede pasar en Visual Gracias
¿Estás utilizando una función o bien un procedure?
Mira, esta es la funcion donde llamo al procedure Public Sub loadMails() Dim strRaw As String Dim i As Long Dim lCount, lPos As Long Dim strSubject, strMsgId, strDate As String Dim Item As MSComctlLib.ListItem Dim curDateTime, maxDateTime, minDateTime As Date Dim strFileName As String Dim nIndex As Integer Dim mail As String Dim subject As String Dim Texto As String Dim texto1 As String Dim texto2 As String Dim texto3 As String Dim buzon As String Dim IncidenciaId As Long Dim NumAttach As Long Dim a As Long Dim name As String Dim ACount As Long Dim Pakete As String Dim retardo As Long Dim cmdmail As New ADODB.Command Dim res As Long Error_ON = False If vbVersionId = 13 Then Pakete = "IT_ALTA_X_MAIL_PKG.IT_ALTA_X_MAIL" Else Pakete = "IT_ALTA_X_MAIL12_PKG.IT_ALTA_X_MAIL12" End If sBar.SimpleText = "Loading emails...." lCount = g_oStore.GetEmailCount(SZ_INBOX) 'get email total count in mailbox "Inbox" lsvMails.ListItems.Clear For i = 0 To lCount - 1 strMsgId = g_oStore.GetEmailId(SZ_INBOX, i) strFileName = g_oStore.GetEmailFileName(SZ_INBOX, strMsgId) m_oMsg.RawContent = g_oStore.GetEmail(SZ_INBOX, i) strSubject = m_oMsg.GetSubject() strMsgId = g_oStore.GetEmailId(SZ_INBOX, i) ''''''''''''''''''''''''''''''''''''''''''' mail = m_oMsg.GetFromAddress subject = m_oMsg.GetSubject Texto = m_oMsg.GetAltBody If Len(Texto) > 4000 Then texto1 = Mid(Texto, 1, 4000) Texto = Mid(Texto, 4000) If Len(Texto) > 4000 Then texto2 = Mid(Texto, 1, 4000) Texto = Mid(Texto, 4000) If Len(Texto) > 4000 Then texto3 = Mid(Texto, 1, 4000) Else texto3 = Texto End If Else texto2 = Texto texto3 = "" End If Else texto1 = Texto texto2 = "" texto3 = "" End If buzon = Frmpop3.txtServer.Text ACount = m_oMsg.GetAttachmentCount() 'Getting total count of attachments If ACount > 0 Then attach = 1 Else attach = 0 End If Escribir_Log ".- Mail Recibido de: " & mail, 2 With cmdmail .ActiveConnection = Conn .CommandText = Pakete .CommandType = adCmdStoredProc .Parameters.Append .CreateParameter("mail", adVarChar, adParamInput, 100, mail) .Parameters.Append .CreateParameter("subject", adVarChar, adParamInput, 100, subject) .Parameters.Append .CreateParameter("texto1", adVarChar, adParamInput, 4000, texto1) .Parameters.Append .CreateParameter("texto2", adVarChar, adParamInput, 4000, texto2) .Parameters.Append .CreateParameter("texto3", adVarChar, adParamInput, 4000, texto3) .Parameters.Append .CreateParameter("attach", adVarChar, adParamInput, 50, attach) .Parameters.Append .CreateParameter("buzon", adVarChar, adParamInput, 100, buzon) .Parameters.Append .CreateParameter("IncidenciaId", adNumeric, adParamOutput, 38) .Parameters.Append .CreateParameter("ErrCode", adNumeric, adParamOutput, 38) 'Ejecuta el Procedimiento For retardo = 1 To 100: Next retardo .Execute End With If cmdmail("ErrCode") > 0 Then Error_ON = True 'ErrResult = Mensaje(cmdmail("ErrCode"), False, False, "", "") Else IncidenciaId = cmdmail("IncidenciaId") For a = 1 To ACount 'guardar los attach name = m_oMsg.GetAttachmentName(a) m_oMsg.SaveAttachmentAs RutaMail & name, a Agregar_Documento IncidenciaId, RutaMail & name, "INC" 'Dialog.List1.AddItem g_POPMSG.GetAttachmentName(i) 'Getting file name of specified attachment Next res = Enviar_mail(mail, txtSalida.Text, txtUser.Text, txtPass.Text, TxtApariencia.Text) g_oStore.DeleteEmail SZ_INBOX, i End If Set cmdmail = Nothing m_nItemIndex = UnselectedIndex End Sub Luego dentro del procedure llamoa a otros procedures y es donde me casca. Pero comente solo me casca si lo lanzo desde visual no desde el propio depurador de Oracle Un saludo
¿Qué error te está dando Oracle?
Pues me dice que no encuentra datos. No se si es que como dentro del procedimiento que te comento llamo a otros procedimientos y es como si no viese una sesión a otra (inserta un registro en una tabla y luego lo consulta, que es donde me da el error) pero solo cuando lo ejecuto desde visual
¿Has probado de comitar explícitamente después de hacer la llamada?
No serviría de nada, ya que cuando hago la llamada, ya me devuelve el error, ademas lo de hacer commit lo realice cada pocos procesos dentro del procedimiento y sigue igual
Siento mucho la tardanza, pero es que he estado acabando una aplicación sobre PL/SQL y VB y he estado muy atareado. Lo tienes ya acabado, en caso contrario, ¿qué excepción te da oracle?