FUN?ÃO QUE RETORNA ARRAY, MAS GERANDO RUNTIME ERRO

ROTTZEUS 22/09/2016 07:51:46
#467271
Pessoal, bom dia!!!

Estou com um problema em uma função que retorna uma array de string. Porém, já pesquisei, realizei várias tentativas dos exemplos que pesquisei, mas não consigo resolver o problema do error 9. Segui fielmente um exemplo postado no site do MSDN, porém com as devidas adaptações para o meu caso que seria String e ainda assim, não consigo visualizar onde está o problema. Será que algum colega do fórum poderia dar uma luz?

FUNÇÃO
Public Function PesquisaTicket(NumTicket As String) As String()
If cn.State <> 0 Then
Dim Dados() As String
Set rs = New ADODB.Recordset
MsgBox NumTicket
sql = [Ô] Select * from Tabela where TabTic = [ô][Ô] & NumTicket & [Ô][ô][Ô]
rs.Open sql, [Ô]Provider=SQLOLEDB.1;Persist Security Info=SSPI;Initial Catalog = BancoDados; Data Source = ServidorSQL, adOpenStatic, adLockReadOnly[Ô]
rs.MoveFirst

ReDim Dados(1 To 5) [ô]Orientação de outro exemplo também testado
If rs.RecordCount <> 0 Then
Dados(1) = rs([Ô]TabTic[Ô])
Dados(2) = rs([Ô]TabServ[Ô])
Dados(3) = rs([Ô]TabDes[Ô])
Dados(4) = [Ô]Hora[Ô]
Dados(5) = rs([Ô]TabValor[Ô]) [ô]campo em string também
Else
Dados(1) = [Ô]0[Ô]
Dados(2) = [Ô]Ticket Não Localizado[Ô]
Dados(3) = [Ô]Ticket Não Localizado[Ô]
Dados(4) = [Ô]Ticket Não Localizado[Ô]
Dados(5) = [Ô]Ticket Não Localizado[Ô]
End If
PesquisaTicket = Dados()
End If
End Function



CHAMADA DA FUNÇÃO
Dim Integrapagto As New clsIntegr
Dim DadosCons() As String
DadosCons = Integrapagto.PesquisaTicket(numticketpassado)

[ô]ReDim DadosCons(1 To 5) [ô]já tentei redim seguindo outro exemplo pesquisado
Dim ii As Integer
For ii = 1 To UBound(DadosCons) [ô]já tentei (1 to 5), ou LBound(DadosCons) to UBound(DadosCons)
Debug.Print (DadosCons(ii))
[ô]MsgBox DadosCons(1) [ô] & [Ô], [Ô] & DadosCons(2) & [Ô], [Ô] & DadosCons(3) & [Ô], [Ô] & DadosCons(4) & [Ô], [Ô] & DadosCons(5)
Next
LUIZCOMINO 22/09/2016 09:15:59
#467276
tente
obs: seu array sempre começa com 0

Dim ii As Integer
For ii = 1 To UBound(DadosCons) -1
Debug.Print (DadosCons(ii))
[ô]MsgBox DadosCons(1) [ô] & [Ô], [Ô] & DadosCons(2) & [Ô], [Ô] & DadosCons(3) & [Ô], [Ô] & DadosCons(4) & [Ô], [Ô] & DadosCons(5)
Next
MARCELO.TREZE 22/09/2016 11:50:29
#467290
colega é o seguinte primeiro é entender o que você deseja, e pelo meu entender você pretende preencher uma array dinâmica com dados do banco, é isso mesmo?

se for isso precisa entender como funciona uma array dinâmica. O REDIM redimensiona a array, porém ele apagas os dados contidos nela, preservando apenas o ultimo registro, então para resolver isto você precisa usar o PRESERVE que irá redimensionar a array preservando os dados nela.Porém pelo que vejo no seu código você deseja colocar todos campos da array, e ela só funcionará para um campo da tabela, e como resolver isso é criar uma array multidimensional, ficaria algo mais ou menos assim.



Dim Dados(1,5) As String [ô] declare esta variavel no general do form

if cn.State <> 0 Then
Dim X As Integer
Set rs = New ADODB.Recordset
MsgBox NumTicket
sql = [Ô] Select * from Tabela where TabTic = [ô][Ô] & NumTicket & [Ô][ô][Ô]
rs.Open sql, [Ô]Provider=SQLOLEDB.1;Persist Security Info=SSPI;Initial Catalog = BancoDados; Data Source = ServidorSQL, adOpenStatic, adLockReadOnly[Ô]

Do While Not RS.EOF
X = X+1
Redim Preserve Dados(X,0) = rs([Ô]TabTic[Ô])
Redim Preserve Dados(X,1)= rs([Ô]TabServ[Ô])
Redim Preserve Dados(X,2) = rs([Ô]TabDes[Ô])
Redim Preserve Dados(X,3) = [Ô]Hora[Ô]
Redim Preserve Dados(X,4) = rs([Ô]TabValor[Ô]) [ô]campo em string também
Loop


End If


assim você irá carregar os dados na array de forma dimensional podendo exibi-los assim

Dim ii As Integer
For ii = 0 To UBound(Dados) [ô]repare que a array foi DADOS que eu ja criei la no inicio, e onde armazenei os dados
Debug.Print Dados(ii,0) & [Ô], [Ô] & Dados(ii,1) & [Ô], [Ô] & Dados(ii,2) & [Ô], [Ô] & Dados(ii,3) & [Ô], [Ô] & Dados(ii,4)
Next



bom e é isso, lembrando que não fiz teste no código acima então poderá ou não ocorrer erros em sua execução, mas o fundamento é este.
Faça seu login para responder