• Revista PROGRAMAR: Já está disponível a edição #55 da revista programar. Faz já o download aqui!

marlonwg

Sincronizar Dados

13 mensagens neste tópico

Boas.... como vão o/ ?

Sou novo no fórum e tenho uma duvida que esta me afligindo um pouco tenho um programa feito em Visual studio 2010 eo banco de dados e access e usei um método de sincronizar dados

que normalmente e usado no SQL... Bom para resumo ele funciona tudo blz tudo ok.. mas quando coloco ele em rede local tipo de 2 a 5 maquinas fica muito lento e não consigo tanbem fazer a resolução dos conflitos ta ai o codigo abaixo :

Sub SincronizarDados

Dim strReplica1,strReplica2 as string
Dim repReplica como novo JRO.Replica 
Dim CONN As New ADODB.Connection 
Dim rs como novo ADODB.Recordset 
Dim sqlStr As String 

Dim rsCOnflict como novo ADODB.Recordset 
CONN.Open ( "Provider = Microsoft.Jet.OLEDB.4.0; Data Source =" & strReplica1 & "") 

RepReplica.ActiveConnection = CONN 
'Envia as alterações feitas em cada réplica para o outro 
RepReplica.Synchronize (strReplica2, JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect) 
End Sub 

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Com a explicação que dás não é possível ajudar-te, até porque não se também não é claro que ajuda pedes.
Se a tua questão é performance, cria uma lista de prioridades entre os clientes e faz, por exemplo, a sincronização de, no máximo, dois de cada vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Opa desculpa se nao deu a entender mas meu problema eo seguinte....

Eu tenho esta Sincronizaçao ai funcional, So que quando mando sincronizar os dados eles vao todos de uma vez tipo esse codigo passa por todas as tabelas

sincroniza todas elas... EX: eu tenho 25 tabelas ai quando o cliente altera um dado no sistema tipo o Nome do funcionario na tabela_Funcionarios

quando entra neste meu codigo ai ele vai atualizar todas as 25 tabelas..... entendeu ? rsrs:cheesygrin:

Eu quero fazer para ele atualizar uma por uma mas nao to sabendo como fazer ? 

Tipo quero que este codigo Sincronize so uma tabela por vez.

Este e so o 1° Problema

O 2° Problema que disse e que em rede local este meu sincronizador com ACCESS ta ficando meio lento, tipo se colocar em 5 maquinas diferentes

ele faz a Sincronizaçao de todos completos so que demora em torno de 10 a 15 segundos toda vez q sincroniza dados.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegues saber quais os registos ou tabelas que foram alterados? Através de um timestamp de atualização ou recorrendo à informação de sistema da base de dados Access?
O modelo de sincronização é teu ou é do SQL Server?
Se for do SQL Server tens de ver na documentação se o que queres é possível, se for teu, alteras o modelo para ter em atenção os itens que recolheste no ponto aterior.
 

Quanto à performance, ou implementas uma lista de prioridades e geres a quantidade de postos que podem fazer a sincronização ao mesmo tempo (como referi anteriormente) ou arranjas uma infraestrutura que suporte essa carga.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Consegues saber quais os registos ou tabelas que foram alterados?

Não, Pq ele atualiza tudo de uma vez so.

Através de um timestamp de atualização ou recorrendo à informação de sistema da base de dados Access?

Meu Sincronizador e feito em um Form ai ele dispara um Timer com este codigo ai e sincroniza as tabelas em rede

O modelo de sincronização é teu ou é do SQL Server?

O modelo eu Fiz com JRO so que pode ser usado em SQL

NA ultima que voçe falou ali arrumar uma performace como assim ??? tipo nao to conseguindo fazer ele ir tabela por tabela

ele so vai todas de uma vez.... se fosse tabela por tabela ai era mas facil.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Não compreendeste. Quando perguntei se sabes quais os registos que foram alterados não me referia ao processo de sincronização mas sim aos registos que, durante o dia de trabalho, foram alterados e, como tal, necessitam de ser sincronizados.

Se o sincronizador é teu, então podes reprogramá-lo como quiseres, inclusive ir de tabela em tabela.

A questão da performance é fácil, basta teres uma tabela de controlo onde cada cliente se regista e mantém um estado de sincronização, e.g. em espera, sincronizando, e quando termina a sua sincronização remove-se da tabela. Cada cliente só começa a sincronização quando é, por exemplo, o primeiro da lista e só há, no máximo, um cliente a sincronizar, caso contrário, espera pela sua vez. Assim tens, no máximo, 2 clientes a sincronizar ao mesmo tempo.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hum entendi, então mais ou menos pelo logica fazer uma tabela nova no Access e colocar como tbl_Sync e os clientes ficam em fila la esperando caso já tenha alguém sincronizando dados... correto ate ai tudo bem mas vejo so. minhas tabelas tenho 25 todas usam sincronizaçao com o meu codigo acima como uso o JRO nao estou conseguindo fazer isso tabela por tabela ele so faz tudo de uma vez. eu ativo este codigo ai dai ele passa pela tabela cliente,produtos,debitos,Compras,etc....

RepReplica.Synchronize (strReplica2, JRO.SyncTypeEnum.jrSyncTypeImpExp, JRO.SyncModeEnum.jrSyncModeDirect) 

Quando chamo este processo ai nao tem como so enviar para uma tabela ele não da opçao para isso ou nao estou sabendo fazer mas pesquizei sobre JRO e ate agora nao achei nada? voçe tem alguma ideia de como fazer esta tabela que vc me aconselhou ?

Qualquer coisa me mandar teu email para eu enviar meu codigo de sincronizar que e meio grande... para tu teres uma ideia do que fazer ou me dar uma luz em relaçao ao problema eu agradeceria muito ^^:cheesygrin:

Editado por marlonwg
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

A nova tabela tem de ficar num sitio central a todos, uma vez que tem de ser acessível por todos os clientes.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Fiz a conexao mas do geito que estou fazendo eo seguinte ele e acces em fomato Global de sincronizaçao, se eu adicionar a tabela de espera nao tem necessidade

porque os dados mesmo que tiverem conflito eu ja tenho um resolvedor meu unico problema que tenho e porque quando envio as VENDAS tipo por numeraçao 1,2,3....etc

quando tem 2 sincronizando a venda ao mesmo tempo em 2 terminais a venda sai com o msm numero este esta sendo meu maior problema no momento rsrs....

Tenho uma tabela local que armazena a venda em cada terminal e uma tabela sincronizada q recebe dados de cada local.

tem como sera eu fazer um Stop para aguardar a venda finalizar para dai lançar a proxima venda ?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Se já tens o sincronizador a funcionar como te referi, então em principio deverá ser suficiente permitires apenas uma base de dados a ser sincronizada de cada vez.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Entao Como voçe disse né . Ate e uma boa ideia fazer um por vez so que o seguinte meu sincronizador envia dados pela rede.. certo.. ate ai blz envia as tabelas eos dados alterados e tudo mais envia todas elas.... Da ate para eu fazer ele sincronizar Apenas um por vez so que dai vou ter que criar outro procedimento na onde ele tera que verificar se nao tem em outro terminal um Sincronizador em funcionamento... dai esta a duvida ^^ como saber se este sincronizador esta ativo na rede se ele não se conecta pelo meu .EXE e sim direto no ACCESS porque veja bem Do jeito que fiz mesmo com o sistema fechado se meu sincronizador achar a Rede e tiver ATIVA ele manda informaçoes para o banco de dados entende..

Ele fica enviando informaçoes mesmo o outro sistema estando fechado , se o pc estiver ligado com rede ele dectecta o banco e manda os dados.. rsrs loco ne :D

Editado por marlonwg
0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Estás a misturar as coisas. Uma coisa não tem a ver com a outra, ou seja, o mecanismo de sincronização não tem nada a ver com o facto do sistema estar fechado ou aberto.

Como disseste, o que tens de fazer é mesmo um procedimento de controlo para saber se alguém/quem está a sincronizar no momento.
Antes de começares a enviar os dados, perguntas ao servidor se ele está em condições de os receber. Se o servidor responder positivamente, então começas a enviar, e o servidor passa a responder que não pode receber mais dados (de outras BDs que perguntem se podem enviar/sincronizar dados).
As outras BDs que querem sincronizar continuam a perguntar, por exemplo, a cada 30 segundos, se já podem sincronizar.
Quando o procedimento de sincronização termina, o servidor passa a responder positivamente. E assim aceitará um pedido da primeira BD que lhe perguntar se pode sincronizar.
E assim por diante.

Com um mecanismo destes garantes que tens no máximo uma base de dados a sincronizar.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Hummm ok fiz ja um espera e parece q esta dando certo obrigado:cheesygrin:

A espera

Sincronizador

Fim Espera rsrs

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora