MaximoAccess

Caro Usuário, não tire as suas duvidas nas Salas de Repositório, abra sempre um novo tópico relacionado, nas salas destinadas para o efeito, como Sala de Tabelas, Consultas, Formulários, Relatórios, Macros, Módulos e VBA.

Obrigado

Administração do MaximoAccess

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access

    [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Compartilhe

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/09/2014

    [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  JSommavilla em Sex 17 Jul 2015, 14:29

    Por favor, preciso de uma luz!

    Não tenho muita experiencia no access. Mas, após várias consultas aqui no fórum e em outros sites, não consegui desvendar a seguinte duvida:

    Tenho uma tabela no access chamada "Telefone Movel".  Fiz um código para a importação do arquivo texto da operadora direto para essa tabela. Os campos da tabela eu defini tudo como texto curto, pois só assim eu consigo importar os dados. Se eu mudar a formatação da tabela para data, número, a importação não é feita, pois dá o erro de formatação dos dados.

    Gostaria de saber se tem como, no código de importação, eu já formatar os campos para data, numero, etc., porque depois, preciso pesquisar por data, numero de telefone, etc. Já tentei o cDate, e outras formas de formatação, mas ainda não consegui.

    Outro detalhe, o cabeçalho do arquivo, neste exemplo tem 27 linhas. Porém, em outros arquivos texto ele tem menos ou mais linhas... Poderia o código calcular automaticamente o numero de linhas do cabeçalho?

    Caso alguém possa me ajudar, agradeço antecipadamente.

    Segue abaixo o código, que até aqui consegui desenvolver depois de muita pesquisa:


    Sub telefonemovel()

    Dim Linha As String
    Dim rs As DAO.Recordset
    Dim Matriz() As String
    Dim fDialog As Office.FileDialog


    'Dimensiona o objeto
    Dim Fd As Object

    'Define a caixa de diálogo como seleção de pasta(s)
    Set Fd = Application.FileDialog(1)


    'Define as propriedades da caixa de diálogo

    With Fd

    'Título da caixa de diálogo

    .Title = "Selecione o local onde se encontra o arquivo..."
    .Filters.Clear
    .Filters.Add "Access Projects", "*.TXT"

    'Caso este método retorne Verdadeiro significa que o usuário selecionou uma pasta
    If .Show Then

    'Retorna o caminho da pasta para a função
    SelecionarPasta = .SelectedItems(1)

    Else

    MsgBox "Clique em 'OK' para abortar a importação."

    End If

    End With


    'Finaliza o objeto
    Set Fd = Nothing

    f = FreeFile

    Set rs = CurrentDb.OpenRecordset("Telefone Movel")

    Open SelecionarPasta For Input As #f

    Line Input #f, Linha ' Pula a 1ª linha
    Line Input #f, Linha ' Pula a 2ª linha
    Line Input #f, Linha ' Pula a 3ª linha
    Line Input #f, Linha ' Pula a 4ª linha
    Line Input #f, Linha ' Pula a 5ª linha
    Line Input #f, Linha ' Pula a 6ª linha
    Line Input #f, Linha ' Pula a 7ª linha
    Line Input #f, Linha ' Pula a 8ª linha
    Line Input #f, Linha ' Pula a 9ª linha
    Line Input #f, Linha ' Pula a 10ª linha
    Line Input #f, Linha ' Pula a 11ª linha
    Line Input #f, Linha ' Pula a 12ª linha
    Line Input #f, Linha ' Pula a 13ª linha
    Line Input #f, Linha ' Pula a 14ª linha
    Line Input #f, Linha ' Pula a 15ª linha
    Line Input #f, Linha ' Pula a 16ª linha
    Line Input #f, Linha ' Pula a 17ª linha
    Line Input #f, Linha ' Pula a 18ª linha
    Line Input #f, Linha ' Pula a 19ª linha
    Line Input #f, Linha ' Pula a 20ª linha
    Line Input #f, Linha ' Pula a 21ª linha
    Line Input #f, Linha ' Pula a 22ª linha
    Line Input #f, Linha ' Pula a 23ª linha
    Line Input #f, Linha ' Pula a 24ª linha
    Line Input #f, Linha ' Pula a 25ª linha
    Line Input #f, Linha ' Pula a 26ª linha
    Line Input #f, Linha ' Pula a 27ª linha
    Line Input #f, Linha ' Pula a 28ª linha

    Do While Not EOF(f)  ' Começa a importação a partir da 28ª linha

    Matriz() = Split(Linha, ";")
    rs.AddNew
    rs!Tel = Matriz(0) ' Se não tiver delimitador ";" no começo a matriz começaria de Zero
    rs!Seção = Matriz(1)
    rs!data = Matriz(2)
    rs!Hora = Matriz(3)
    rs!OrigemDestino = Matriz(4)
    rs!Número = Matriz(5)
    rs!Duração = Matriz(6)
    rs!Tarifa = Matriz(7)
    rs!valor = Matriz(Cool
    rs!ValorCobrado = Matriz(9)
    rs!Nome = Matriz(10)
    rs!CC = Matriz(11)
    rs!Matricula = Matriz(12)
    rs!SubSeção = Matriz(13)
    rs!TipoImposto = Matriz(14)
    rs!Descrição = Matriz(15)
    rs!Cargo = Matriz(16)
    rs.Update

    Line Input #f, Linha 'lê uma linha do arquivo texto

    Loop

    Close #f

    rs.Close

    MsgBox "Arquivo Importado com Sucesso!", vbInformation, "Importação de arquivo txt"

    End Sub

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  Alexandre Neves em Sex 24 Jul 2015, 19:48

    Boa tarde, e bem-vindo ao fórum
    Formate os dados ao importar
    ex: rs!data = CDate(Matriz(2))


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/09/2014

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  JSommavilla em Sex 24 Jul 2015, 19:59

    Prezado Alexandre Neves,

    Obrigado por responder.
    Fiz como você orientou. Também formatei o campo da tabela de texto para data. Porém, ainda dá "erro em tempo de execução 13 tipos incompatíveis".

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  Alexandre Neves em Sex 24 Jul 2015, 20:26

    Qual o valor de Matriz(2)?


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/09/2014

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  JSommavilla em Sex 24 Jul 2015, 20:32

    Prezado,

    O valor deste campo é uma data, exemplo: 24/07/2015. Ou seja, no arquivo texto a ser importado, já está desta forma. Porém, também tem linhas que esse campo está em branco.

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  Alexandre Neves em Sex 24 Jul 2015, 20:40

    faça uma verificação antes de importar
    if len(Matriz(2) &"")>0 then rs!data = CDate(Matriz(2))


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/09/2014

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  JSommavilla em Sex 24 Jul 2015, 21:18

    Coloquei o comando em várias posições antes de importar, porém, agora a mensagem, é: "erro em tempo de execução 9 subscrito fora do intervalo"
    Onde exatamente devo colocar essa verificação no código?

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  Alexandre Neves em Sex 24 Jul 2015, 21:53

    coloque no mesmo lugar que estava


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

    JSommavilla
    Novato
    Novato

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 28
    Registrado : 21/09/2014

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  JSommavilla em Sab 25 Jul 2015, 03:50

    Prezado Alexandre Neves, agradeço muitíssimo pela ajuda! Very Happy

    Com sua preciosa dica, o código funcionou perfeitamente. Para exemplificar, reproduzo o código abaixo com o "Antes e Depois", para que possa servir a alguém com a mesma dúvida.
    Acrescento, ainda, que aproveitando a sua dica, fiz as alterções para outros campos que armazenam valores.

    Nota: A tabela que receberá os valores, as colunas tem que estar formatadas de acordo com as informações que irão armazenar. No meu caso: Na tabela TelefoneMovel1, ficou assim:

    coluna data: tipo: Data/hora

    coluna valor: tipo: número, tamanho do campo: duplo, casas decimais =2

    coluna valorcobrado: tipo: número, tamanho do campo: duplo, casas decimais =2

    coluna cargo: tipo: número, tamanho do campo: duplo, casas decimais =0

    Código:

    Matriz() = Split(Linha, ";")
    rs.AddNew
    rs!Tel = Matriz(0) ' Se não tiver delimitador ";" no começo a matriz começaria de Zero
    rs!Seção = Matriz(1)

    'rs!data = Matriz(2) ' ANTES 2
    If Len(Matriz(2) & "") > 0 Then rs!data = CDate(Matriz(2)) 'DEPOIS 2

    rs!Hora = Matriz(3)
    rs!OrigemDestino = Matriz(4)
    rs!Número = Matriz(5)
    rs!Duração = Matriz(6)
    rs!Tarifa = Matriz(7)

    'rs!valor = Matriz(Cool ' ANTES 8
    If Len(Matriz(Cool & "") <> 0 Then rs!valor = Format((Matriz(Cool), "##.##0,00") 'DEPOIS 8

    'rs!valorCobrado = Matriz(9) 'ANTES 9
    If Len(Matriz(9) & "") <> 0 Then rs!valorCobrado = Format((Matriz(9)), "##.##0,00") 'DEPOIS 9

    rs!Nome = Matriz(10)
    rs!CC = Matriz(11)

    'rs!Matricula = Matriz(12)'ANTES 12
    If Len(Matriz(12) & "") <> 0 Then rs!Matricula = Format((Matriz(12)), "##.##0,00") 'DEPOIS 12

    rs!SubSeção = Matriz(13)
    rs!TipoImposto = Matriz(14)
    rs!Descrição = Matriz(15)

    'rs!Cargo = Matriz(16)' ANTES 16
    If Len(Matriz(16) & "") <> 0 Then rs!Cargo = Format((Matriz(16)), "##.##0") ' DEPOIS16

    rs.Update

    Alexandre Neves
    Moderador Global
    Moderador Global

    Respeito às Regras 100%

    Sexo : Masculino
    Localização : Portugal
    Mensagens : 5890
    Registrado : 05/11/2009

    Re: [Resolvido]Após importar texto para uma tabela, como formatar os campos de data e número?

    Mensagem  Alexandre Neves em Sab 25 Jul 2015, 08:05

    [Você precisa estar registrado e conectado para ver esta imagem.]


    .................................................................................
    Access 2010. Mande bd que dê para testar (indique a versão). Não peça para fazer o que já tem feito. Dê todos os detalhes.
    Não coloquem entraves como senhas, esconder controlos, etc. Disponibilizem o mais limpo possível
    Só respondo a mensagens privadas, se forem de assunto privado; às outras não respondo.
    Quem trabalha e mata a fome não come o pão de ninguém; mas quem não trabalha e come, come sempre o pão de alguém. António Aleixo

      Data/hora atual: Sab 10 Dez 2016, 04:52