Boa noite a todos
estou com uma grande curiosidade sobre codigo vba, estou tentando adapatar meus codigos para ser o mais rápido e leve possivel, para isso queria q vc respondem qual é mais rápido entre montar um código com recordset para abrir a tabela inteira e depois fazer um loop para comparar os dados pra então executar alguma tarefa ou montar o recordset usando uma Query pra trazer so os dados que eu quero em um recordset e então executar o loop so pra fazer as alteracos.
Exemplo pratico
Grato pela colaboracao de todos
Sucesso a todos e bons estudos
estou com uma grande curiosidade sobre codigo vba, estou tentando adapatar meus codigos para ser o mais rápido e leve possivel, para isso queria q vc respondem qual é mais rápido entre montar um código com recordset para abrir a tabela inteira e depois fazer um loop para comparar os dados pra então executar alguma tarefa ou montar o recordset usando uma Query pra trazer so os dados que eu quero em um recordset e então executar o loop so pra fazer as alteracos.
Exemplo pratico
- Código:
dim bc as currentdb()
dim rs as recordset
dim strSQL as string
'Qual é mais Rapido: RecordSet com Loop. Vamos supor que essa tabela tenha 10000 registros e o resultado da minha condição resulte em 5000
'Resolucao 1
set bc = currentdb()
set rs = bc.openrecordset("NomeTabela")
'Percorre por todos registros da Tabela
with rs
.moveFirst
do while not .EOF
if !codigo>5000 then
'vamos supor q eu mude o nome do cliente para alguma outra coisa
.Edit
!nomeCliente = "Alguma Coisa " & !codigo
.update
endif
.moveNext
loop
end with'Fim Resolucao 1
'Resolucao 2
'Valendo a mesma condicao acima(Se a tabela tiver 10000 Trazer os registros de Codigos acima de 5000)
strSQL = "SELECT nomeCliente FROM nomeTabela " & _
"Where Codigo > 5000"
'Portanto Desse Jeito eu carregaria apenas 5000 Registros em vez de 10000, Alem
'de não precisar ficar comparando os registros pois eles ja sao os registros que
'eu quero e tambem só carrego o campo que eu vou alterar
set rs = bc.OpenRecordSet(strSQL)
with rs
.moveFirst
do while not .EOF
'vamos supor q eu mude o nome do cliente para alguma outra coisa
.Edit
!nomeCliente = "Alguma Coisa " & !codigo
.Update
.moveNext
loop
end With 'Fim Resolucao 2
Agora se vcs puderem me esclarecer qual é mais rápido e por que. Eu agradeceria muito mesmo.
Acho que isso é um conhecimento que faz grande diferença na hora de programar, saber qual melhor hora pra usar SQL, RecordSet, Dcount, Dlookup e etc.
Outra duvida com o mesmo proposito(Qual é mais rápido e leve)...
Qual é melhor usar pra esse tipo de situação
por exemplo... Qual o melhor jeito de verificar se um determinado conjunto de registro existe em uma tabela qualquer?
Resolucao 1:
function PessoaAndCargoExiste(CodigoPessoaX,CodigoCargoX) as boolean
dim bc as database 'usada Para Resolucao 1
dim rs as recordset 'usada Para Resolucao 1
dim sair as boolean 'usada Para Resolucao 1
dim strSQL as string 'usada Para Resolucao 2
'Resolucao 1
set bc = currentdb()
set rs = bc.openRecordSet("RelacaoCargo")
with rs
.moveFirst
do while not .EOF and sair = false
if !CodigoCargo = CodigoCargox and !CodigoPessoa = CodigoPessoaX then
PessoaAndCargoExiste = true
sair = true 'Quando Achar o Codigo o loop é encerrado
endif
.moveNext
loop
end with
'Se Sair = False Entao o conjunto Pessoa E Cargo Nao Existe Na tabela
if sair = false then
PessoaAndCargoExiste = false
endif ' Fim Resolucao 1
'Resolucao 2
strSQL = "CodigoCargo = " & CodigoCargoX & " and CodigoPessoa = " & CodigoPessoaX
if Dcount("CodigoCargo", "NomeTabela", strSQL) > 0 then
PessoaAndCargoExiste = true
else
PessoaAndCargoExiste = false
endif
'Fim Resolucao 2
end Function
Grato pela colaboracao de todos
Sucesso a todos e bons estudos