ABIR RAPIDO BANCO DE DADOS
pessoal estou com problema meu prog. esta muito lento para abrir o B dados ex.
Vou abrir banco de dados cliente e abro o banco para uma possivel consulta usando o combox mas esta me demorando muito para abrir as telas visando que a abertura vai no form principal da tela . entao ela demora para abrir por causa da abertura do B dados.
Meus relatorios tambem estao lentos uso DBGrid para visualizar relatorios e esta demorando para pesquisar 100 arquivos uns 15 minutos. EX.
Dim AreaTrabalho As Workspace
Dim query As String
Dim dyn As Dynaset
Set AreaTrabalho = DBEngine.Workspaces(0)
Set xxbco = AreaTrabalho.OpenDatabase(App.Path & "\Cadastro.Mdb", False, False)
query = "Select * From Cliente order by Codigo"
Set dyn = xxbco.CreateDynaset(query)
While Not dyn.EOF
ComBox.AddItem dyn("Codigo") & ""
dyn.MoveNext
Wend
xxbco.Close
como agilizaria essa abertura
Vou abrir banco de dados cliente e abro o banco para uma possivel consulta usando o combox mas esta me demorando muito para abrir as telas visando que a abertura vai no form principal da tela . entao ela demora para abrir por causa da abertura do B dados.
Meus relatorios tambem estao lentos uso DBGrid para visualizar relatorios e esta demorando para pesquisar 100 arquivos uns 15 minutos. EX.
Dim AreaTrabalho As Workspace
Dim query As String
Dim dyn As Dynaset
Set AreaTrabalho = DBEngine.Workspaces(0)
Set xxbco = AreaTrabalho.OpenDatabase(App.Path & "\Cadastro.Mdb", False, False)
query = "Select * From Cliente order by Codigo"
Set dyn = xxbco.CreateDynaset(query)
While Not dyn.EOF
ComBox.AddItem dyn("Codigo") & ""
dyn.MoveNext
Wend
xxbco.Close
como agilizaria essa abertura
"Select * From Cliente order by Codigo"
- Não use o "*" , coloque o nome de cada campo que vc quer trazer.
- traga somente os campos que vc vai usar, executando uma nova query qdo vc precisar de outros campos
- substitua o DO WHILE por um FOR NEXT:
sendo i um inteiro
For i = 1 to RS.Recordcount
Next
- Verifique a modelagem da sua base de dados. Aplique os conceitos de normalização.
Abraços
- Não use o "*" , coloque o nome de cada campo que vc quer trazer.
- traga somente os campos que vc vai usar, executando uma nova query qdo vc precisar de outros campos
- substitua o DO WHILE por um FOR NEXT:
sendo i um inteiro
For i = 1 to RS.Recordcount
Next
- Verifique a modelagem da sua base de dados. Aplique os conceitos de normalização.
Abraços
E veja algums artigos sobre ADO, acredito que é mais rapido ( tanto para o programador tanto para o programa )
vc está fecha o banco de dados depois que faz a consulta ?
se estiver, deixe o banco de dados sempre aberto para fazer usas consultas
só uma sujestão
se estiver, deixe o banco de dados sempre aberto para fazer usas consultas
só uma sujestão
Abra seu banco de dados no Form_Activate e não no Form_Load. Assim ele vai abrir sua tela primeiro, carregar os componentes e tal e depois vai executar a abertura de seu banco de dados. Assim o usuário fica vendo a tela enquanto espera.
A sim... siga as outras dicas acima!!
Abraços,
Milton
A sim... siga as outras dicas acima!!
Abraços,
Milton
Para "minimizar" a impressão de espera no carregamento, use uma tela de splash enquanto os dados são carregados.
Abs
Abs
Discordo de vc caro amigo DREAMPEPPERS99. Embora isso seja amplamente questionado por muitos usuários, a conexão mais rápida para banco de dados Access é via DAO, conforme já foi comprovado em vários testes.
Depende do Access que vc está usando LGUSTAVOC. o DAO só é mais rápido com Access 97.
é importante ressaltar que o uso correto do tipo de cursor faz diferença. o Cursor setado como "adOpenForwardOnly" é mais rápido que os outros (ele lê para frente), mas dependendo do que vc precisa, vc irá usar u m"adOpenDynamic" ou outro.
Abraços.
é importante ressaltar que o uso correto do tipo de cursor faz diferença. o Cursor setado como "adOpenForwardOnly" é mais rápido que os outros (ele lê para frente), mas dependendo do que vc precisa, vc irá usar u m"adOpenDynamic" ou outro.
Abraços.
query = "Select [txt-color=#ff0000]Codigo[/txt-color] From Cliente order by Codigo"
Set dyn = xxbco.[txt-color=#0000ff]openrecordset[/txt-color](query)
[txt-color=#ff0000]do[/txt-color] While Not dyn.EOF
ComBox.AddItem dyn("Codigo") & ""
dyn.MoveNext
[txt-color=#0000ff]loop[/txt-color]
[txt-color=#ff0000]set dyn=nothing[/txt-color]
Deixa sua consulta trazer so os campos necessário ao seu combo por q dependendo do tamanho de sua tabela isso pode se tornar + pessado
espero ter ajudado
Set dyn = xxbco.[txt-color=#0000ff]openrecordset[/txt-color](query)
[txt-color=#ff0000]do[/txt-color] While Not dyn.EOF
ComBox.AddItem dyn("Codigo") & ""
dyn.MoveNext
[txt-color=#0000ff]loop[/txt-color]
[txt-color=#ff0000]set dyn=nothing[/txt-color]
Deixa sua consulta trazer so os campos necessário ao seu combo por q dependendo do tamanho de sua tabela isso pode se tornar + pessado
espero ter ajudado
Tópico encerrado , respostas não são mais permitidas