USUÁRIO:      SENHA:        SALVAR LOGIN ?    Adicione o VBWEB na sua lista de favoritos   Fale conosco 

 

  Fórum

  Visual Basic
Voltar
Autor Assunto:  AJUDA EM ADO
Treze
não registrado
ENUNCIADA !
Postada em 21/08/2012 15:41 hs   
Bom o que vc está fazendo pelo meu entendimento pode tornar o processo moroso, devido ao fato de consultar antes se existe para depois inserir.

minha dica é

crie uma tabela temporaria com os mesmos dados da original no access, quando atualizar no seu banco lance para esta tabela apenas as atualizações, e no postgre grave estas atualizações e apague da tabela temporaria.

ex:

você possui na tabela original IBGE do access os seguintes dados

codibge - Cidade - estado
0001     - Aracaju - SE
0002     - Bananal - PE
0003     - Cacoina - CE

e no postgre a mesma coisa

codibge - Cidade - estado
0001     - Aracaju - SE
0002     - Bananal - PE
0003     - Cacoina - CE

la no seu banco access crie uma tabela temporaria chamada IBGEtemp com os mesmos campos

codibge - Cidade - estado

ela vai estar vazia então vc adicona novo municipio, isto será salvo na tabela original e a mesma coisa sera salva na tabela temporaria.

IBGEoriginal
codibge - Cidade - estado
0001     - Aracaju - SE
0002     - Bananal - PE
0003     - Cacoina - CE
0004    -  Sapucaia - AL

IBGETEMP
codibge - Cidade - estado
0004    -  Sapucaia - AL

quando vc for transferir para o postgre não precisará comparar, basta salvar direto na tabela do postgre e apagar da tabela temporaria em seguida

ou seja derepente vc não precisa nem de enviar o banco completo basta um arquivo texto ou xml, o que vai reduzir o tempo de processamento inclusive.

   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 22/08/2012 04:09 hs            
Treze, realmente uma grande solução, mas tenho um problema, são 53 clientes que faço isto, e nem sempre é feito de uma vez, as vezes demora um mes pra visitar o cliente, ai se eu não comparar, não tenho como saber se foi atualizado.

vlu//
   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 27/08/2012 03:18 hs            
Coloquei uma rotina diária de análise das tabelas, retirei o Find, e ficou mais confiável e mais rápido.
Agora o que posso melhorar neste código?

Screen.MousePointer = 11
smyFORM.lblMENSAGEM.Caption = "Transferindo Tabela de Cidades. Aguarde..."
DoEvents
Call conectaACCESS(spmDB)
Set rspIBGE = New ADODB.Recordset
rspIBGE.Open "SELECT * FROM IBGE ORDER BY NUMER", cnn, adOpenDynamic, adLockReadOnly
smyFORM.pbrATUALIZA.Visible = True
smyFORM.pbrATUALIZA.BackColor = vbWhite
If rspIBGE.RecordCount > 0 Then
         smyFORM.pbrATUALIZA.MinValue = 0
         smyFORM.pbrATUALIZA.Value = 0
         smyFORM.pbrATUALIZA.MaxValue = (rspIBGE.RecordCount + 1)
         lN = 0
         If Not rspIBGE.EOF Then
                rspIBGE.MoveMin
                Do While Not rspIBGE.EOF
                      Set rsIBGE = New ADODB.Recordset
                      rsIBGE.Open "SELECT * FROM ibge WHERE codibge='" & rspIBGE!codibge & "'", cn, adOpenDynamic, adLockOptimistic
                      If rsIBGE.EOF Then
                           rsIBGE.AddNew
                           rsIBGE!codibge = rspIBGE!codibge
                           rsIBGE!cidade = rspIBGE!cidade
                           rsIBGE!estado = rspIBGE!estado
                           rsIBGE!uf = rspIBGE!uf
                           rsIBGE.Update
                      End If
                     rsIBGE.Close
                     Set rsIBGE = Nothing
                     lN = (lN + 1)
                     smyFORM.pbrATUALIZA.Value = lN
                     DoEvents
                     rspIBGE.MoveNext
               Loop
         End If
End If
rspIBGE.Close
Set rspIBGE = Nothing

Obrigado.

vlu//
   
Treze
não registrado
ENUNCIADA !
Postada em 27/08/2012 10:29 hs   
LCRAMOS a principio se vc colocar na query apenas os campos que serã exibidos, a performance melhora

ex:

SELECT codigo, nome FROM tabela.....

é mais rápido que

SELECT * FROM tabela....

isso claro principalmente quando vc possuir varios campos na tabela e for exibir apenas alguns deles

   
Treze
não registrado
ENUNCIADA !
Postada em 27/08/2012 10:54 hs   
Outra coisa o ado só usa a querys sql então se vc usar o recordset.AddNew, Update, Edit...isto deverá consumir um pouco mais de tempo para efetuar a conversão, então melhorando um pouquinho seu código ficaria assim

Screen.MousePointer = 11
smyFORM.lblMENSAGEM.Caption = "Transferindo Tabela de Cidades. Aguarde..."
DoEvents
Call conectaACCESS(spmDB)
Set rspIBGE = New ADODB.Recordset
rspIBGE.Open "SELECT codibge,cidade,estado,uf FROM IBGE ORDER BY NUMER", cnn, adOpenDynamic, adLockReadOnly
smyFORM.pbrATUALIZA.Visible = True
smyFORM.pbrATUALIZA.BackColor = vbWhite
If rspIBGE.RecordCount > 0 Then
         smyFORM.pbrATUALIZA.MinValue = 0
         smyFORM.pbrATUALIZA.Value = 0
         smyFORM.pbrATUALIZA.MaxValue = (rspIBGE.RecordCount + 1)
         lN = 0
         If Not rspIBGE.EOF Then
                rspIBGE.MoveMin
                Do While Not rspIBGE.EOF
                      Set rsIBGE = New ADODB.Recordset
                                           If rsIBGE.EOF Then
                           rsIBGE.Open "INSET INTO ibge (codibge, cidade, estado,uf) VALUES ('" & rspIBGE!codibge & "','" &  rspIBGE!cidade & "','" & rspIBGE!estado & "','" & rspIBGE!uf & "' WHERE codibge='" & rspIBGE!codibge & "'", cn, adOpenDynamic, adLockOptimistic
                      End If
                     rsIBGE.Close
                     Set rsIBGE = Nothing
                     lN = (lN + 1)
                     smyFORM.pbrATUALIZA.Value = lN
                     DoEvents
                     rspIBGE.MoveNext
               Loop
         End If
End If
rspIBGE.Close
Set rspIBGE = Nothing


   
LCRamos
Pontos: 2843
GOIANIA
GO - BRASIL
ENUNCIADA !
Postada em 27/08/2012 18:32 hs            
TREZE, OBRIGADO, COPIEI SEU CÓDIGO E FICOU MELHOR, AGORA COM RESPEITO AO "* FROM ibge", NÃO DEVE MELHORAR, POIS EU PRECISO DE TODOS OS CAMPOS E SÃO APENAS 5 CAMPOS, E PRECISO DOS 5.

VLU//
   
Página(s): 2/3     « ANTERIOR    PRÓXIMA »


Seu Nome:

Seu eMail:

ALTERAR PARA MODO HTML
Mensagem:

[:)] = 
[:P] = 
[:(] = 
[;)] = 

HTML DESLIGADO

     
 VOLTAR

  



CyberWEB Network Ltda.    © Copyright 2000-2024   -   Todos os direitos reservados.
Powered by HostingZone - A melhor hospedagem para seu site
Topo da página