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
|
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
|
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
|
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//
|
|
|
|