Jump to content
informaster

Base Dados Local para Cloud

Recommended Posts

informaster

Bom Dia, Caros Amigos

Espero que esteja tudo bem convosco.

 

Estou num projecto em que tenho que passar uma aplicação com BD acess para web.

Tenho uma base de dados MDB que tenho acesso e o meu objectivo é fazer um syncronizador em REALTime.

Já alugei uma VPS com Linux e já instalei lá o MYSQL e APACHE...

A minha ideia é quando alguem altera algum nesse mdb o meu aplicativo vai actualizar no MySQL depois o desenvolvimento WEB já não será comigo.

Mas qualquer um pode desenvolver web sobre um APACHE com MYSQL...

 

O que pergunto é quem seja já experiente como vou passar o MDB (tabelas alteradas para o MYSQL de forma mais simples e que não tenha que fazer 190 querys de SELECTS e depois UPDATE na BASE DE DADOS MySql...

 

Queria simplificar qual a melhor ideia para fazer da aplicação uma aplicação com sincronizador "cloud"....

 

Deem me exemplos caso existam se fizerem me esse favor. Pois estou com tanta urgencia... não queria começar a fazer algum que depois vou desfazer etc etc etc....

Qualquer comentário é sempre bem vindo... Obrigado

 

Abraço a todos.


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

Boas.

Não percebi se queres um sincronizador ou um replicador. Tens de sincronizar os dados entre as duas base de dados ou tens apenas que enviar os dados do sistema local para o sistema remoto?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster

Bom dia

M6 Espero que esteja tudo bem por ai :)

 

Apenas preciso de do seguinte:

 

Base de Dados A - Local em Pc --- Tipo Acess que é o que existe.....

APP instalada no pc local que connecta esta Base de Dados A com a:

 

WebServer com MySql com a mesma estrutura de tabelas que a Base de Dados A

 

Quando algum é alterado na A > faz update ou insert ou delete conforme o que for alterado para a Base de dado B (MySQL)

 

Apenas isso ....

On 10/13/2017 at 9:28 AM, M6 said:

Boas.

Não percebi se queres um sincronizador ou um replicador. Tens de sincronizar os dados entre as duas base de dados ou tens apenas que enviar os dados do sistema local para o sistema remoto?

Verifica a minha resposta acima

Obrigado


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster
1 minute ago, informaster said:

Bom dia

M6 Espero que esteja tudo bem por ai :)

 

Apenas preciso de do seguinte:

 

Base de Dados A - Local em Pc --- Tipo Acess que é o que existe.....

APP instalada no pc local que connecta esta Base de Dados A com a:

 

WebServer com MySql com a mesma estrutura de tabelas que a Base de Dados A

 

Quando algum é alterado na A > faz update ou insert ou delete conforme o que for alterado para a Base de dado B (MySQL)

 

Apenas isso ....

Verifica a minha resposta acima

Obrigado

Respondendo simples : do Local para o Remote....


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Coloquei um botao a fazer isto:

 

Private Sub btQUERYExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btQUERYExecute.Click

        Dim dtMDB As New DataTable
        Dim dtMYSQL As New DataTable
        Dim QuerieMDB As New OleDbCommand(txtQUERY.Text, Classes.classDatabases.ConnMDB)
        Dim QuerieMYSQL As New MySqlCommand(txtQUERY.Text, Classes.classDatabases.ConnMYSQL)
        Dim da As New OleDbDataAdapter(txtQUERY.Text, Classes.classDatabases.ConnMDB)
        Dim r As DataRow



        Classes.classDatabases.OpenMDB()
        dtMDB.Load(QuerieMDB.ExecuteReader)
        dgvQUERY1.DataSource = dtMDB.DefaultView


        Classes.classDatabases.OpenMYSQL()
        dtMYSQL.Load(QuerieMYSQL.ExecuteReader)
        dgvQUERY2.DataSource = dtMYSQL.DefaultView




        For Each dr As DataRow In dtMDB.Rows

            r = dtMYSQL.NewRow
            r("Cliente") = dr("Cliente")
            r("Ano") = dr("Ano")
            r("DataNasc") = dr("DataNasc")
            r("DataAviso") = dr("DataAviso")
            dtMYSQL.Rows.Add(r)


            Using gravarCmd As New MySqlCommand("", ConnMYSQL)


                'QUERY PARA SELECIONAR
                Using abrirCmd As New OleDbCommand("SELECT Cliente FROM Aniversarios WHERE Cliente = @Cliente", ConnMDB)
                    Dim Cliente As Integer
                    abrirCmd.Parameters.AddWithValue("@Cliente", Cliente)

                   
                End Using

                'ADICIONAR
                gravarCmd.CommandText =
                    "INSERT INTO Aniversarios (Cliente,Ano,DataNasc,DataAviso)" &
                    "VALUES (@Cliente,@Ano,@DataNasc,@DataAviso)"

                'ACTUALIZA
                gravarCmd.CommandText =
                "UPDATE Aniversarios Set Cliente=@Cliente,DataNasc=@DataNasc,DataAviso=@DataAviso"


                'PARAMETEROS DA BASE DE DADOS = AOS OBJECTOS
                With gravarCmd.Parameters
                    .AddWithValue("@Cliente", r("Cliente"))
                    .AddWithValue("@Ano", CInt(r("Ano")))
                    .AddWithValue("@DataNasc", r("DataNasc"))
                    .AddWithValue("@DataAviso", r("DataAviso"))


                End With

                'NO FIM EXECUTA O QUERY ESCOLHIDO
                gravarCmd.ExecuteNonQuery()

            End Using
        Next

        dtMYSQL.AcceptChanges()
        dgvQUERY2.DataSource = dtMYSQL

        Classes.classDatabases.CloseMDB()
        Classes.classDatabases.CloseMYSQL()


    End Sub

Só que isto apenas me adiciona a BASE DE DADOS A > B os valores que estao na A.

agora verifiquei que tambem existe nao só updates mas tambem insert ´s agora a minha dificuldade é saber que raio de condição eu vou fazer e como ...

 

visto que isto tem duas connecções diferentes e querys diferentes....

Será que não existe nada mais simples para detectar a diferença entre duas DB´s e actualizar apenas uma delas....???????

 


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

O que queres é um replicador, que é mais simples de fazer do que um sincronizador.

Para fazeres um replicador "basta" uma nova colunas em cada tabela:

  • uma coluna com um timestamp que tens atualizadar sempre que o registo é mexido

Sempre que um registo é mexido (criação de registo, dados alterados) a coluna de timestamp é atualizada.

Tens também de guardar o timestamp da última sincronização que aconteceu com sucesso.

Com esta informação vais conseguir fazer o seguinte para cada tabela:

  1. Listas as chaves que estão no sistema B (cloud) e não estão no sistema A (pc local). Esses são os registos que foram eliminados do sistema A e têm de ser eliminados do sistema B. Tem atenção às dependências da integridade referêncial.
  2. Listas todos os registos que estão no sistema A (pc local) cujo timestamp é superior ao timestamp da última atualização e:
    1. se o registo existe no sistema B (cloud) então é para fazer uma atualização dos dados.
    2. se o registo não existe no sistema B (cloud) então é um registo novo que tem de ser criado.

No final atualizas o timestamp da última sincronização com sucesso.

Nota que durante o processo de sincronização o sistema não deverá estar a ser usado.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster

Boas

O saber o que fazer eu sei... a minha dificuldade é mais qual a logica do codigo na pratica.... visto que tenho dois connectors strings na minha classDatabases

ConnMDB

ConnMySQL

não sei .,... secalhar vou ter que fazer select de um para comparar com o outroo...

Olha se nao conseguir faço um TRUNCATE a tabela e depois insert novamente ....

Aqui a minha dificuldade é de facto a estrutura.... de como aplicar em codigo...


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

Pois, esse é o trabalhinho que tens de fazer: o código que implementa o algoritmo que te dei.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster
On 10/19/2017 at 5:40 PM, M6 said:

Pois, esse é o trabalhinho que tens de fazer: o código que implementa o algoritmo que te dei.

Boas

 

Estou a fazer assim M6...

 Private Sub btQUERYExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btQUERYExecute.Click

        DeleteTable("Adiantamento")
        InsertTable16FieldsP1("Adiantamento", "Adiantamento_Nr", "Adiantamento_Data", "Cliente", "Valor", "TaxaIVA", "ValorIVA", "TipoPagamento", "Filial", "DataUltModificacao", "Hash", "HashControl", "SystemEntryDate", "Anulado", "AnuladoMotivo", "FilialOriginal", "Posto")

        DeleteTable("Aniversarios")
        InsertTable4Fields("Aniversarios", "Cliente", "Ano", "DataNasc", "DataAviso")

        DeleteTable("Armazens")
        InsertTable4FieldsP1("Armazens", "Codigo", "Descricao", "Filial", "DataUltModificacao")

        DeleteTable("Artigo")
        InsertTable85FieldsP1("Artigo", "Artigo_codigo", "Artigo_CodigoInterno", "Artigo_Descricao", "Artigo_Iva", "Artigo_MargemNormal", "Artigo_PontosCliente", "Marca_Codigo", "Familia_codigo", "Seccao_Codigo", "TipoArtigo_Codigo", "Cor_Codigo", "Artigo_Preco", "Artigo_PrecoPromocao", "Artigo_PrecoFuncionario", "Artigo_Consumo", "Artigo_Venda", "Artigo_Devolucoes", "Artigo_Perdas", "Artigo_PromocaoSN", "Artigo_DesCliSN", "Artigo_UltimaVenda", "Artigo_UltimaCompra", "Artigo_PMCompra", "Artigo_UltPvenda1", "Artigo_UltPvenda2", "Artigo_UltPvenda3", "Artigo_UltPcompra1", "Artigo_UltPcompra2", "Artigo_UltPcompra3", "Artigo_MargemPromo", "Artigo_MargemFunc", "Artigo_EntradasDiversas", "Artigo_EntradasFactura", "Artigo_PontosFuncionario", "Artigo_StockInicial", "Artigo_StockActual", "Artigo_StockMinimo", "Artigo_Grupo", "Desc_Abreviada", "Cod_Barras", "Def_Venda", "Def_ConsumoInterno", "Fornecedor", "INACTIVO", "PrecoIVA1", "PrecoIVA2", "PrecoIVA3", "UltPrecoCompraSDesc", "Cod_Fornecedor", "QuantidadeUnit", "Unidade", "StockConsumo", "Filial", "DataUltModificacao", "Pontos_Activo", "DescricaoPesquisa", "ConsumoAplicacao", "ConsAplic_CodFixoControlo", "ConsAplic_CodigoFixo", "ConsAplic_MaxUnidades", "Desc_Embalagem", "Desc_Quantidade", "ConsAplic_GrupoServ", "ConsAplic_Seccao", "StockMaximo", "DataInicial", "DataFinal", "HoraInicial", "HoraFinal", "Desconto", "Promocao", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado", "Domingo", "Sexo", "FaixaEtaria", "GruposCodigo", "Artigo_DescontaPontos", "Artigo_Editavel", "Artigo_Stock", "Artigo_Faturado")

        DeleteTable("Artigo_Info")
        InsertTable4FieldsP2("Artigo_Info", "Artigo", "Preco_Medio", "Preco_Ultimo", "Data_Ultimo", "Filial")

        DeleteTable("Artigo_QuantidadesEncomendar")
        InsertTable4FieldsP1("Artigo_QuantidadesEncomendar", "Artigo", "Quantidade", "Filial", "DataUltModificacao")


    End Sub


    Private Sub DeleteTable(ByVal tablename As String)
        Dim strSQL As String
        OpenMYSQL()
        strSQL = "TRUNCATE TABLE " + tablename
        Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(strSQL, ConnMYSQL)
        cmd.ExecuteNonQuery()
        CloseMYSQL()
    End Sub


Private Sub InsertTable4Fields(ByVal tablename As String, ByVal Field1 As String, ByVal Field2 As String, ByVal Field3 As String, ByVal Field4 As String)
        OpenMDB()
        OpenMYSQL()

        Dim CmdSelect = New OleDbCommand("SELECT * FROM " + tablename, ConnMDB)
        Dim DR As OleDbDataReader
        DR = CmdSelect.ExecuteReader()


        While (DR.Read())

            Dim CmdInsert = New MySqlCommand("INSERT INTO " + tablename + " (" + Field1 + "," + Field2 + "," + Field3 + "," + Field4 + ") VALUES (@f1, @f2, @f3, @f4)", ConnMYSQL)
            CmdInsert.Parameters.AddWithValue("@f1", DR(0).ToString())
            CmdInsert.Parameters.AddWithValue("@f2", DR(1).ToString())
            CmdInsert.Parameters.AddWithValue("@f3", CDate(DR(2).ToString()))
            CmdInsert.Parameters.AddWithValue("@f4", CDate(DR(3).ToString()))
            CmdInsert.ExecuteNonQuery()
        End While

        CloseMDB()
        CloseMYSQL()

    End Sub

    Private Sub InsertTable4FieldsP1(ByVal tablename As String, ByVal Field1 As String, ByVal Field2 As String, ByVal Field3 As String, ByVal Field4 As String)
        OpenMDB()
        OpenMYSQL()

        Dim CmdSelect = New OleDbCommand("SELECT * FROM " + tablename, ConnMDB)
        Dim DR As OleDbDataReader
        DR = CmdSelect.ExecuteReader()


        While (DR.Read())

            Dim CmdInsert = New MySqlCommand("INSERT INTO " + tablename + " (" + Field1 + "," + Field2 + "," + Field3 + "," + Field4 + ") VALUES (@f1, @f2, @f3, @f4)", ConnMYSQL)
            CmdInsert.Parameters.AddWithValue("@f1", DR(0).ToString())
            CmdInsert.Parameters.AddWithValue("@f2", DR(1).ToString())
            CmdInsert.Parameters.AddWithValue("@f3", DR(2).ToString())
            CmdInsert.Parameters.AddWithValue("@f4", CDate(DR(3).ToString()))
            CmdInsert.ExecuteNonQuery()

        End While

        CloseMDB()
        CloseMYSQL()

    End Sub

A minha questão é como é que eu agora faço um IF (condição) para as duas CONNECTIONS STRINGS diferentes que tenho...

Por exemplo:

IF ("Select Database1.MDB Table Adiantamento Collumn Adiantamento_Nr" , CONNMDB) < ("Select Database1.MDB Table Adiantamento Collumn Adiantamento_Nr" , CONNMYSQL)

DeleteTable("Adiantamento") 
        InsertTable16FieldsP1("Adiantamento", "Adiantamento_Nr", "Adiantamento_Data", "Cliente", "Valor", "TaxaIVA", "ValorIVA", "TipoPagamento", "Filial", "DataUltModificacao", "Hash", "HashControl", "SystemEntryDate", "Anulado", "AnuladoMotivo", "FilialOriginal", "Posto")

ELSE

 

NAO FAZ

 

 


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster
Just now, informaster said:

Boas

 

Estou a fazer assim M6...


 Private Sub btQUERYExecute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btQUERYExecute.Click

        DeleteTable("Adiantamento")
        InsertTable16FieldsP1("Adiantamento", "Adiantamento_Nr", "Adiantamento_Data", "Cliente", "Valor", "TaxaIVA", "ValorIVA", "TipoPagamento", "Filial", "DataUltModificacao", "Hash", "HashControl", "SystemEntryDate", "Anulado", "AnuladoMotivo", "FilialOriginal", "Posto")

        DeleteTable("Aniversarios")
        InsertTable4Fields("Aniversarios", "Cliente", "Ano", "DataNasc", "DataAviso")

        DeleteTable("Armazens")
        InsertTable4FieldsP1("Armazens", "Codigo", "Descricao", "Filial", "DataUltModificacao")

        DeleteTable("Artigo")
        InsertTable85FieldsP1("Artigo", "Artigo_codigo", "Artigo_CodigoInterno", "Artigo_Descricao", "Artigo_Iva", "Artigo_MargemNormal", "Artigo_PontosCliente", "Marca_Codigo", "Familia_codigo", "Seccao_Codigo", "TipoArtigo_Codigo", "Cor_Codigo", "Artigo_Preco", "Artigo_PrecoPromocao", "Artigo_PrecoFuncionario", "Artigo_Consumo", "Artigo_Venda", "Artigo_Devolucoes", "Artigo_Perdas", "Artigo_PromocaoSN", "Artigo_DesCliSN", "Artigo_UltimaVenda", "Artigo_UltimaCompra", "Artigo_PMCompra", "Artigo_UltPvenda1", "Artigo_UltPvenda2", "Artigo_UltPvenda3", "Artigo_UltPcompra1", "Artigo_UltPcompra2", "Artigo_UltPcompra3", "Artigo_MargemPromo", "Artigo_MargemFunc", "Artigo_EntradasDiversas", "Artigo_EntradasFactura", "Artigo_PontosFuncionario", "Artigo_StockInicial", "Artigo_StockActual", "Artigo_StockMinimo", "Artigo_Grupo", "Desc_Abreviada", "Cod_Barras", "Def_Venda", "Def_ConsumoInterno", "Fornecedor", "INACTIVO", "PrecoIVA1", "PrecoIVA2", "PrecoIVA3", "UltPrecoCompraSDesc", "Cod_Fornecedor", "QuantidadeUnit", "Unidade", "StockConsumo", "Filial", "DataUltModificacao", "Pontos_Activo", "DescricaoPesquisa", "ConsumoAplicacao", "ConsAplic_CodFixoControlo", "ConsAplic_CodigoFixo", "ConsAplic_MaxUnidades", "Desc_Embalagem", "Desc_Quantidade", "ConsAplic_GrupoServ", "ConsAplic_Seccao", "StockMaximo", "DataInicial", "DataFinal", "HoraInicial", "HoraFinal", "Desconto", "Promocao", "Segunda", "Terca", "Quarta", "Quinta", "Sexta", "Sabado", "Domingo", "Sexo", "FaixaEtaria", "GruposCodigo", "Artigo_DescontaPontos", "Artigo_Editavel", "Artigo_Stock", "Artigo_Faturado")

        DeleteTable("Artigo_Info")
        InsertTable4FieldsP2("Artigo_Info", "Artigo", "Preco_Medio", "Preco_Ultimo", "Data_Ultimo", "Filial")

        DeleteTable("Artigo_QuantidadesEncomendar")
        InsertTable4FieldsP1("Artigo_QuantidadesEncomendar", "Artigo", "Quantidade", "Filial", "DataUltModificacao")


    End Sub


    Private Sub DeleteTable(ByVal tablename As String)
        Dim strSQL As String
        OpenMYSQL()
        strSQL = "TRUNCATE TABLE " + tablename
        Dim cmd As New MySql.Data.MySqlClient.MySqlCommand(strSQL, ConnMYSQL)
        cmd.ExecuteNonQuery()
        CloseMYSQL()
    End Sub


Private Sub InsertTable4Fields(ByVal tablename As String, ByVal Field1 As String, ByVal Field2 As String, ByVal Field3 As String, ByVal Field4 As String)
        OpenMDB()
        OpenMYSQL()

        Dim CmdSelect = New OleDbCommand("SELECT * FROM " + tablename, ConnMDB)
        Dim DR As OleDbDataReader
        DR = CmdSelect.ExecuteReader()


        While (DR.Read())

            Dim CmdInsert = New MySqlCommand("INSERT INTO " + tablename + " (" + Field1 + "," + Field2 + "," + Field3 + "," + Field4 + ") VALUES (@f1, @f2, @f3, @f4)", ConnMYSQL)
            CmdInsert.Parameters.AddWithValue("@f1", DR(0).ToString())
            CmdInsert.Parameters.AddWithValue("@f2", DR(1).ToString())
            CmdInsert.Parameters.AddWithValue("@f3", CDate(DR(2).ToString()))
            CmdInsert.Parameters.AddWithValue("@f4", CDate(DR(3).ToString()))
            CmdInsert.ExecuteNonQuery()
        End While

        CloseMDB()
        CloseMYSQL()

    End Sub

    Private Sub InsertTable4FieldsP1(ByVal tablename As String, ByVal Field1 As String, ByVal Field2 As String, ByVal Field3 As String, ByVal Field4 As String)
        OpenMDB()
        OpenMYSQL()

        Dim CmdSelect = New OleDbCommand("SELECT * FROM " + tablename, ConnMDB)
        Dim DR As OleDbDataReader
        DR = CmdSelect.ExecuteReader()


        While (DR.Read())

            Dim CmdInsert = New MySqlCommand("INSERT INTO " + tablename + " (" + Field1 + "," + Field2 + "," + Field3 + "," + Field4 + ") VALUES (@f1, @f2, @f3, @f4)", ConnMYSQL)
            CmdInsert.Parameters.AddWithValue("@f1", DR(0).ToString())
            CmdInsert.Parameters.AddWithValue("@f2", DR(1).ToString())
            CmdInsert.Parameters.AddWithValue("@f3", DR(2).ToString())
            CmdInsert.Parameters.AddWithValue("@f4", CDate(DR(3).ToString()))
            CmdInsert.ExecuteNonQuery()

        End While

        CloseMDB()
        CloseMYSQL()

    End Sub

A minha questão é como é que eu agora faço um IF (condição) para as duas CONNECTIONS STRINGS diferentes que tenho...

Por exemplo:

IF ("Select Database1.MDB Table Adiantamento Collumn Adiantamento_Nr" , CONNMDB) < ("Select Database1.MDB Table Adiantamento Collumn Adiantamento_Nr" , CONNMYSQL)

DeleteTable("Adiantamento") 
        InsertTable16FieldsP1("Adiantamento", "Adiantamento_Nr", "Adiantamento_Data", "Cliente", "Valor", "TaxaIVA", "ValorIVA", "TipoPagamento", "Filial", "DataUltModificacao", "Hash", "HashControl", "SystemEntryDate", "Anulado", "AnuladoMotivo", "FilialOriginal", "Posto")

ELSE

 

NAO FAZ

 

 

Preciso mesmo de ajuda para seguir com isto para a frente....

Eu tou a apagar e a fazer novo insert porque nao consegui encontrar um metodo de descobrir quando tenho que fazer insert ou update ou delete...

E para resolver faço apago no mysql a coisa e volto a colocar mas só pode acontecer caso já exista novos registos no MDB(acess)


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

Pois, já percebi que não seguiste a minha indicação da coluna do timestamp como controlo de insert/update/delete dos registos...

Bem, então vamos lá.

Antes de mais, não necessitas de ter um método para cada tabela. Basicamente podes fazer um método genérico de cópia. Dado que as bases de dados são homogéneas, basta-te fazeres um select * ao Access, tal como já tens, e depois consultares os metadados/tipo de dados de cada coluna para saberes se é uma string, um numérico, uma data, etc. Fazes isso uma vez e ficas com um método que dá para qualquer tabela.

Se estás a fazer um delete a todas as tabelas, então não tens de te preocupar em fazer o if, apenas apagas e recrias a coisa. Ou compreendi mal?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster

Boas

Tudo bem :)

 

Percebeste mal... a minha questão é que não quero andar sempre a apagar e recriar.

Apenas quero verificar se existe no acess na tabela X mais registos...

Caso exista mais registos na tabela X do Acess então faz essa delete e insert no MYSQL...

Deve ser apenas um if numa linha mas com condição de QUERYse existir mais registos no MDB então actualiza com um DELETE e INSERT na Tabela MYSQL

Mas como tenho dois connections MDB e MYSQL a construção da condição está a me ser dificil fazer a mesma....

 


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

Ah, ok.

Mas essa técnica de saber se existe mais registos não funciona. Se tiveres um delete e um insert vais ter o mesmo número de registos e não vais atualizar quando devias atualizar. O mesmo quando tens um update, os dados mudaram mas o número de registos mantém-se.

Tens de ter algum tipo de controlo para saber isso, daí te ter referido a utilização do timestamp em cada registo. Se não queres usar isso, podes de ter algo como uma tabela de controlo onde cada vez que há modificações numa tabela, regista o nome da tabela que sofreu alteração (seja insert, update ou delete). Quando fores fazer a sincronização, basta consultares essa tabela para saberes o que tens de atualizar. No final da sincronização, limpas essa tabela de controlo.

 

Quanto à construção da condição não tem ciência nenhuma. Não vais comparar diretamente as bases de dados. Vais sim obter a informação de cada uma delas e, no teu código, implementares a lógica de comparação, de cópia, etc..


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster

Eu penso que nao estas a entender.

Do lado do MDB tenho um programa externo a fazer registos no mesmo MDB

Agora repara no cenario...

Exemplo:

MDB Tabela Clientes

24-10-2017 11:00

campo: ID 1 -10 (ou seja temos 10 registos)

MYDQL TabelaClientes

24-10-2017 11:00

campo: ID 1 -10 (ou seja temos 5 registos)

 

Conclusao necessario apagar do mysql e fazer novo insert para ter os 10 registos para já esquece os updates.

a unica condição é SQL a comparar as duas tabelas em cada uma das base de dados visto que já fiz o conectores para as mesmas.Preciso de uma instrução com a Syntax Correcta SQL QUERY----

Eu nao gosto complicar... Mas se achares que estou a pensar mal... diz-me

 

 

 


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
informaster

Desculpa não te disse mas tenho um TIMER de segundo a segundo para futuramente colocar defacto esse query que te falo.


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites
M6

Queres uma condição SQL que compare duas tabelas em ligações diferentes, é isso?


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
M6

Simplesmente não é possível de o fazeres. Por isso é que te disse que tens de fazer esse trabalho no VB.Net.

A bem da verdade até poderia ser feito com base de dados federadas, mas isso é outro campeonato e duvido que existam soluções para juntar Access e MySQL e, a existir, não devem ser baratas.


10 REM Generation 48K!
20 INPUT "URL:", A$
30 IF A$(1 TO 4) = "HTTP" THEN PRINT "400 Bad Request": GOTO 50
40 PRINT "404 Not Found"
50 PRINT "./M6 @ Portugal a Programar."

 

Share this post


Link to post
Share on other sites
informaster

Agora falta me é isto....

    Private Sub btVerificacaoDBMysql_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btVerificacaoDBMysql.Click
        Dim strSQL As String
        strSQL = ("SELECT SCHEMA_NAME FROM information_schema.SCHEMATA WHERE SCHEMA_NAME=' " + txtDbMYSQL.Text + "'")

        CreateDBMySQL(txtDbMYSQL.Text)
        CreateDB(txtDbMYSQL.Text)
        MsgBox("BASE DE DADOS CRIADA")
    End Sub

Como é que se returna o resultado desse srtSQL para poder comparar com IF?


 

 

Nuno Revez

@informaster

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.