Ir para conteúdo
Fórum Script Brasil
  • 0

De .dbf Para .mdb - Urgente


Guest Visitante

Pergunta

Olá!

Preciso muito da ajuda de vocês. É o seguinte:

Um sistema, que normalmente eu não tenho acesso, gera uma nova tabela de Diagnostico ".dbf" diariamente com o nome variando de acordo com a data de quando um equipamento deu algum defeito. (ex.: 20070221AL.DBF)

Tenho que acessar os dados desta tabela e gerar um relatório de acordo com a data selecionada pelo usuário.

Acredito que exita alguma forma de copiar os dados da tabela dbf para uma tabela com dados temporários, pre-criada no Access.

Para abrir uma conexao e chamar o relatório pre-existente, eu fiz desta forma:

Dim objRelatorio As Object
Dim endRelat, nomeRelat, nomeBD, nomeTabDiag, sqlStatement As String

gDataInicial = cbxDiaInicial.Text & "/" & Trim(gMesInicial) & "/" & txtAnoInicial.Text
gDataFinal = cbxDiaFinal.Text & "/" & Trim(gMesFinal) & "/" & txtAnoFinal.Text
gDtInicial = CDate(gDataInicial)
gDtFinal = CDate(gDataFinal)

endRelat = "c:\MinhaPasta\Relatorio\"
nomeBD = "Relat.mdb"
nomeRelat = "Diagnostico"

Set objAccess = CreateObject("Access.Application")

With objAccess
.Visible = True
.OpenCurrentDatabase filepath:= endRelat & nomeBD
.DoCmd.OpenReport nomeRelat, acViewPreview, , "AlarmesDiag.Data >= # " & gDtInicial & " # AND AlarmesDiag.Data >= # " & gDtFinal & " # "
.DoCmd.Maximize
.DoCmd.Maximize

End With[/codebox]

Mas agora preciso ler aquela tabela 20070221AL.DBF e inserir os dados

na tabela do access chamada AlarmesDiag, que possui os seguintes campos:

Data, Hora (que é hora que ocorreu algum problema), Equipamento, Operador.

O usuário seleciona o período para a criação do relatório.

Por exemplo, se ele quiser ver todos os defeitos ocorridos entre ontem e hoje: gDtInicial= 26/2/2007 e gDtFinal=27/2/2007.

O maior problema é saber se eu posso abrir mais de uma conexao ao mesmo tempo e como fazer isso.

Ou se existe alguma forma que eu possa selecionar os dados deste período na tabela 20070221AL.DBF e gravar na tabela temporária AlarmesDiag do Access.

Alguém tem alguma idéia sobre isso?

Obrigado pessoal!

Link para o comentário
Compartilhar em outros sites

5 respostass a esta questão

Posts Recomendados

  • 0

Eu fiz um código bem simples para importar uma tabela DBF para uma tabela do Access, do mesmo jeito que ocorreria se você clicasse com o botão direito na janela de tabelas e escolhesse "Importar...". Só que está lá no serviço, mas pode deixar que hoje mesmo eu pego e posto aqui.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

  • 0

Olá !

Estou escrevendo porque preciso muuuuuuuuuuuuuito de ajuda e não sei mais o que fazer.

Preciso transferir dados de um arquivo dbf para uma tabela do access usando o VB.

Já tentei com o comando DoCmd mas não sei o que estou fazendo de errado, que ele cria uma cópia de uma tabela existente do access. Sou iniciante, sou a única da área aqui e não tenho ideia do que eu tenho que fazer p/ isso funcionar...

Uso ADODB

ODBC

objAccess.DoCmd.TransferDatabase acImport, "DBase IV", "c:\MinhaPasta\", acTable, "AlarmTable.dbf", "AlarmLog"

e

objAccess.DoCmd.TransferDatabase acImport, "DBase IV", "c:\MinhaPasta", acTable, "AlarmTable.dbf", "AlarmLog"

e

DoCmd.TransferDatabase acImport, "DBase IV", "c:\MinhaPasta\AlarmTable.dbf"

Mas nada da certo!

Tambem tentei assim:

db.Open ("SELECT * INTO [dBase IV;DATABASE=c:\MinhaPasta;].[AlarmTable.dbf] FROM AlarmesDiag")

e desta forma:

db.Open ("SELECT * INTO Aux IN 'c:\MinhaPasta\Relat.mdb' FROM AlarmesDiag")

e de mil outras formas.... Mas quando funciona, só copia a estrutura da tabela do access.

mas eu preciso dos dados!!!!! AHHHH

O pior é que eu teria que entregar td o relatório pronto amanhã!

Por favor,

se você tiver alguma ideia dá uma luz! Please...

Obrigado,

Dory.

Link para o comentário
Compartilhar em outros sites

  • 0

No seu BD do Access clique em "Módulos" e depois clique em "Novo". Será aberto então o editor do VBA com um novo módulo. Neste, cole a seguinte rotina:

Public Sub Atualizar()
    On Error Resume Next
    DoCmd.DeleteObject acTable, "TABELA"
    On Error GoTo 0
    
    DoCmd.TransferDatabase , "dBASE III", "c:\pasta", acTable, "arquivo.dbf", "TABELA"
End Sub
Lembre-se de salvar clicando no disquete (terceiro ícone da barra de ferramentas). No seu programa em VB você poderá usar o seguinte código para chamar esta rotina Atualizar() que está no BD:
Screen.MousePointer = vbHourglass
    
Dim a As New Access.Application
a.OpenCurrentDatabase "CAMINHO_DO_SEU_MDB"
a.Run "Atualizar"
a.CloseCurrentDatabase
a.Quit

Screen.MousePointer = vbDefault

Faça referência a "Microsoft Access Object Library" pela opção "References..." do menu "Project".

Antes de executar o código acima, certifique-se de que o seu próprio programa *não* esteja com a respectiva tabela aberta. Só abra a tabela após a atualização terminar.

Abraços,

Graymalkin

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...