Import Database Microsoft Access

Pengalaman penulis dalam mengimplementasikan OpenERP yaitu hanya sebagian sistem / modul saja yang menggunakan OpenERP, sebagian lainnya masih terikat dengan suatu aplikasi khusus, salah satu contohnya aplikasi Weight Bridge. Olehkarna itu, penulis ‘dipaksa’ untuk mengintegrasikan aplikasi tersebut dengan OpenERP.

Awalnya penulis mencoba untuk menggantikan langsung aplikasi tersebut dengan OpenERP akan tetapi untuk saat ini sepertinya hal tersebut tidak memungkinkan. Alternatif lain adalah dengan membaca database dari aplikasi tersebut yang ternyata menggunakan Microsoft Access.

Pada kesempatan kali ini penulis mencoba untuk menjelaskan cara mengimport database Microsoft Access kedalam OpenERP. Untuk menghemat materi, tulisan ini bisa kita gabungkan pada tutorial ini, mengingat samanya code dan tujuan tutorial hanya cara pembacaan filenya saja yang berbeda, jika pada tutorial sebelumnya adalah file csv sedangkan saat ini file Microsoft Access.

Sebelumnya pastikan kita telah menginstall library mdbtools, seperti dibawah ini :

sudo apt-get install mdbtools

Beberapa hal yang akan kita rubah yang pertama adalah field dengan tipe binary, yaitu :


class EksportImport(osv.osv_memory):
    _name = "eksport.import"
    _columns = {
                ...
                'data_file':fields.binary('Database Access', required=True, filters='*.mdb'),
                ...
                }   

Kita tambahkan parameter filters yang bertujuan untuk pemilihan file hanya bertipe mdb (Access) dan parameter required untuk menjadikan field tersebut mandatory.

Untuk code tampilannya (GUI) tidak mengalami perubahan, jadi kita langsung fokuskan pada method button import yang akan kita rubah sebagian codenya seperti dibawah ini :


    def import_access(self, cr, uid, ids, context=None):
        val = self.browse(cr, uid, ids)[0]
                        
        import subprocess

        # Membalikan enkripsi (decoding) menjadi sebuah file access
        DATABASE = base64.decodestring(val.data_file)
        
        input = cStringIO.StringIO(DATABASE)
        input.seek(0)
 
        # Merecreate kembali file database pada server & menyimpan file pathnya pada variabel fpname
        (fileno, fp_name) = tempfile.mkstemp('.mdb', 'openerp_')
        file = open(fp_name, "w")
        file.write(DATABASE)
        file.close()
         
        # Membaca database access dengan library mdbtools berdasarkan file path variabel fpname
        table_names = subprocess.Popen(["mdb-tables", "-1", fp_name], stdout=subprocess.PIPE).communicate()[0]
        
        # Membuat list daftar nama semua tabel pada database access 
        tables = table_names.split('\n')
        
        # Menghapus element list terakhir yang kosong
        del tables[-1] 
        
        # Melakukan looping list nama tabel
        for tablename in tables: 
            
            # Membaca data pertabel
            contents = subprocess.Popen(["mdb-export", fp_name, tablename], stdout=subprocess.PIPE).communicate()[0]
            
            # Membuat list record data per tabel
            data = contents.split('\n')
            
            # Menghapus element list terakhir yang kosong
            del data[-1]
            
            # Melakukan looping list record data
            for x in data:
                
                # Mencetak data per record/baris
                print x

             ........ 

        return {}                
                  

Untuk code selanjutnya mungkin bisa temen-temen lanjutkan sesuai dengan kebutuhan apakah akan membuat record baru ataupun lainnya. Mungkin ini saja yang bisa saya sampaikan, semoga bermanfaat …

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s