Jump to content
Fivewin Brasil

sincronizar base de dados MYSQL


marcioe

Recommended Posts

Amigos

Preciso sincronizar algumas tabelas de minha aplicação desktop com uma base de dados hospedada na web.

as tabelas que quero sincronizar são iguais.

Porem não será o banco todo,apenas 03 tabelas.

agradeço a todos.

informaisvrb@gmail.com

MSN mastermarvrb@msn.com

SKYPE informaisvrb

32-9104-0562 .: TFA :.

Link to comment
Share on other sites

Amigos

Preciso sincronizar algumas tabelas de minha aplicação desktop com uma base de dados hospedada na web.

as tabelas que quero sincronizar são iguais.

Porem não será o banco todo,apenas 03 tabelas.

agradeço a todos.

informaisvrb@gmail.com

MSN mastermarvrb@msn.com

SKYPE informaisvrb

32-9104-0562 .: TFA :.

Link to comment
Share on other sites

Marcio

Bom dia

Qual a dúvida?

Abro o banco da aplicação desktop, abro o banco da base web, leio um e alimento o outro. Verifique aqui no forum sobre abrir dois banco de dados.

Att

João Bosco

foto.jpg

Contagem/MG

FWH 10.6b xHb 1.2.1 WorkShop 4.5

PellesC SQLLIB SQLRDD UltraEdit xDev MySql MS-Sql

Link to comment
Share on other sites

Obrigado amigo,

amigo joaosolution a forma que voce passou não é viavel, pois fica lento demais.

o lance do S.A.Oliveira parece ser mais rapido, se puder exemplificar fico grato.

informaisvrb@gmail.com

MSN mastermarvrb@msn.com

SKYPE informaisvrb

.: 32-9104-0562 :.

Link to comment
Share on other sites

Colega segue código sobre o assunto q peguei por ai em pesquisas na net, não testei o código, mas o mesmo dá uma idéia sobre o assunto...


FUNCTION X()

LOCAL oServer, cQuery, oQuery, i

oServer:=TMYSQLSERVER():NEW(cHostName,cUserName,cPassword)

IF oServer:NETERR() // Falha na conexão com o banco de dados

MSGSTOP(oServer:ERROR())

oServer:DESTROY()

RETURN

ENDIF

cQuery := 'USE MEU_BANCO'

oQuery := oServer:QUERY(cQuery)

IF oQuery:NETERR() // Falha na utilização do banco de dados

MSGSTOP(cQuery+CRLF+;

ALLTRIM(STR(oQuery:ERRORNO()))+CRLF+;

oQuery:ERROR())

oQuery:DESTROY()

RETURN

ENDIF

cQuery := 'SELECT * FROM MINHA_TABELA' // Como exemplo tem 3 campos

oQuery := oServer:QUERY(cQuery)

IF oQuery:NETERR() // Falha na leitura da tabela

MSGSTOP(cQuery+CRLF+;

ALLTRIM(STR(oQuery:ERRORNO()))+CRLF+;

oQuery:ERROR())

oQuery:DESTROY()

RETURN

ENDIF

USE MEU_DBF // Como exemplo tem 3 campos

FOR i := 1 TO oQuery:LASTREC

DBAPPEND()

FIELDPUT(1,oQuery:GETROW(i):FIELDGET(1))

FIELDPUT(2,oQuery:GETROW(i):FIELDGET(2))

FIELDPUT(3,oQuery:GETROW(i):FIELDGET(3))

DBCOMMIT()

DBUNLOCK()

NEXT i

RETURN

id=code>id=code>

[]´s

Link to comment
Share on other sites

MarcioE,

É fácil, nas funções que voce grava dados nas tres tabelas voce cria um log e a cada X tempo voce dispara uma rotina que atualiza suas bases.

Replicação automatica em mysql é muito sofrivel, e com trigger não da muito certo, pois qualquer alteração nos registros antes de efetivar a replicação ocorrem falhas.

Eu replico a base de varias lojas usando o log de comandos enviados para o servidor.

veja abaixo a tabela onde eu salvo o log de comandos.


Function var_string_replica()

return "(`CODEMP` char(3) default '000', "+;

"`DATAHORA` char(16) default NULL, "+;

"`DTMOV` date default NULL, "+;

"`LOCALREAL` char(3) default NULL, "+;

"`ATUALIZADO` char(1) default NULL, "+;

"`COMANDO` blob, "+;

"`DIAHORALOCAL` char(20) default NULL, "+;

"`sql_rowid` bigint(10) NOT NULL auto_increment, "+;

"`sql_deleted` enum('F','T') NOT NULL, "+;

"PRIMARY KEY (`sql_rowid`), "+;

"KEY `ATUALIZADO` (`ATUALIZADO`), "+;

"KEY `DTMOV` (`DTMOV`), "+;

"KEY `LOCALREAL` (`LOCALREAL`) "+;

") ENGINE=InnoDB DEFAULT CHARSET=latin1;"

id=code>id=code>

Daniel Segura

daniel_segura@ig.com.br

Link to comment
Share on other sites

Amigo,

pode ser replicado pelo banco mesmo, porem não é a cada registro incluido que será sincronizado.

A atualização será feita em media 04 vezes por mes.

Poderia ser via banco mesmo. ou seja o menor numero de código possivel.

porem tem que ser via aplicação, ou seja o usaurio clica em um botão e o sistema faz o resto

informaisvrb@gmail.com

MSN mastermarvrb@msn.com

SKYPE informaisvrb

.: 32-9104-0562 :.

Link to comment
Share on other sites

  • 2 weeks later...
  • 1 year later...

na verdade nem consegui fazer funcionar a triger.

eu consegui é replicar o banco todo. mas ai não me atende

A base é local, são 02 bancos de dados diferentes.

É assim para o pessoal entender melhor.

São 02 empresas. porem a unica coisa em comum entre elas é os clientes, o resto é tudo diferente.

O que eu nao queria era ficar conectando no banco 1, conectando no banco 2, etc...

Queria que ao cadastrar o cliente no BANCO1 ele fosse replicado, ou fosse totalmente copiado para o banco 2

os dados de produtos, sao todos diferentes. só cliente que é igual.

Link to comment
Share on other sites

Olá

dbBAS1 = é o banco/tabela de origem, onde os registros de clientes são cadastrados

dbBAS2 = é o banco/tabela cópia, onde os registros de clientes serão copiados do banco de origem quando executar o acima

cDelete:="DELETE FROM dbBAS2.tbClientes" 
sqlExecute(cDelete)
// deleta todos os clientes da base cópia

cInsert:='INSERT INTO dbBAS2.tbClientes SELECT * FROM dbBAS1.tbClientes'
sqlExecute(cInsert)
// copia todos os clientes da base de origem para a base cópia

// é necessário que as estruturas estejam idênticas

dbBAS1 = é o banco/tabela de origem, onde os registros de clientes são cadastrados

dbBAS2
= é o banco/tabela cópia, onde os registros de clientes serão copiados do banco de origem quando executar o acima

cDelete
:="DELETE FROM dbBAS2.tbClientes"
sqlExecute(cDelete)
// deleta todos os clientes da base cópia

cInsert:='INSERT INTO dbBAS2.tbClientes SELECT * FROM dbBAS1.tbClientes'
sqlExecute(cInsert)
// copia todos os clientes da base de origem para a base cópia

// é necessário que as estruturas estejam idênticas

Abraço

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...