FUNCAO RETORNANDO ARRAY

LEONARDO136 12/11/2011 14:14:46
#389035
Bom pessoal estou com uma pequena duvida...
Tenho uma função que obtem do banco de dados algumas informações e preciso que essas informações
seja passadas para o elemento que a chama como array

codigo:
Private Function obter_servidores() As Array
Dim cnn As OleDbConnection
cnn = New OleDbConnection(str_cn_db2.ToString)

Dim ds As New DataSet
Dim da As OleDbDataAdapter
da = New OleDbDataAdapter([Ô]Select * from tblServidoresEmail order by cmpUso desc[Ô], cnn)

cnn.Open()
da.Fill(ds, [Ô]tblServidoresEmail[Ô])

Dim x As Integer
For x = 1 To ds.Tables(0).Rows.Count
[ô]MsgBox(ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString())
obter_servidores(x - 1) = ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString()
Next

Return {obter_servidores()}
End Function


EXEMPLO: preciso que a função obter_servidores() retorne: {[Ô]servidor1[Ô], [Ô]servidor2[Ô], [Ô]servidor3[Ô], [Ô]servidor4[Ô], [Ô]servidor5[Ô]}
PEGUDO 12/11/2011 15:17:26
#389039
Resposta escolhida
Cara,
Uma coisa que eu já vi de cara é que você tá tentando prrencher um Array vazio (obter_servidores) sem dimensiona-lo.

Tente colocar:
For x = 1 To ds.Tables(0).Rows.Count
[ô]MsgBox(ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString())
[txt-color=#0000f0]ReDim Preserve[/txt-color] obter_servidores(x - 1)
obter_servidores(x - 1) = ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString()
Next

Se der erro no ReDim, coloque antes do For.. Next: obter_servidores = New Array() (Ou algo assim).
Estou sem o VB Aqui, então qualquer dúvida posta aí.
LEONARDO136 12/11/2011 15:21:02
#389040
Citação:

:
Cara,
Uma coisa que eu já vi de cara é que você tá tentando prrencher um Array vazio (obter_servidores) sem dimensiona-lo.

Tente colocar:

For x = 1 To ds.Tables(0).Rows.Count
[ô]MsgBox(ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString())
[txt-color=#0000f0]ReDim Preserve[/txt-color] obter_servidores(x - 1)
obter_servidores(x - 1) = ds.Tables(0).Rows(x - 1).Item([Ô]cmpServidor[Ô]).ToString()
Next

Se der erro no ReDim, coloque antes do For.. Next: obter_servidores = New Array() (Ou algo assim).
Estou sem o VB Aqui, então qualquer dúvida posta aí.



não da certo isso, valeu a intenção
LLAIA 12/11/2011 16:52:04
#389044
Não pude testar aqui agora, mas tente:

  Private Function obter_servidores() As String()


LEONARDO136 12/11/2011 17:14:31
#389045
Citação:

:
Não pude testar aqui agora, mas tente:

  Private Function obter_servidores() As String()




Não, preciso retornar como uma Array (lista) com esses dados obtidos
como eu disse, retornando (ex:) {[Ô]servidor1[Ô], [Ô]servidor2[Ô], [Ô]servidor3[Ô], [Ô]servidor4[Ô], [Ô]servidor5[Ô]}
RICART 13/11/2011 14:34:24
#389073
Pelo que entendi então, vc não precisa retornar um array, basta retornar com uma string que contenha os dados relacionados desta forma. Se vc for retornar um array, seria mais viável vc passar os dados para uma variável, onde vc poderá redimensioná-la, de acordo com a quantidade de itens da sua coleção. Não tenho tempo para mostrar como fazer com array agora, mas com string, ficaria assim:

[ô] Nesse exemplo, vc pode deixar sem as chaves e fazer um split para transformar a string em um array quando precisar. Falta vc colocar também o tratamento de exceção.

Private Function obter_servidores() As String
Dim cnn As OleDbConnection
cnn = New OleDbConnection(str_cn_db2.ToString)

Dim ds As New DataSet
Dim da As OleDbDataAdapter
da = New OleDbDataAdapter([Ô]Select * from tblServidoresEmail order by cmpUso desc[Ô], cnn)

cnn.Open()
da.Fill(ds, [Ô]tblServidoresEmail[Ô])
dim strservidores as srtring =[Ô][Ô]
if ds.Tables(0).Rows.Count > 0 then
For x = 0 To ds.Tables(0).Rows.Count-1

strservidores += ds.Tables(0).Rows(x).Item([Ô]cmpServidor[Ô]).ToString & [Ô],[Ô]
Next
strservidores = [Ô]{[Ô] & mid(strservidores ,1,len(strservidores )-1) & [Ô]}[Ô]
endif

Return strservidores

End Function
LEONARDO136 13/11/2011 23:30:50
#389106
Bom pelo jeito não tem solução o que eu quero, queria simplifica o código, mas não deu.
[Ô]Problema solucionado[Ô].
PEGUDO 15/11/2011 09:42:56
#389163
    [txt-color=#0000f0]Private Sub[/txt-color] Button2_Click([txt-color=#0000f0]ByVal [/txt-color]sender [txt-color=#0000f0]As[/txt-color] System.Object, [txt-color=#0000f0]ByVal[/txt-color] e [txt-color=#0000f0]As[/txt-color] System.EventArgs) [txt-color=#0000f0]Handles[/txt-color] Button2.Click
[txt-color=#0000f0]Dim[/txt-color] Aray() [txt-color=#0000f0]As String[/txt-color]

Aray = obter_servidores()

[txt-color=#0000f0]For Each[/txt-color] Nome [txt-color=#0000f0]In[/txt-color] Aray
MsgBox(Nome)
[txt-color=#0000f0]Next
End Sub[/txt-color]

    [txt-color=#0000f0]Private Function[/txt-color] obter_servidores() [txt-color=#0000f0]As[/txt-color] Array
[txt-color=#0000f0]Dim[/txt-color] X [txt-color=#0000f0]As Integer[/txt-color] = 0
[txt-color=#0000f0]Dim[/txt-color] Aray() [txt-color=#0000f0]As String[/txt-color] = [txt-color=#0000f0]Nothing[/txt-color]

Conectar() [txt-color=#007100][ô]Conexão com o BD[/txt-color]

[txt-color=#007100][ô]Recset é uma variável do tipo ADODB.RecordSet[/txt-color]
RecSet = C.Execute([txt-color=#e80000][Ô]SELECT nome FROM tblfuncionario[Ô][/txt-color])

[txt-color=#0000f0]While Not[/txt-color] RecSet.EOF
[txt-color=#0000f0]ReDim Preserve[/txt-color] Aray(X)
Aray(X) = RecSet([txt-color=#e80000][Ô]nome[Ô][/txt-color]).Value.ToString
X += 1
RecSet.MoveNext()
[txt-color=#0000f0]End While[/txt-color]

C.Close()
RecSet.Close()
obter_servidores = Aray
[txt-color=#0000f0]Return[/txt-color] obter_servidores
[txt-color=#0000f0]End Function[/txt-color]
Tópico encerrado , respostas não são mais permitidas