MS Access - Perbarui Otomatis Jenis Data Setelah Impor


0

Saya mencari untuk secara otomatis memperbarui tipe data berbagai bidang di MS Access setelah saya mengimpor beberapa data Excel ke dalam database.

Hampir semua bidang diatur ke Textbidang, dan ini jelas akan memengaruhi pertanyaan apa pun yang mengandalkan datedata agar dapat berjalan secara akurat.

Contohnya adalah bahwa beberapa tipe data bidang "Tanggal Jatuh Tempo" diatur ke textpasca-impor, sedangkan saya mengharuskan mereka diatur ke date; Saya dapat memperbarui setiap tipe data secara manual, tetapi ingin tahu apakah mungkin untuk mengotomatiskan proses ini untuk menghemat waktu karena saya akan secara teratur mengimpor data ke dalam basis data ini.

Terimakasih banyak.


Sudahkah Anda mempertimbangkan untuk membuat tabel baru dengan tipe data yang tepat dan kemudian menambahkan teks dan bidang lainnya ke tabel baru? Cepat dan tidak ada pengkodean selain transformasi bidang di mana Anda berpikir konversi tipe implisit akan memotong data Anda.
chuff

@ chuff Saya telah mempertimbangkan ini, ya, tetapi berharap untuk mencapai pendekatan yang lebih "otomatis" dengan keterlibatan pengguna yang minimal.
SnookerFan

Jawaban:


1

Buka tabel di Design View dan ubah tipe datanya. Ini akan mengubah bidang dalam tabel, dan selanjutnya semua catatan yang disimpan di sana.

Ingatlah bahwa format yang Anda pilih di properti bidang dapat menyebabkan masalah tampilan tergantung pada format data saat ini. Jika data konsisten ketika diimpor, dan dalam format yang Anda butuhkan, itu harus OK.


Apakah ini (tipe data) tetap ada ketika saya selanjutnya mengimpor data dan menimpa tabel? Alasan saya bertanya adalah karena inilah yang telah saya lakukan sampai sekarang dan masih menetapkan semua tipe data untuk textpasca-impor.
SnookerFan

Tipe data adalah properti tabel. Impor teks hanya menempatkan data ke dalam bidang dan tidak dapat mengubah properti tabel. Tentu saja, pastikan Anda membuat cadangan basis data sebelumnya.
CharlieRB

Ya, saya mengetahui hal ini tetapi pertanyaan saya terkait dengan apakah tipe data akan tetap berlaku atau tidak setelah saya mengimpor versi data yang diperbarui (yang dalam .xlsformat). Saya baru saja mengujinya - saya telah menetapkan tipe data, menyimpan perubahan, dan mengimpor data sekali lagi, menimpa tabel saat ini - dan itu "dikembalikan" kembali ke textbidang sekali lagi.
SnookerFan

1

Berikut adalah beberapa kode yang saya tulis untuk mengubah ukuran bidang data CSV yang harus saya impor karena semua bidang teks. Kode mendapatkan informasi bidang dari tabel bidang, ukuran dan jenis yang saya buat, dan mudah dimodifikasi melalui perubahan ke tabel itu.

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

0

Saya telah berhasil menyelesaikan ini sendiri dan akan memberikan penjelasan terbaik yang saya bisa:

Ini adalah / merupakan masalah yang sangat spesifik yang terkait / terkait dengan data dalam spreadsheet saya; ada masalah beberapa waktu lalu yang melibatkan header baris / bidang pertama tidak diterapkan dengan benar, menghasilkan nama bidang yang bertambah secara numerik di database saya. Setelah beberapa penelitian, saya belajar cara untuk menyelesaikan ini, yang kemudian menghasilkan masalah yang saya tangani dengan Anda. Sekarang, saya telah membuang resolusi sebelumnya dan telah membuat banyak penyesuaian kecil pada spreadsheet saya dan semuanya tampak baik kembali.

Permintaan maaf karena tidak dapat memberikan penjelasan yang lebih informatif; Saya yakin Anda semua dapat menghargai bahwa ini adalah masalah yang khusus bagi saya di tingkat individu dan bahwa, jika saya memberikan penjelasan yang lebih rinci, itu tidak masuk akal tanpa pengetahuan sebelumnya tentang konteks / latar belakang untuk mendukungnya.

Terima kasih banyak atas saran Anda - semua kontribusi yang bermanfaat telah dipilih secara tepat.


Untuk meringkas ini untuk Googler: MS Access menarik tipe data kolom dari input sumber JIKA itu file Excel dan akan menimpa tipe kolom Access dengan tipe yang sesuai dari Excel. Jadi sinkronkan dengan mereka di Excel atau gunakan file impor CSV / TXT di mana tidak ada tipe data yang dapat disimpan.
nixda
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.