Convidado 11/3/2013, 01:23
Mais mastigado que isso, impossível:
no exemplo tem dois BE, o que esta vinculado ao BD e o Antigo
Emite mensagem perguntando se deseja criar a base... se a resposta for
sim direcionara ao codigo que cria uma nova base, este codigo nao esta
criado, pesquise sobre isso
Abra o formulario e clique no botão, verifica o BD antigo comparando com novo, importando os registros que não tenha no novo, do BD antigo.
- Código:
Option Compare Database
Option Explicit
Dim Tabelas
Function VerificaBase()
Dim Msg As String
Msg = MsgBox("Deseja criar uma nova Base de Dados?", vbYesNo + vbQuestion, "ATENÇÃO")
Select Case Msg
Case vbYes
MsgBox "Códigos para Criar BD"
Case vbNo
Call ImportaRegistros
End Select
End Function
Sub ImportaRegistros()
'*******************************************************************************
'Popula o recordset com os dados importados para posterior comparação
'*******************************************************************************
Dim dbnovo As DAO.Database, dbAntigo As DAO.Database
Dim RsNovo As DAO.Recordset, RsAntigo As DAO.Recordset
Dim StrSQLNovo As String, StrSQLAntigo As String
Dim Msg As String, Caminho As String
Dim X As Integer, NumCampos As Integer, N As Integer, Z As Integer
Dim CountRS As Long
Caminho = CurrentProject.Path
'Seta a variável db com o banco externo
Set dbnovo = OpenDatabase(Caminho & "\BD_Exemplo_be.mdb", False, False, "MS Access;PWD=senha")
Set dbAntigo = OpenDatabase(Caminho & "\BD_Exemplo_Antigo_be.mdb", False, False, "MS Access;PWD=senha")
'----------------------------------------------------------------
'Carrega em uma Matriz o nome das tabelas
'----------------------------------------------------------------
On Error Resume Next
Dim tbl As DAO.TableDef
Dim I As Integer
Dim NomeTabela As String
For I = CurrentDb.TableDefs.Count - 1 To 0 Step -1
If Left(CurrentDb.TableDefs(I).Name, 4) <> "MSys" Then
If Left(CurrentDb.TableDefs(I).Name, 1) <> "~" Then
NomeTabela = NomeTabela & CurrentDb.TableDefs(I).Name & "|"
End If
End If
Next I
Tabelas = Split(NomeTabela, "|")
'----------------------------------------------------------------
For X = 0 To UBound(Tabelas)
Set RsNovo = dbnovo.OpenRecordset("SELECT * From " & Tabelas(X) & ";")
Set RsAntigo = dbAntigo.OpenRecordset("SELECT * From " & Tabelas(X) & ";")
'***********************************************************************************************************
'Faz um loop pela tabela importada
'Os códigos dos registros da tabela
RsAntigo.MoveFirst
Do While Not RsAntigo.EOF
'Contagem de registros importados
CountRS = CountRS + 1
NumCampos = RsAntigo.Fields.Count
RsNovo.FindFirst "Codigo = " & RsAntigo(0) & ""
If RsNovo.NoMatch Then
RsNovo.AddNew
'Inicio o loop pelos campos excluindo o campo da chave primaria que é o campo 0
For Z = 0 To (NumCampos - 1)
RsNovo.Fields(Z) = RsAntigo.Fields(Z)
Next Z
'Atualizo o Recordset
RsNovo.Update
End If
'Movo o RsImport para o proximo registro
RsAntigo.MoveNext
Loop
MsgBox "Foram importados: " & CountRS & " Registros da tabela: " & Tabelas(X) & "", vbInformation, "PRONTO"
CountRS = 0
Next X
RsNovo.Close
RsAntigo.Close
End Sub