Monday, February 15, 2010

Save Teks File To Data Base


Pekan kemarin.. di sela sela kegiatan kerja rutin, ana iseng iseng bikin program untuk upload data ke database. Awalnya sih kepikiran tentang sebuah kasus.. Misalkan gini ni folks.. anda di minta untuk merancang sebuah program atau interface untuk melakukan pengecekan data. Nah untuk melakukan pengecekan atau komparasi data.. uda jadi kodratnya harus ada data yang di bandingkan.. dalam hal ini data input dan data yang tersimpan di database. (Data yang di maksud disini awalnya tersimpan dalam bentuk excell, tapi kayanya menurut ane lebih gampang di ubah ke dalam bentuk data text aja.. jadi pas ana trial ini data excell ana rubah ke dalam bentuk teks dengan tab delimiter)

Trus masalahnya apa nih..? he..3x tenang folks.. masalahnya ada pada input data ke database. Bayangkan folks.. (uda uda cukup.. jangan kelamaan bayanginnya.. :p) kalau seandainya data yang di input ke database itu hanya dalam puluhan baris mungkin kita masih sanggup. Tapi ketika data yang di input itu sudah mencapai ribuan baris dengan beberapa field yang berbeda.. bisa kebayang kan folks betapa repotnya kita.

So.. i thing, i'll try to found some solution.. gimana kalau interface yang kita buat nantinya, bisa mengupload data secara otomatis ke database. Wow.. it will be a huge step to reduce time process.. he..3x and then I start to think how implemented it into a real one.. humm gooooooooggling pun di mulai ^^v

At first i found one good query in SQL it call 'Bulk Insert'. Syntax umumnya seperti ini :
BULK INSERT Nama_Tabel
FROM 'pathfilenya' (contoh : f:\orders\lineitem.tbl)
   WITH 
      (
         FIELDTERMINATOR =' |', (pemisah field)
         ROWTERMINATOR =' |\n'  (Pemisah row)
      )
Waktu ana nyobain syntax diatas di SQL Server.. trus filenya ada di PC ana.. file textnya secara ajaib langsung masuk tuh ke database SQL.. uda happy banget ni folks.. (abisnya praktis banget ha..3x) tapi ternyata oo ternyata.. pas ana nyobain upload file dari PC Client ke Server SQL ( data file ana tempatin di PC yang berbeda dengan PC Server SQL nya), syntax di atas gagal folks.. sampai sekarang ana belum nemuin solusinya untuk syntax 'Bulk Insert' ini. Errornya nyebutin tentang masalah "Acces Denied".. mungkin maksudnya Server SQL ga bisa ngakses file di PC lain karena ga ada Acces.. sempat seharian googling terus sampe ga inget waktu.. eh tau tau uda malam.. ga nemu juga T_T.. humm mungkin kalau folks sekalian nemu solusinya bisa di share ke ana yah ^^;; (i'm still curious with this syntax)

Nah jadilah esoknya ana mikir solusi yang lain.. Solusi lain ini gampang gampang susah.. he..3x. Intinya folks, file yang berisi data tadi kita open lewat interface yang kita buat.. (jadi ga masalah file nya ada di mana ^^). Trus masukin file tersebut dalam type data 'File' sebagai bufferingnya. Nah selanjutnya folks.. baca baris data satu persatu sampai habis.. selama membaca baris data tersebut.. interface kita rancang untuk membaca karakter dan mendeteksi jumlah spasi yang terdapat dalam satu baris. 

Jika selama membaca karakter, interface kita menemukan spasi atau karakter pemisah lainnya.. maka karakter sebelumya di gabung dan dimasukkan ke dalam variabel kata.. kalo uda masuk ke variabel tinggal gabungin syntax di delphi dengan query SQL..udah gitu aja logikanya folks.. he..3x. Setelah ampir satu jam utak utik di Delphi akhirnya Alhamdulillah bisa juga ngupload data text ke dalam database.. 
oia folks.. syarat mutlak yang harus di penuhi.. field pada file text harus sama dengan struktur field di table yang kita gunakan untuk menyimpan data.

Berikut source code yang ana buat di Delphi, kalo folks terbiasa dengan bahasa pemrograman yang lain, ana rasa logikanya tetap bisa di pakai.. yup.. kalo ada ide yang lain lagi.. ana harap bisa di share folks.. nah semoga bermanfaat and happy programming.. -_-/


  

10 comments:

  1. ga bisa upload file dari pc client ke server???..
    kalo liat syntaxnya...itu dikarenakan filenya antum taruh di pc client bukan duserver, jadi ga bisa upload.

    FROM 'pathfilenya' (contoh : f:\orders\lineitem.tbl)

    -----> ini menunjukkan penempatan file dilokal, jadi kalo dijalanin diserver dgn syntax yg sama, saat diupload si server akan mencari di folder f: milik dia bukan ke client...
    kalo mau nyambung ke client sih bisa kalo pake vtp: \\
    tapi mending, kalo lokal, filenya dipindah aja ke server, karena dijalankan diserver.

    gitu..
    hehehehe..moga bisa dimengerti dan ga menyesatkan..^__^

    ReplyDelete
  2. @aisyah muna : wah ana lupa nyeritain disini, kalo segala cara uda ana lakuin..he..3x mulai dari pakai penamaan UNC "\\ip address\path\namafile. ga berhasil.. trus ana share folder tempat simpan datanya dengan full permission.. tetep ga bisa juga.. trus humm ana bikin sharingan tadi jadi drive lokal di pc server dengan proses mapping tetep ga bisa juga.. he..3x T_T
    btw antum uda nyobain di SQL blum syntaxnya ukht..? kalo emang bisa kirim screen shot nya dunks.. (ngarep mode : ON) ^_^

    ReplyDelete
  3. dhelpi...!!


    wwwaaa tidak, jauh2 dah, ingat masa lalu

    ReplyDelete
  4. ato di buat prosedure Upload flatfile yang akan menyimpan file text ke f:\orders, terus tinggal eksekusi query Bulk Insertnya yang mengambil data dari path folder itu.cocok utk data yang besar.
    cuman teori aja,belum tak coba hahahaha. soale aq gak ngerti delphi.

    ReplyDelete
  5. @Secangkir teh.. : loh kenapa om he..3x masa lalu suran yah he..3x -_-*

    @Kur.. : humm logikanya sih masuk kur.. he..3x tapi ane tetep penasaran ama metode Bulk Insert yang langsung pake query :p (di googling juga rada aneh.. ada yang bisa ada yang ga.. pake syntax ini -_-;; )

    ReplyDelete
  6. jgn di share...coba di copy ke server
    karena dishare tdk bisa

    ReplyDelete
  7. wah sudah gak pernah pegang kek gitu
    sekarang pusing

    ReplyDelete
  8. @aisyah muna : humm jazakallah sarannya ukht ^^

    @mas doyok : he..3x, just share mas.. kali2 aja nemu solusi gituh..^^v btw blognya bagus mas.. mau dunks tips2 nya.. ana mau bikin theme sendiri tapi ampe skarang ga bisa2 edit CSS di blogspot -_-;;

    ReplyDelete