criquio 20/10/2011, 00:22
Quando você carrega os dados na listbox usando o AddItem, você abre o recordset e logo depois fecha-o. Isso significa que os dados ficam carregados nela sem ir novamente à tabela, a não ser que você peça um Requery:
Dim rs As Recordset ' Declara um recordset
Set rs = DBEngine.Workspaces(0).OpenDatabase("Caminho do backend", False, False, "MS Access;PWD="SenhaDoBackEnd").OpenRecordset("NomeDatabela") ' Abre a tabela
Me.NomeDaList.RowSource = "" ' Limpa a listbox
Me.NomeDaList.RowSourceType = "value list" ' Declara o tipo de fonte como lista de valores
Do While Not rs.EOF ' Enquanto não chegar no fim da tabela...
Me.NomeDaListbox. AddItem rs!Campo1 & ";" & rs!Campo2 ' ... adicionar os campos 1 e 2
rs.MoveNext ' Mover para o próximo registro
Loop ' Dar um loop na tabela
rs.Close ' Fecha a tabela
Set rs = Nothing ' Destroi o recordset
Observe que após preencher a listbox, fechamos a conexão com a tabela. Essa prática, dessa forma, pode não adicionar todos os registros á listbos, caso sejam muitos milhares de registros, mas para menos registros funciona bem. Outra coisa que pode ajudar, é você usar filtros ao declarar o recordset para restringir o resultado. Por exemplo, você pode carregar apenas os registros de um determinado intervalo de datas:
Set rs = DBEngine.Workspaces(0).OpenDatabase("Caminho do backend", False, False, "MS Access;PWD="SenhaDoBackEnd").OpenRecordset("SELECT * FROM NomeDatabela WHERE Data>=#" & Me.txtDataIncial & #" And Data <=#" & Me.txtDataFinal & "#")
Vale lembrar ainda que vez ou outra pode ser necessário dar um Requery para atualizar a listbox novos registros inseridos na tabela após o carregamento da mesma, mas o uso dela reduz bastante a ida ao Recordset, reduzindo o tráfego na rede.