Minggu, 20 Januari 2013

Cara membuat MS Access Database dari MS Excel menggunakan DAO

Cara membuat MS Access Database dari MS Excel menggunakan DAO

Pada Halaman ini

GEJALA

Dalam beberapa kasus, Anda mungkin ingin membuat sebuah database Microsoft Access dari Microsoft Excel untuk Windows 95 versi 7.0 workbook, tetapi tidak dapat menggunakan akses link. Selain menggunakan metoda memindahkan Microsoft Excel workbook ke Microsoft Access menggunakan akses link, Anda juga dapat menggunakan data akses objek (DAO).

PENYEBAB

Alasan alasan dari tidak bisanya menggunakan akses link (namun tidak terbatas pada) adalah sebagai berikut:
  • Microsoft Access untuk Windows 95 versi 7.0 tak terinstal pada komputer.
  • Tidak ada cukup sumber daya sistem untuk menjalankan Microsoft Excel dan Microsoft Access pada saat yang sama.

TEKNIK PEMECAHAN MASALAH

Anda dapat menggunakan data akses objek (DAO) untuk membuat Access Database pada semua versi Microsoft Access. Meskipun metode ini tidak lengkap sebagai akses link, Anda dapat menggunakannya untuk membuat sebuah database Microsoft Access dari Microsoft Excel Workbook. Metode ini harus digunakan hanya jika Anda berpengalaman dengan Visual Basic untuk aplikasi dan cukup akrab dengan Microsoft Access database untuk mengedit tabel yang dibuat oleh kode ini.

Beberapa hal yang Anda mungkin perlu ubah adalah tipe data dari masing-masing bidang dan apakah anda ingin atau tidak melakukan pengindeksan.

INFORMASI LEBIH LANJUT

Microsoft menyediakan pemrogaman hanya untuk ilustrasi, tanpa garansi baik tersurat maupun tersirat. Ini mencakup, namun tidak terbatas pada, jaminan tersirat dapat diperjualbelikan atau kesesuaian untuk tujuan tertentu. Artikel ini mengasumsikan bahwa Anda sudah terbiasa dengan bahasa pemrogaman yang ditunjukkan dan dengan alat yang digunakan untuk membuat dan memperbaiki prosedur. Teknisi Microsoft dapat membantu menjelaskan fungsionalitas prosedur tertentu, tetapi mereka tidak akan mengubah contoh tersebut untuk menyediakan fungsionalitas tambahan atau menyusun prosedur untuk memenuhi persyaratan khusus. Kode dalam artikel ini akan disampaikan melalui setiap lembar kerja di buku kerja Microsoft Excel versi 7.0 dan membuat tabel Microsoft Access yang ditentukan dalam kode. Ada beberapa persyaratan untuk kode ini agar berfungsi dengan baik.

Catatan: Persyaratan ini serupa dengan apa yang akan diperlukan jika Anda telah mentransfer data menggunakan akses link.

Pastikan bahwa buku kerja yang digunakan memiliki daftar pada setiap lembar kerja yang terdiri dari setidaknya dua kolom.

Persyaratan sebagai berikut:

  • Data harus dalam bentuk kolom dengan nama kolom pada baris pertama. Sementara data mungkin mulai di setiap baris, subrutin ini mengasumsikan bahwa baris 1 berisi nama kolom dan segala sesuatu yang berada di bawah baris 1 adalah data untuk tabel.
  • Data harus berdekatan. Data yang hilang dalam catatan tidak akan merugikan subrutin ini . Namun, setelah sebuah baris kosong dijumpai, subrutin akan menganggap bahwa semua data telah diperoleh pada lembar kerja saat ini. Demikian pula, setelah kolom kosong dijumpai, subrutin akan menganggap bahwa Tidak ada lagi bidang di sebelah kanan.
  • Setiap kolom akan dianggap sebagai field dan setiap baris akan dianggap sebagai Record. Misalnya, data harus diatur sebagai berikut:
          Lname              Fname       EmpNum     SpouseName
          Ebbeson            Frida          12         Dave
          Edelstein          Alex           15
          Edmonds            Cora           18         Paul
          Eliasen            Deborah        22         Tom
          Erickson           Gregory J      25         Lisa
          Fallon             Scott          23
          Feig               Wayne A.       35         Laurie
          Fetty              Ellen M.       54         James
          
    Harap dicatat bahwa Record Tidak lengkap diperbolehkan.
Subroutine yang dijelaskan di bawah ini akan melakukan hal berikut:
  • Deklarasi variabel. hal ini tidak terlalu diperlukan, sangat berguna untuk memeriksa sintaks dan mengurangi jumlah memori yang Anda gunakan.
  • Mematikan screen updating. hal Ini akan membuat subrutin berjalan lebih cepat, kelebihan lainnya adalah Anda tidak akan melihat layar flash.
  • Membuat database. Argumen pertama akan menunjukkan di mana database akan berada , dan namanya akan menjadi apa. Subrutin menciptakan database baru dalam folder yang sama sebagai buku kerja dan dengan nama yang sama sebagai buku kerja (dengan ekstensi .mdb). Jika sudah ada database dengan nama itu dalam folder, kotak pesan akan muncul meminta jika Anda ingin menghapus database yang sudah tersedia. Hal ini dilakukan dengan menampilkan "Database Error 3294 sudah ada."
  • Mengatur loop untuk menuju semua lembar kerja di buku kerja .

    Catatan: Karena modul, bagan lembar dan dialog lembar tidak bagian dari koleksi lembar kerja, mereka tidak akan mempengaruhi subrutin.
  • Dalam loop lembar kerja, membuat tabel berdasarkan nama worksheet.
  • Masukkan loop yang berjalan melalui setiap kolom dalam kisaran data dan menciptakan field dalam tabel dengan nama yang sama dengan judul kolom. Di bagian membuat Field dari subrutin, Anda perlu tahu jenis data untuk menetapkan bidang baru. Untuk melakukan ini, subrutin terlihat pada sel secara langsung di bawah ini dan menentukan properti NumberFormat sel.

    Select Case statement telah dimasukkan dimana terlihat di sebelah kiri hampir semua surat dari NumberFormat properti. Jenis data dibuat, berdasarkan Surat ini. Jika mengembalikan data "m", "d", atau "y" , tipe data akan diset ke "dbDate." Jika mengembalikan nilai "G" , sel di bawah ini akan diformat ke format "Umum." Jika hal ini terjadi, Anda perlu menentukan jika sel berisi angka atau teks.

    Untuk menguji dan melihat apakah sel berisi angka atau teks, subrutin mencoba untuk membagi isi sel menjadi 2. Jika Divisi gagal, rutin akan masuk ke handler kesalahan, yang menentukan apakah kesalahannya adalah "Type Mismatch" . Jika hal ini terjadi, bidang diatur ke dbText. Jika divisi berhasil, subrutin turun ke sel berikutnya untuk menentukan jika divisi itu akan berhasil. Hal ini diperlukan karena Anda perlu menentukan bahwa semua catatan berisi nomor untuk bidang itu sebelum Anda menetapkan tipe data ke format angka. Jika semua divisi berhasil, akan di tetapkan sebagai jenis data dbDouble .

    Karena memeriksa setiap sel dalam kolom merupakan proses yang memakan waktu. Subroutine akan mengecek kehadiran "Zip" atau "Postal" di header kolom. Alasan untuk ini adalah bahwa ZIP pos dan kode pos harus diformat sebagai dbText. Bahkan jika Anda memiliki semua 5 digit kode pos di lembar kerja Anda, Anda mungkin ingin menambahkan lagi 9-digit kode pos suatu saat nanti. Jika Anda memiliki bidang yang diformat sebagai "dbDouble", Anda akan menerima pesan galat ketika mencoba empat nilai pada Zip Pos. Mencari "Zip" atau "Pos" mengurangi waktu prosesor untuk membuat bidang.

    Jika semua Select Case statements gagal, bidang diatur ke dbText.
  • Setelah semua bidang pada lembar kerja dibuat, semua data yang ditambahkan ke table.
  • Setelah semua data ditambahkan ke table, lembar kerja berikutnya akan dipilih dan proses dimulai lagi sampai semua lembar kerja telah dipilih dan disimpan sebagai table.

          Sub DataToAccess()
         ' Declare variables.
         Dim Db As database
         Dim Rs As Recordset
         Dim Td As TableDef
         Dim Fd As Field
         Dim x As Integer
         Dim i As Integer
         Dim f As Integer
         Dim r As Integer
         Dim c As Integer
         Dim Message As String
         Dim Title As String
         Dim LastColumn As Integer
         Dim NumberTest As Double
         Dim StartCell As Object
         Dim LastCell As Object
         Dim Response
         Dim CreateFieldFlag As Integer
         Dim Flag As Integer
    
         CreateFieldFlag = 0
         Flag = 0
    
         ' Turn off Screen Updating.
         Application.ScreenUpdating = False
         On Error GoTo ErrorHandler
    
    
         ' Create the database.
         ' This line will create an Microsoft Access 2.0 database. To vary the
         ' version of the database, change the "dbVersion" constant.
         ' See "CreateDatabase" in online Help for more information.
         ' The database will be created in the same folder as the
         ' activeworkbook.
    
         Set Db = workspaces(0).CreateDatabase(ActiveWorkbook.Path & "\" & _
            Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) _
            & ".mdb", dbLangGeneral, dbVersion20)
    
         ' Loop through all the worksheets in the workbook.
         For i = 1 To Worksheets.Count
    
            ' Select the "i th" worksheet and Cell "A1."
            ' In this example, you need column headers in the first row.
            ' These headers will become field names.
            Worksheets(i).Select
            Range("A1").Select
    
            ' If the ActiveCell is blank, open a message box.
            If ActiveCell.Value = "" Then
                Message = "There is no data in the active cell: " & _
                    ActiveSheet.Name & "!" & ActiveCell.Address & Chr(10) & _
                    "Please ensure that all your worksheets have data on " & _
                    "them " & Chr(10) & _
                    "and the column headers start in cell A1" & Chr(10) & _
                    Chr(10) & "This process will now end."
    
                Title = "Data Not Found"
    
                MsgBox Message, , Title
                Exit Sub
            End If
    
            ' Create a new Table, and use the Worksheet Name as the
            ' Table Name.
            Set Td = Db.CreateTableDef(Worksheets(i).Name)
    
            ' Find the number of fields on the sheet and store the number
            ' of the last column in a variable.
            Selection.End(xlToRight).Select
            LastColumn = Selection.Column
    
            ' Select the current region. Then find what the address
            ' of the last cell is.
            Selection.CurrentRegion.Select
            Set LastCell = Range(Right(Selection.Address, _
                Len(Selection.Address) - _
                Application.Search(":", Selection.Address)))
    
            ' Go back to cell "A1."
            Range("A1").Select
    
            ' Enter a loop that will go through the columns and
            ' create fields based on the column header.
            For f = 1 To LastColumn
                Flag = 0
    
                ' Enter a select case statement to determine
                ' the cell format.
                Select Case Left(ActiveCell.Offset(1, 0).NumberFormat, 1)
                    Case "G"    'General format
                        ' The "General" format presents a special problem.
                        ' See above discussion for explanation
                        If ActiveCell.Value Like "*Zip*" Then
                            Set Fd = Td.CreateField(ActiveCell.Value, _
                                dbText)
                            Fd.AllowZeroLength = True
                            r = LastCell.Row - 1
                            Flag = 1
                        Else
                            If ActiveCell.Value Like "*Postal*" Then
                                Set Fd = Td.CreateField(ActiveCell.Value, _
                                    dbText)
                                Fd.AllowZeroLength = True
                                r = LastCell.Row - 1
                                Flag = 1
                            End If
                        End If
    
                        ' Set up a text to determine if the field contains
                        ' "Text" or "Numbers."
                        For r = 1 To LastCell.Row - 1
                            If Flag = 1 Then r = LastCell.Row
                            CreateFieldFlag = 1
                            NumberTest = ActiveCell.Offset(r, 0).Value / 2
                        Next r
    
                        ' If we get all the way through the loop without
                        ' encountering an error, then all the values are
                        ' numeric, and we assign the data type to be "dbDouble"
                        If Flag = 0 Then
    
                            Set Fd = Td.CreateField(ActiveCell.Value, dbDouble)
                        End If
    
                    ' Check to see if the cell below is formatted as a date.
                    Case "m", "d", "y"
                        Set Fd = Td.CreateField(ActiveCell.Value, dbDate)
    
                    ' Check to see if the cell below is formatted as currency.
                    Case "$", "_"
                        Set Fd = Td.CreateField(ActiveCell.Value, dbCurrency)
    
                    ' All purpose trap to set field to text.
                    Case Else
                        Set Fd = Td.CreateField(ActiveCell.Value, dbText)
                    End Select
    
                ' Append the new field to the fields collection.
                Td.Fields.Append Fd
    
                ' Move to the right one column.
                ActiveCell.Offset(0, 1).Range("A1").Select
    
            ' Repeat the procedure with the next field (column).
            Next f
    
            ' Append the new Table to the TableDef collection.
            Db.tabledefs.Append Td
    
            ' Select Cell "A2" to start the setup for moving the data from
            ' the worksheet to the database.
            Range("A2").Select
    
            ' Define the StartCell as the Activecell. All record addition
            ' will be made relative to this cell.
            Set StartCell = Range(ActiveCell.Address)
    
            ' Open a recordset based on the name of the activesheet.
            Set Rs = Db.OpenRecordset(Worksheets(i).Name)
    
            ' Loop through all the data on the sheet and add it to the
            ' recordset in the database.
            For x = 0 To LastCell.Row - 2
                Rs.AddNew
                For c = 0 To LastColumn - 1
                    Rs.Fields(c) = StartCell.Offset(x, c).Value
    
                Next c
                Rs.Update
            Next x
    
         ' Repeat the process for the next worksheet in the workbook.
         Next i
         Application.ScreenUpdating = True
         Exit Sub
    
    ErrorHandler:
         Select Case Err
            Case 3204   ' Database already exists.
               Message = "There has been an error creating the database." & _
                    Chr(10) & _
                    Chr(10) & "Error Number: " & Err & _
                    Chr(10) & "Error Description: " & Error() & _
                    Chr(10) & _
                    Chr(10) & "Would you like to delete the existing" & _
                    "database:" & Chr(10) & _
                    Chr(10) & ActiveWorkbook.Path & "\" & _
                    Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) - 4) & _
                    ".mdb"
                Title = "Error in Database Creation"
                Response = MsgBox(Message, vbYesNo, Title)
                If Response = vbYes Then
                    Kill ActiveWorkbook.Path & "\" & _
                      Left(ActiveWorkbook.Name, Len(ActiveWorkbook.Name) -4) _
                      & ".mdb"
                    Message = ""
                    Title = ""
                    Resume
                Else
                    Message = "In order to run this procedure you need" & _
                        Chr(10) & "to do ONE of the following:" & _
                        Chr(10) & _
                        Chr(10) & "1.  Move the existing database to a " & _
                        "different directory, or " & _
                        Chr(10) & "2.  Rename the existing database, or" & _
                        Chr(10) & "3.  Move the workbook to a different " & _
                        "directory, or" & _
                        Chr(10) & "4.  Rename the workbook"
                    Title = "Perform ONE of the following:"
                    MsgBox Message, , Title
                    Message = ""
                    Title = ""
                    Exit Sub
                End If
    
            ' Check to see if the error was Type Mismatch. If so, set the
            ' file to dbText.
            Case 13 ' Type mismatch.
                If CreateFieldFlag = 1 Then
                    Set Fd = Td.CreateField(ActiveCell.Value, dbText)
                    Fd.AllowZeroLength = True
                    Flag = 1
                    r = LastCell.Row - 1
                    CreateFieldFlag = 0
                    Resume Next
                Else
                    Message = "You have a ""Type Mismatch"" in the code" _
                        & Chr(10) _
                        & Chr(10) & "Error Number: " & Err _
                        & Chr(10) & "Error Description: " & Error() _
                        & Chr(10) _
                        & Chr(10) & "This procedure will close."
    
                    Title = "Type Mismatch"
                    MsgBox Message, , Title
                    Message = ""
                    Title = ""
                End If
    
            ' For any other error, display the error.
            Case Else
               Message = "An error has occured in the procedure." _
                    & Chr(10) _
                    & Chr(10) & "Error Number: " & Err _
                    & Chr(10) & "Error Description: " & Error()
    
                Title = "An error has occured"
                MsgBox Message, , Title
                Message = ""
                Title = ""
         End Select
         End Sub

REFERENSI

Microsoft Access 97

Untuk informasi lebih lanjut tentang cara membuat indeks, klik tab indeks di menu Help pada Microsoft akses, ketik teks berikut:
Indexes, creating
kemudian klik dua kali teks yang dipilih untuk pergi ke "Create an index to find and sort records faster"

Microsoft Access 7.0

Untuk informasi lebih lanjut tentang pengindeksan, klik Answer Wizard pada menu bantuan di Microsoft akses 7.0, ketik indeks dalam kotak pencarian dan klik "Decide if and when to use an index."

Microsoft Access 2.0

Untuk informasi lebih lanjut tentang pengindeksan, klik pencarian pada menu bantuan di Microsoft akses versi 2.0, ketik indeks di kotak pencarian, klik "Index (see also indexes),", dan kemudian klik "Creating an Index" di bawah topik tersebut.

Properti

ID Artikel: 151566 - Kajian Terakhir: 28 Juni 2012 - Revisi: 13.0
Berlaku bagi:
  • Microsoft Excel 97 Standard Edition
  • Microsoft Excel 95 Standard Edition
Kata kunci: 
kbdtacode kbhowto kbprogramming kbmt KB151566 KbMtid
Penerjemahan Mesin
PENTING: Artikel ini diterjemahkan menggunakan perangkat lunak mesin penerjemah Microsoft dan bukan oleh seorang penerjemah. Microsoft menawarkan artikel yang diterjemahkan oleh seorang penerjemah maupun artikel yang diterjemahkan menggunakan mesin sehingga Anda akan memiliki akses ke seluruh artikel baru yang diterbitkan di Pangkalan Pengetahuan (Knowledge Base) dalam bahasa yang Anda gunakan. Namun, artikel yang diterjemahkan menggunakan mesin tidak selalu sempurna. Artikel tersebut mungkin memiliki kesalahan kosa kata, sintaksis, atau tata bahasa, hampir sama seperti orang asing yang berbicara dalam bahasa Anda. Microsoft tidak bertanggung jawab terhadap akurasi, kesalahan atau kerusakan yang disebabkan karena kesalahan penerjemahan konten atau penggunaannya oleh para pelanggan. Microsoft juga sering memperbarui perangkat lunak mesin penerjemah.
Klik disini untuk melihat versi Inggris dari artikel ini: 151566
Sanggahan Konten KB yang Tidak Lagi Diperbarui
Artikel ini berisi tentang produk yang tidak lagi didukung oleh Microsoft. Oleh karena itu, artikel ini disajikan “sebagaimana adanya” dan tidak akan diperbarui.

1 komentar: