Vba download/tarik database lewat access

  1. tahun lalu

    Hai gan, mau nanya
    Aku mau download file database yang sudah aku miliki itu gimana nya menggunakan vba

    Tapi ada sedikit di modifikasi
    Dia bisa di filter sesuai vendor name
    Nanti kalo aku masukin di vendor name
    Kecap abc maka dia muncul data yang kecap abc
    Dan saat aku tekan tombol download database
    Dia hanya ambil data untuk kecap abc.

    Apa bisa?
    Terimakasih

  2. Caton

    4 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Pak @Petter Jo, menurut saya, secara teori kemungkinan bisa dilakukan. Untuk realisasinya, setidaknya harus diketahui dahulu bentuk database apa (apakah file Excel, MySQL, Access DB, CSV dan sebagainya). Mungkin untuk mengambil data dari database bisa menggunakan Data Connection pada Excel, atau bisa juga diambil melalui kode programnya langsung. Kemudian apakah data akan diambil dari satu file saja, atau beda-beda?

    Secara teori, garis besar alurnya mungkin bisa dimulai dengan memuat (loading) databasenya ke sheet khusus, kemudian data yang sudah dimuat tadi kita filter. Baru kemudian data hasil dari filter tadi diambil dan ditampilkan pada sheet yang kita tentukan, atau langsung diolah sesuai kebutuhan (misalnya dijumlahkan, dihitung jumlah itemnya dan sebagainya...). Namun, sekali lagi ini menurut saya... :D

  3. Berikut tampilamnya
    No 1

    Lalu pakai database nya ms access
    No 2

  4. Caton

    4 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Klo begitu, datanya diambil melalui query saja pak @Petter Jo. Misalnya, kode VBA berikut disusun pada UserForm:

    Option Explicit
    
    Private Sub cmdPopulate_Click()
        Dim dbConn As Object, dbRS As Object
        Dim sQuery As String, sConnString As String
        Dim sPathFile As String, sSuppName As String
        
        If Me.cboSuppliers.ListIndex > -1 Then
            sSuppName = Me.cboSuppliers.List(Me.cboSuppliers.ListIndex)
            
            sPathFile = ThisWorkbook.Path & "\Northwind 2007.accdb"
            
            Set dbConn = CreateObject("ADODB.Connection")
            Set dbRS = CreateObject("ADODB.RecordSet")
            sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & sPathFile
            sQuery = vbNullString
            sQuery = sQuery & "SELECT Products.ProductName "
            sQuery = sQuery & "FROM Suppliers INNER JOIN Products ON Suppliers.SupplierID = Products.SupplierID "
            sQuery = sQuery & "WHERE Suppliers.CompanyName=" & """" & sSuppName & """"
        
            dbConn.Open sConnString
            dbRS.Open sQuery, dbConn
            
            Sheet2.Range("A:A").ClearContents
            Sheet2.Range("A1").CopyFromRecordset dbRS
            dbRS.MoveFirst
            With Me.lstProduct
                .Clear
                Do
                    .AddItem dbRS!ProductName
                    dbRS.MoveNext
                Loop Until dbRS.EOF
            End With
            
            dbRS.Close
            dbConn.Close
            
            Set dbRS = Nothing
            Set dbConn = Nothing
        End If
    End Sub
    
    Private Sub UserForm_Initialize()
        Dim dbConn As Object, dbRS As Object
        Dim sQuery As String, sConnString As String
        Dim sTemp As String
        
        sTemp = ThisWorkbook.Path & "\Northwind 2007.accdb"
        
        Set dbConn = CreateObject("ADODB.Connection")
        Set dbRS = CreateObject("ADODB.RecordSet")
        sConnString = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & sTemp
        sQuery = "SELECT Suppliers.CompanyName FROM Suppliers"
        dbConn.Open sConnString
        dbRS.Open sQuery, dbConn
        
        With Me.cboSuppliers
            .Clear
            Do
                .AddItem dbRS!CompanyName
                dbRS.MoveNext
            Loop Until dbRS.EOF
        End With
        
        dbRS.Close
        dbConn.Close
        
        Set dbRS = Nothing
        Set dbConn = Nothing
    End Sub

    Pada kode di atas, variabel untuk memfilter datanya adalah sSuppName. Saat dijalankan tampilannya:

    Shoot2.png

    Mungkin konsep di atas bisa disesuaikan dan diterapkan sesuai kebutuhan pak @Petter Jo.

  5. Thankyou
    Akan ku coba gan metode nya.

  6. Halo @Caton kalo kita import apakah bisa?
    Untuk memunculkan filter data sudah bisa.
    Skrg mau mencoba saat di filter nanti ada tombol download lalu di dalam downloadan itu nanti kayak dibuat seperti database baru yang isinya hasil filteran data tersebut.

  7. Caton

    7 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Halo juga @Petter Jo ... :)

    Maksudnya, hasil filter tadi mau dibalikin lagi ke Access sebagai sebuah tabel? Atau mau dijadikan Excel Table Object? Kalau mau dijadikan Access Table, hehe... saya belum pernah nyoba (mungkin nanti saya coba... ^_^;). Kalau Excel Table Object, logikanya saya paham. Please... jangan kedua-duanya dong... hehehe... :D

  8. Iya hasil filternya mau dibuat jadi file baru yang isinya hanya hasil filteran tersebut.
    Ga kedua-duanya kok hahahahaha

  9. Caton

    7 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Hehe... Jadi intinya, simpan hasil filter sebagai file Access baru ya... Wah. Klo ini saya musti riset dulu... ^_^; haha... abis saya juga gak ngerti benar dengan Access. Ntar saya coba deh pak @Petter Jo ...

  10. Iya bener hahaha sulit sih --'

  11. Hai @Caton untuk sementara sepertinya saya membutuhkan cara yang mengimport ke dalam bentuk excel terlebih dahulu hahahaha mana tau bisa dpt advice dari code tersebut.

  12. Caton

    8 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Hehe... Mr. @Petter Jo ... maaf, saya belum sempat utak atik VBA Code yang saya maksud sebelumnya, namun tetap dalam daftar kerja ;) Btw, untuk kode yang dimaksud, pada dasarnya sudah terlihat pada kode VBA yang saya uraikan di atas:

    ...
    Sheet2.Range("A:A").ClearContents
    Sheet2.Range("A1").CopyFromRecordset dbRS
    ...

    Pada baris kode tersebut, dbRS merupakan hasil query yang kemudian diekspor ke sel A1 menggunakan fungsi CopyFromRecordset. Hanya saja, pada kode tersebut, tidak menampilkan header dari masing-masing query field. Hanya berupa datanya saja. Untuk menampilkan nama header dari query field-nya, harus ada tambahan kode. Misalnya:

    ...
    Sheet2.Cells(Cells(1, 1), Cells(dbRS.RecordCount, dbRS.Fields.Count)).ClearContents
    For i = 0 To dbRS.Fields.Count - 1
         Sheet2.Cells(1, i + 1) = dbRS.Fields(i).Name
    Next i
    Sheet2.Range("A2").CopyFromRecordset dbRS
    ...

    Jadi, untuk konsep dasarnya kurang lebih seperti itu. Belum saya coba sih. Jika data querynya hendak diekspor ke sebuah Excel Tabel, mungkin beberapa baris kode VBA di diskusi ini bisa diadaptasikan.

    Pertanyaan saya, mengapa tidak langsung diproses dari Access saja pak? Bukankah di Access juga ada VBA, Sehingga, maaf, jadinya tidak dua kali kerja. Awalnya saya kira pak @Petter Jo hendak membuat Query dari Access yang hasilnya akan ditampilkan di Excel saja.

  13. Owh begitu, akan saya coba
    Ada beberapa hal kenapa saya pakai excel karena data inputan berupa userform itu langsung di cantumkan ke berupa form dan itu sudah clear hahaha lalu data nya kesimpan.
    Tujuan ini adalah untuk mentrack saja data yang sudah kita masukkan sesuai dengan search yang kita input.

    Jadi setelah saya ketemu hasil filteran tersebut saya akan save as data tsbt berupa ekstensi excel yang hanya isi dari filter-annya saja

  14. Caton

    8 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    Sip deh pak @Petter Jo ... Menurut saya, untuk menyimpan data dari Excel ke Access bisa saja dilakukan. Hanya saja ketika kondisinya harus menyimpan ke file database baru (MDB, ACCDB) dari Excel, itu yang agak repot proses coding-nya, setidaknya bagi saya sendiri... ^_^;

    @Petter Jo Jadi setelah saya ketemu hasil filteran tersebut saya akan save as data tsbt berupa ekstensi excel yang hanya isi dari filter-annya saja

    Klo gitu, nantinya sebelum diekspor, buat saja Workbook baru pak. Kemudian proses ekspornya data langsung ke Workbook yang baru. Misalnya:

    ...
    Dim xlWorkbook As Workbook
    Dim xlWorksheet As Worksheet
    Dim i As Long
    
    ...
    Set xlWorkbook = Workbooks.Add
    Set xlWorksheet = xlWorkbook.Worksheets(1)
            
    xlWorksheet.Activate
    For i = 0 To dbRS.Fields.Count - 1
        xlWorksheet.Cells(1, i + 1) = dbRS.Fields(i).Name
    Next
    xlWorksheet.Range("A2").CopyFromRecordset dbRS
    ...

    Mungkin bisa diadaptasikan demikian.

  15. Untuk yang menyimpan dari inputan ke database sudah masuk :)

    Tinggal mengesport ke excel lagi hehehe yang ink saja tinggal

  16. Caton

    8 Agu 2017 Terverifikasi Indonesia + 12.376 Poin

    @Petter Jo Untuk yang menyimpan dari inputan ke database sudah masuk :)

    Wah... boleh dong dishare pak @Petter Jo codenya... :)

  17. Pertama kita harus set reference data object

    Lalu codenya
    Dim conn as new connection
    Dim rd as new record set

    Strcon = "provider=microsoft.ACE.OLEDB.12.0;" & _
    "Data Source=LOCATION DB.accdb;" & _
    "User Id=admin;Password="

    Conn.open (strCon)

    Qry = "Insert Into Namatable " & _
    "'" & txtInvoiceNo "', "','" & cmbVendor & "');"

    Conn.execute (qry)

    Conn.Close
    Set Conn = Nothing

  18. Hati-hati dengan,

    1. Kesamaan urutan , nama, type dan format field table databasenya.
    2. Crash no record table saat input bersamaan jika dioperasikan secara

    network atau multiuser. (Acces bukan database server)

    Smoga bermanfaat

  19. Sesama aplikasi MS Office, di copy paste aja secara operasional (kecuali file excel / access didesain menjadi sebuah aplikasi) ... maaf ni pendapat aq hihihi.

  20. @parjoboy halo,
    Iya nih aku pakai aplikasi userform jadi maunya narik secara automate

  21. Newer ›
 

atau Mendaftar untuk ikut berdiskusi!