Thursday, September 13, 2007

Manusia oh Manusia

Betapa besarnya nilai uang kertas senilai Rp.100.000 apabila dibawa ke masjid untuk disumbangkan; tetapi betapa kecilnya kalau dibawa ke Mall untuk dibelanjakan!
Betapa lamanya melayani Allah selama lima belas menit namun betapa singkatnya kalau kita melihat film.
Betapa sulitnya untuk mencari kata-kata ketika berdoa (spontan) namun betapa mudahnya kalau mengobrol atau bergosip dengan pacar / teman tanpa harus berpikir panjang-panjang.
Betapa asyiknya apabila pertandingan bola diperpanjang waktunya namun kita mengeluh ketika khotbah di masjid lebih lama sedikit daripada biasa.
Betapa sulitnya untuk membaca satu lembar Al-qur'an tapi betapa mudahnya membaca 100 halaman dari novel yang laris.
Betapa getolnya orang untuk duduk di depan dalam konser namun lebih senang berada di shaf paling belakang ketika berada di Masjid.
Betapa Mudahnya membuat 40 tahun dosa demi memuaskan nafsu birahi semata, namun alangkah sulitnya ketika menahan nafsu selama 30 hari ketika berpuasa.
Betapa sulitnya untuk mempelajari arti yang terkandung di dalam al qur'an; namunbetapa mudahnya untuk mengulang-ulangi gosip yang sama kepada orang lain.
Betapa mudahnya kita mempercayai apa yang dikatakan oleh koran namun betapa kita meragukan apa yang dikatakan oleh Kitab Suci Al Quran.
Betapa Takutnya kita apabila dipanggil Boss dan cepat-cepat menghadapnya namun betapa kita berani dan berlama-lama untuk menghadapNya saat kumandang adzan menggema.
Oh manusia... Sampeyan Niku Ora sadar-sadar.. Menawi urip sampeyan ora langgeng.
Marhabban yaa Ramadhan...

Wednesday, May 16, 2007

Connect VFP to MySQL (1)

Sudah bukan masanya lagi membangun aplikasi berbasis data yang besar hanya mengandalkan database native, disamping kemampuannya yang terbatas, kompatibilitasnya juga patut diperhitungkan. Ambil contoh Visual Foxpro yang sampai saat ini masih saya anggap sebagai bahasa pemrograman yang cukup mudah dengan kemampuan yang powerfull, dilengkapi dengan report designer, database native dan cursor adapter (versi 9.0). namun kemampuannya akan lebih powerfull apabila digabungkan dengan database engine seperti mySQL.
Kenapa harus mySQL, disamping FREE tentu saja, juga multi platform. bayangkan anda bisa mengembangkan aplikasi dengan interface berbasis ms windows sementara database tersimpan dalam mySQL yang running pada OS Linux. Tentu saja masih banyak kelebihan yang akan didapat dari penggabungan VFP dengan mySQL, namun untuk memulainya kita mulai tahap demi tahap.

saya asumsikan anda sudah bisa instalasi mySQL ataupun Visual Foxpro, banyak documentasi tentang itu, langsung saja kita melangkah bagaimana koneksi VFP dengan mySQL.
1. pastikan driver mySQL sudah terinstall pada komputer anda, apabila belum googling aja.
2. buat koneksi dengan sqlstringconnect()

contoh kode :

*definisikan variable koneksi untuk memudahkan anda dalam menulis kode.
cKoneksi = "driver=mysql odbc 3.51 driver;server=192.168.42.4;uid=root;pwd=telematika;database=mybisgm"

*keterangan :
*driver mendefinisikan versi driver yang terinstall pada komputer anda.
*server diisi dengan ip address / nama komputer yang didalamnya terinstall mysql
*uid diisi dengan user yang melakukan koneksi
*pwd adalah password untuk user tersebut
*database adalah nama database yang akan anda buka

*buat koneksi
oConnect = SQLSTRINGCONNECT("&cKoneksi")
*pastikan oConnect menghasilkan nilai diatas 0 (positif, artinya koneksi berhasil)

setelah berhasil terkoneksi, anda tinggal menikmati keunggulan mySQL dari visual foxpro anda.
contoh :
SQLEXEC(oConnect,"CALL OPENFILE(?cFileAkun,'','')","CURCU")
* sintak tersebut berarti, menjalankan perintah sql "SQLEXEC" dengan koneksi "oConnect" dan menjalankan stored prosedur dalam mySQL "CALL OPENFILE(?cFileAkun,'','')" untuk kemudian outputnya ditampung dalam cursor "CURCU"
PERHATIKAN :
karena sintak ini dikerjakan dalam server, maka vfp tidak memberikan umpan balik bilamana sintak anda terdapat kesalahan pada mysql server. untuk memastikan bahwa prosedur anda benar, panggil prosedur melalui mysql prompt.
OK sampai sini dulu.. lanjut lagi lain waktu.

Friday, May 04, 2007

Fungsi Terbilang

Fungsi terbilang cukup umum dipakai dalam pemrograman sehari hari, namun tidak ada salahnya saya tuliskan disini sebagai salah satu referensi untuk temen-temen programmer.
Saya tulis code ini dengan Ms. VFP so, kalo ada yang kebetulan pake aplikasi program lainnya, silahkan dikonversi sendiri. Untuk Fungsi terbilang Inggris mungkin ada yang mau mengkoreksi, masalahnya belum sempat koreksi.

cara pakainya cukup simpel, tinggal panggil fungsi dan masukkan dalam sebuah variable.

Contoh :
cBilang = Terbilang(20003)
cBilang = SAYENGLISH(20003)

hasilnya akan tersimpan dalam variable cBilang, Silahkan Mencoba.




======
FUNCTION TERBILANG
PARAMETERS Nilai as Double
PUBLIC sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun
Sat = STR(Nilai,18,2)
Des = IIF(RIGHT(sat,1) = '0',VAL(SUBSTR(Sat,17,1)),VAL(RIGHT(Sat,2)))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))

Ribuan = IIF(Ribu = 0," ",IIF(Ribu = 1,"Seribu", BilangDetail(Ribu)+" Ribu"))
Jutaan = IIF(Juta = 0," ",(BilangDetail(Juta)+" Juta"))
Miliaran = IIF(Miliar = 0," ",(BilangDetail(Miliar)+" Miliard"))

DO CASE
CASE Nilai < txt =" BilangDetail(Ratus)" txt =" Ribuan+" txt =" BilangDetail(Juta)+" txt =" BilangDetail(Miliar)+" txt =" BilangDetail(Trilyun)+" txt="txt+">= 10
txt=txt+" Koma "+BilangDetail(Des)
ENDCASE
RETURN(TXT+" Rupiah")

FUNCTION BilangDetail
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))

bil = "Satu Dua Tiga Empat Lima Enam Tujuh Delapan Sembilan"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = " Sepuluh "
CASE s = 1
tp = " Sebelas "
OTHERWISE
tp= TRIM(SUBSTR(bil,s*8-7,8))+" Belas "
ENDCASE
OTHERWISE
tp = TRIM(SUBSTR(bil,p*8-7,8))+" Puluh "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
CASE r = 1
tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = TRIM(SUBSTR(bil, r*8-7,8))+" Ratus "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))


FUNCTION SAYENGLISH
PARAMETERS Nilai as Double
PUBLIC koma,sat,ratus,ribu,juta,miliar,ribuan,ratusan,txt,trilyun

Sat = STR(Nilai,18,2)
Des = VAL(RIGHT(Sat,2))
Ratus = VAL(SUBSTR(Sat,13,3))
Ribu = VAL(SUBSTR(Sat,10,3))
Juta = VAL(SUBSTR(Sat,7,3))
Miliar = VAL(SUBSTR(Sat,4,3))
Trilyun = VAL(LEFT(Sat,3))

Ribuan = IIF(Ribu = 0," ",(SAYENGLISHDETAIL(Ribu)+" Thousand"))
Jutaan = IIF(Juta = 0," ",(SAYENGLISHDETAIL(Juta)+" Million"))
Miliaran = IIF(Miliar = 0," ",(SAYENGLISHDETAIL(Miliar)+" Billion"))

DO CASE
CASE Nilai < txt =" SAYENGLISHDETAIL(Ratus)" txt =" Ribuan+" txt =" SAYENGLISHDETAIL(Juta)+" txt =" SAYENGLISHDETAIL(Miliar)+" txt =" SAYENGLISHDETAIL(Trilyun)+">0
txt=txt+" Point "+SAYENGLISHDETAIL(Des)
ENDIF
RETURN(TXT+" Dollars")

FUNCTION SAYENGLISHDETAIL
PARAMETERS Detil
st = STR(Detil,3)
s = VAL(RIGHT(st,1))
p = VAL(SUBSTR(st,2,1))
r = VAL(LEFT(st,1))

bil = "One Two Three Four Five Six Seven Eight Nine"
bil2 = "One Two Third Four Fif Six Seven Eight Nine"
IF s = 0
ts = " "
ELSE
ts = ALLTRIM(SUBSTR(bil,s*8-7,8))+" "
ENDIF
DO CASE
CASE p = 0
tp = ts
CASE p = 1
DO CASE
CASE s = 0
tp = "Ten "
CASE s = 1
tp = "Eleven "
CASE s = 2
tp = "Twelve "
OTHERWISE
tp= ALLTRIM(SUBSTR(bil2,s*8-7,8))+"teen "
ENDCASE
OTHERWISE
tp = allTRIM(SUBSTR(bil2,p*8-7,8))+"ty "+ts
ENDCASE
DO CASE
CASE r = 0
tr = tp
*!* CASE r = 1
*!* tr = "Seratus "+ALLTRIM(tp)
OTHERWISE
tr = allTRIM(SUBSTR(bil, r*8-7,8))+" Hundred "+ALLTRIM(tp)
ENDCASE
RETURN(TRIM(tr))


=====
Semoga bermanfaat..

Thursday, January 11, 2007

How to Capture PABX Data II

Setelah sekian lama mencoba, ternyata cara pertama tidak ketemu jawabannya.
Aku coba buat cara lain yang penting bisa mengakomodasi kepentingan capture data. inti logikanya seperti ini.
Saya buat cursor dengan field tampung dengan tipe memo. pada saat oncomm terlaksana, tambahkan yang ada di buffer kedalam field memo pada kursor tampung tadi. kemudian dengan sintaks MLINE() lakukan deteksi jumlah line dalam field memo tersebut, untuk ini saya tetapkan angka 5 line untuk melakukan deteksi jumlah baris yang telah tercipta untuk membangkitkan procedure lainnya. Selama proses deteksi ini disable dulu OnComm sementara sampai dengan proses eksekusi prosedur terselesaikan. sintaksnya seperti ini


IF This.commEvent = 2
REPLACE logbilling.logbill WITH logbilling.logbill+Thisform.olecontrol1.Input
IF MEMLINE(logbilling.LogBill)>=5
nJmlLine = MEMLINES(logbilling.logbill)
i = 1
Thisform.olecontrol1.Break = .T.
DO WHILE i < 5
cChar = MLINE(logbilling.LogBill,i)
IF ASC(LEFT(cChar,1)) >= 48
Thisform.proses(cChar)
ENDIF
i = i + 1
ENDDO
cVarLine = ""
IF i < nJmlLine
DO WHILE i <= nJmlLine
cVarLine = cVarLine + MLINE(logbilling.LogBill,i)
i = i + 1
ENDDO
ELSE
REPLACE LogBilling.LogBill WITH cVarLine
ENDIF
Thisform.olecontrol1.Break = .F.
ENDIF
Thisform.Refresh
ENDIF


letakkan potongan program diatas dalam oncomm event pada olecontrol (comm control).
prosedure proses digunakan untuk mengolah data hasil transfer dari PABX. dengan sintak substr() lakukan pemilahan data yang berupa satu baris menjadi data2 yang sesuai semisal, tanggal, durasi, phone line dsb.
Sampai disini seharusnya anda sudah bisa membuat billing system berbasis PABX. bila ada yang kurang jelas silahkan kirim email ke ediwe2000@yahoo.com. atau berikan comment disini.