ARRAY VB6

CYBERMAC 08/04/2016 14:41:53
#460768
Pessoal, boa tarde.

Gostaria da ajuda de vocês para que criar uma array onde partindo do princípio que o fim do array é a quantidade de registros que possuo no banco de dados.

Construi um Form com 14 pictures onde cada uma represente os primeiros 14 registros do banco de dados, e, se o usuário clicar em qualquer um deles, ele deve trazer o código do produto relacionado à foto. Bem o caso é que as fotos estão vindo corretamente, mas ao criar o código para ler o array do vb e trazer o código do produto correto, ele sempre traz o registro número 1, ou seja, a minha aplicação não criou os 14 arrays pedidos.
Segue código para visualizem,

Private Sub Form_Load()
Dim mcodp(0 To 14)
dataprod.DatabaseName = App.Path & [Ô]\DbDivisao.mdb[Ô]
sqlprodutos = [Ô]SELECT * FROM PRODUTOS ORDER BY DESC_PRODUTO[Ô]
dataprod.RecordSource = sqlprodutos
dataprod.Refresh

dataprod.Caption = [Ô]Registros 1/[Ô] & Tproduto.RecordCount

datapedido.DatabaseName = App.Path & [Ô]\DbDivisao.mdb[Ô]

Tproduto.MoveFirst
mcaminho = Tproduto([Ô]Foto[Ô])

For i = 0 To 14
mcodp(i) = Tproduto([Ô]IdProduto[Ô])
Picture2(i).Picture = LoadPicture(mcaminho)

Tproduto.MoveNext
mcaminho = Tproduto([Ô]Foto[Ô])
Next i
End Sub

Desde já agradeço.
PLUGSOFTSM 08/04/2016 15:38:23
#460771
Se bem me lembro do antigo access e vb6, ao [Ô]puxar[Ô] uma leitura do banco de dados, sempre vai mostrar a quantidade de registros 1 a menos que vc percorra a tabela inteira
Tenta fazer assim
dataprod.Refresh
[txt-color=#8A2BE2]Tproduto.movelast[/txt-color]
dataprod.Caption = [Ô]Registros 1/[Ô] & Tproduto.RecordCount
GANDA.NICK 09/04/2016 08:04:26
#460791
Resposta escolhida
Pense em usar ADO em vez de DAO....

Há um metodo do recordeset que se chama GetRows, ele transforma o resultado da pesquisa em um [Ô]array 2D[Ô]

Não conheço seu sistema, mas não seria melhor criar as PictureBox[ô]s em run time? São sempre 14 mesmo?

Dim mcodp(0 To 14) [ô]são 15 elementos.... e está a declarar o array dentro do evento Form_Load(), ou seja, não vai ter acesso a ele fora desse evento

Você nem precisa do array, pode guardar a informação na propriedade Tag ou ToolTipBox da picturebox...
ex:
Picture2(i).Tag = Tproduto([Ô]IdProduto[Ô])

[ô]Depois no evento click da picture
Private Sub Picture2_Click(Index As Integer)
MsgBox Picture2(Index).Tag
End Sub



Melhor a ordem de cada linha do seu codigo, isto não faz sentido
 Tproduto.MoveFirst
mcaminho = Tproduto([Ô]Foto[Ô])

For i = 0 To 14
mcodp(i) = Tproduto([Ô]IdProduto[Ô])
Picture2(i).Picture = LoadPicture(mcaminho)

Tproduto.MoveNext
mcaminho = Tproduto([Ô]Foto[Ô])
Next i


LUIZCOMINO 09/04/2016 13:34:59
#460797
Amigo se vc quer acessar seu array o tempo todo no formulário vc tem que deixar ele declarado fora da sub, vc esta declarando ele dentro do form load, ao acabar a sub vc perde acesso a ele tmb,declare ele logo no inicio do codigo.

Dim mcodp(0 To 14)
Private Sub Form_Load()
dataprod.DatabaseName = App.Path & [Ô]\DbDivisao.mdb[Ô]
sqlprodutos = [Ô]SE....


Se usar o Option Explicit declare o array logo abaixo

Option Explicit
Dim mcodp(0 To 14)
Tópico encerrado , respostas não são mais permitidas