MS Access - tipo de dados de atualização automática após a importação

0

Estou procurando atualizar automaticamente o tipo de dados de vários campos no MS Access depois de importar alguns dados do Excel para o banco de dados.

Quase todos os campos estão definidos para Text campos, e isso afetaria claramente todas as consultas que dependem de date data para serem executadas com precisão.

Um exemplo seria que alguns dos tipos de dados dos campos "Data de vencimento" são definidos como text pós-importação, enquanto eu preciso que eles sejam definidos como date ; Eu sou capaz de atualizar cada tipo de dados manualmente, mas gostaria de saber se é possível automatizar esse processo para economizar tempo, pois eu regularmente importarei dados para esse banco de dados.

Muito obrigado.

    
por SnookerFan 15.08.2013 / 14:39

3 respostas

0

Eu mesmo consegui resolver isso e fornecerei a melhor explicação possível:

É / foi uma questão muito específica relacionada / relacionada aos dados em minha planilha; houve um problema há algum tempo que envolveu a primeira linha / cabeçalhos de campo não sendo aplicada corretamente, resultando em nomes de campo numericamente incrementais no meu banco de dados. Depois de alguma pesquisa, aprendi uma maneira de resolver isso, o que resultou no problema com o qual me deparo. Agora, descartei a resolução anterior e fiz muitos pequenos ajustes na minha planilha e tudo parece estar bem novamente.

Desculpas por não ser capaz de fornecer uma explicação mais informativa; Tenho certeza de que todos vocês podem apreciar que este é um problema que é específico para mim em um nível individual e que, se eu fosse fornecer uma explicação mais detalhada, não faria sentido sem qualquer conhecimento prévio do contexto / contexto para apoiá-lo.

Muito obrigado pelas suas sugestões - todas as contribuições úteis foram devidamente aprovadas.

    
por 15.08.2013 / 15:13
1

Abra a tabela no modo Design e altere o tipo de dados. Isso alterará o campo na tabela e, subsequentemente, todos os registros armazenados nele.

Tenha em mente que o formato escolhido nas propriedades do campo pode causar problemas de exibição, dependendo do formato atual dos dados. Se os dados foram consistentes quando importados, e no formato que você precisa, deve estar OK.

    
por 15.08.2013 / 14:52
1

Aqui estão alguns códigos que escrevi para alterar o tamanho do campo dos dados CSV que eu precisava importar como todos os campos de texto. O código obtém as informações de campo de uma tabela de campos, tamanhos e tipos que criei e modifica facilmente para as alterações feitas nessa tabela.

Sub AlterFieldStructure()

' this procedure changes the field size and field types (both text and number fields)
' in the "Rebuild Copy of Grade YYYY"  tables

Dim db As Database
Dim cn As New ADODB.Connection

Dim rs_fields As New ADODB.Recordset
Dim rs_yrtable As New ADODB.Recordset

Dim SQL As String
Dim fieldlist As String

Dim yr As Variant
Dim yrArr As Variant
Dim fld As Variant
Dim fldArr()

Dim i As Long
Dim j As Long

Dim ErrMsg As String

On Error GoTo Err
Set db = CurrentDb
Set cn = CurrentProject.Connection

' get list of fields to query the "Copy from Grade YYYY" tables
SQL = "SELECT FieldName, DataType, FieldSize  FROM GradeTableFields;"
rs_fields.Open SQL, cn
rs_fields.MoveFirst

i = 1
' Array for field name, datatype, and size
Do Until rs_fields.EOF = True
    If rs_fields!FieldName <> "ID" Then
        ReDim Preserve fldArr(1 To 3, 1 To i)
        fldArr(1, i) = rs_fields!FieldName
        fldArr(2, i) = rs_fields!DataType
        fldArr(3, i) = rs_fields!FieldSize
        fieldlist = fieldlist & rs_fields!FieldName & ", "
        i = i + 1
    End If
    rs_fields.MoveNext
Loop
j = i - 1
rs_fields.Close
Set rs_fields = Nothing
fieldlist = Left(fieldlist, Len(fieldlist) - 2)
yrArr = Array(2008, 2009, 2010, 2011, 2012)
For Each yr In yrArr
    ' for each field in field array
    For i = 1 To j
        SQL = "ALTER TABLE [Rebuild Copy of Grade " & yr & "] ALTER COLUMN " & _
               "[" & fldArr(1, i) & "] "
        If fldArr(2, i) = "Text" Then
            SQL = SQL & "Text(" & fldArr(3, i) & ");"
        ElseIf fldArr(2, i) = "Number" Then
            SQL = SQL & fldArr(3, i) & ";"
        Else
            MsgBox "DataType for " & fldArr(1, i) & " is not Text or Number", vbExclamation + vbOKOnly
            Exit Sub
        End If
        Debug.Print SQL
        db.Execute SQL, dbFailOnError
    Next i
Next yr
cn.Close
Set cn = Nothing
Set db = Nothing

Exit Sub
Err:
ErrMsg = "Error: " & Err.Number & "  " & "  " & Err.Description
Debug.Print ErrMsg
cn.Close
Set cn = Nothing
Set db = Nothing

End Sub
    
por 15.08.2013 / 15:05