Ir para conteúdo

POWERED BY:

Arquivado

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

othon

subscript out of range

Recommended Posts

estou invocando uma função no qual eu passo alguns atributos (string, long e um array bidimencional). quando eu chamo esta função me é passada a seguinte mensagem:

 

subscript out of range

 

segue abaixo o código com a chamada e logo em seguida a função chamada. (a função é padrão aqui de onde trabalho... queria saber onde estou errando na chamada)

valews mesmo galera

abração

 

 

ReDim varParam(2, 5) As Variant

Dim retorno As adodb.Recordset

Set retorno = New adodb.Recordset

 

For b = 0 To lista.ListCount - 1

mail = lista.List(b)

If (opc = 1) Then

strSql = "update pessoa set cod_operador = " & codOp & " where end_e_mail = '" & mail & "'"

 

sqlCodPessoa = "select cod_pessoa from pessoa where end_e_mail = '" & mail & "'"

sqlCodEmail = "select cod_email from email where end_email = '" & mail & "'"

Set rsCodigos = clConnect.SelecionarDados(adoOpenStatic, ReturnADORecordset, sqlCodPessoa)

codPessoa = rsCodigos(0)

Set rsCodigos = clConnect.SelecionarDados(adoOpenStatic, ReturnADORecordset, sqlCodEmail)

codEmail = rsCodigos(0)

 

varParam(1, 1) = "COD_PESSOA"

varParam(1, 2) = "NUMBER"

varParam(1, 3) = 1

varParam(1, 4) = 20

varParam(1, 5) = codPessoa

 

varParam(2, 1) = "COD_EMAIL"

varParam(2, 2) = "NUMBER"

varParam(2, 3) = 1

varParam(2, 4) = 12

varParam(2, 5) = codEmail

 

clConnect.BeginTrans

clConnect.ExecutarSQL (strSql)

Set retorno = clConnect.ExecutarSP("fun_del_email", 5, varParam)

clConnect.CommitTrans

 

MsgBox (" email deletado com sucesso!!!")

End If

next

 

aqui está o método que eu estou chamando.......................

 

Public Function ExecutarSP(strSPName As String, ByRef lngRecAffected As Long, varParam As Variant) As ADODB.Recordset

 

' Função/Propriedade .....: Executar uma stored Procedure

'os parâmetros serão passados em um array by dimensional onde:

'colune 0=nome do parâmetro

'coluna 1=tipo de dado do parâmetro (char, numeric, etc...)

'coluna 2=direção do parâmetro (input,output, etc..

'coluna 3=tamanho do parâmetro

'coluna 4=valor do parâmetro

 

On Error Resume Next

Dim strErro As String

Dim adoCommand As New ADODB.Command

Dim adoPar As ADODB.Parameter

Dim i%

'setamos a conexão...

Set adoCommand.ActiveConnection = adoCon

'setamos o tipo de command=stored procedure

adoCommand.CommandType = adCmdStoredProc

'setamos os parâmetros...

adoCommand.CommandText = strSPName

 

For i% = 0 To UBound(varParam, 2)

Set adoPar = adoCommand.CreateParameter(varParam(0, i%), varParam(1, i%), varParam(2, i%), varParam(3, i%))

adoPar.Value = varParam(4, i%)

adoCommand.Parameters.Append adoPar

If Err <> 0 Then 'deu certo?

On Error GoTo 0

Err.Raise vbObjectError + 16000, strConnectName & ".ExecutarSP", "Erro ao setar parâmetro da SP: Parãmetro " & (i% - 2) & ":Valor=" & varParam(i%) & vbCrLf & Err.Description

Exit Function

End If

Next i%

'executamos a sp..

Set ExecutarSP = adoCommand.Execute(lngRecAffected)

If Err <> 0 Then 'deu certo?

strErro = Err.Description

On Error GoTo 0

Err.Raise vbObjectError + 16000, strConnectName & ".ExecutarSP", "Erro ao executar SP:" & adoCommand.CommandText & vbCrLf & strErro

Exit Function

End If

 

End Function

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dê uma olhada nas causas do erro, talvez você possa encontrar uma solução. :)

 

Subscrito fora do intervalo (Erro 9)

 

Elementos de matrizes e membros de coleções só podem ser acessados dentro de seus intervalos definidos. As causas e soluções desse erro são as seguintes:

 

Você fez referência a um elemento de matriz inexistente.

O subscrito pode ser maior ou menor que o intervalo de subscritos possíveis ou a matriz pode não ter dimensões atribuídas neste ponto do aplicativo. Verifique a declaração da matriz para verificar seus limites superior e inferior. Use as funções UBound e LBound para limitar acessos da matriz se estiver trabalhando com matrizes que são redimensionadas. Se o índice for especificado como uma variável, verifique a ortografia do nome da variável.

 

Você declarou uma matriz, mas não especificou o número de elementos. Por exemplo, o seguinte código causa este erro:

Dim MyArray() As Integer

MyArray(8) = 234 ' Causa o Erro 9.

 

O Visual Basic não dimensiona implicitamente intervalos de matriz não especificados como 0 – 10. Em vez disso, você deve usar Dim ou ReDim para especificar explicitamente o número de elementos de uma matriz.

 

Você fez referência a um membro de coleção inexistente.

Tente usar a construção For Each...Next em vez de especificar elementos de índice.

 

Você usou um formato de taquigrafia de subscrito que especificou implicitamente um elemento inválido.

Por exemplo, quando você usa o operador ! com uma coleção, ! especifica implicitamente uma chave. Por exemplo, object!keyname.value é equivalente a object.item(keyname).value. Neste caso, um erro é gerado se keyname representa uma chave inválida na coleção. Para corrigir o erro, use um nome ou índice de chave válido para a coleção.

 

É talvez isso possa ajudar. Boa sorte!

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.