Learn the Rules, Break The Rules, and Create the New Ones...

Hi... My name is Rizky Prihanto. You can call me RQ, or Rizky either. I am currently living on Bandung, Indonesia. Had a lot of works and research about Enterprise Information Systems (majoring on education and e-governments). I have bunch of interests (some friends call it 'freakz') about MySQL Opensource Database and now I am one of the administrator of MySQL Indonesia User Group - the opensource community initialized by Sun Microsystems Indonesia.

My Company PT Cinox Media Insani, Bandung, Indonesia. I work here since 2008 and I take responsibility as Chief of Software Architect. My job is about planning, imaginating, fantasy-ing, concepting, and build the infrastructure of the new information systems (or app engines) which going to be implemented.

This blog This is my blog that represent my current opinion, research and experiences about anything in Software Engineering. Written since 2007 (actually) and has been vaccum for a lot of while. And now I wanna ressurrect this blog (optimistically) from the long-long-hibernation with something fresh and new ideas -- still about MySQL, software engineering, development, and may be something managerial here.

About the tagline I've learned the statement above from some paper written by Kent Beck about Extreme Programming (XP) methodology -- some sort of practical software development methods which have no boundaries. That's very inspiring me a lot. I have written some article on this blog that tell my interpretation about that statement here.

My Another Blogs I have classifying my blogs into some sort of genre. The blog that you read here right now is my primary blog that tell you (majoring) about IT stuff. But if you wanna look another side of me, you can visit here, here, here,or here. Hope it'll be interesting for some of you.

Credits I would thanks to Blogger for this great blog platform. Skinpress who designed this Wordpress template (which is bloggerized by Free Blogger Templates). My appreciate is also going to you who give your generously time for visiting my blog.

Maksain Settingan Waktu Client

Yak, satu lagi seri "PEMAKSAAN SETTING" dari abang Qvezst Al-Cakepnye Naujubille :)) ~ narcis dikit gpp khan ~, setelah artikel sebelumnya yg berjudul Maksain Regional Setting dari VB . Kali ini kita akan membedah mengenai settingan waktu.

Sek, kyanya lebih seru klo aku kasih prolognya doeloe biar asyeek...

Begini ceritanya...

Al-kisah, salah seorang karyawan di sebuah perusahaan (anggaplah sekolah lah, biar enak perumpamaannya), menemui masalah kecil di kompienya. Salah satu game favoritnya yg dia donlot dari GameHouse trial expired! Dia udah 30 hari yg lalu nginstall tu game n skrg dah habis masa uji-cobanya. Berhubung dia ngga mau makae (or ngga nemu) crack-crackan-nya, n berhubung dia masih membutuhkan tu program, akhirnya dia coba2 mundurin tanggal di control panel nya. Dia mundurin ke Juli 2007. Solusi didapat. Tu game akhirnya bisa jalan (lagi)... Asyeeek...

Tp dia baru munculin satu masalah baru. Kebetulan dia tu karyawan TU bagian pembayaran BP3. Nah, pas lagi jam istirahat sekolah, n ada beberapa siswa yg datang ke dia mo mbayar BP3, dia lupa mbalikin lg tanggal sistemnya. Trus dia jalanin deh aplikasi sisfo pembayaran BP3 siswa yg dibuat ama salah satu software house tidak ternama di kotanya. (hehehe, suer bukan software-house ku.. ini cuman cerita rekayasa aja supaya memberikan kesan bombastis. hihihi. kesamaan nama, tempat, dan peristiwa, sungguh bukan karena disengaja... suer dech..)

Back to the story...

Apa yg terjadi?
Sebenarnya, nothing worse happen. Software BP3 yg dia jalankan, sukses dia operasikan dgn baek-baek saja koq... Udah kecatet transaksinya. "eRQee, mbayar 25ribu, sumbangan 5 ribu. Paul, mbayar 25ribu, ngga pake sumbangan. Annur, mbayar 50ribu, tunggakan 2 bulan." ~ semua yg dia catet tersimpen apa adanya koq.

Sebentar, mari kita lihat log transaksi pembayaran BP3 bulan Oktober 2007... Lho koq kosong? Semestinya ada laporan pembayaran dari eRQee, Paul, n Annur... selidik punya selidik, catatan transaksi yg barusan dia masukin rupanya nyangkut ke transaksi bulan Juli 2007. Wahwahwah... repot nieh. Utk ngoreksi transaksi, dia ngga dikasih privileges. Penyesuaian transaksi hanya bs dilakuin ama Waka Keuangan n tangan kanannya. Apesnya, dia bukan waka keuangan n bukan pula tangan kanannya... Pegimane iki?? Gawat. Klo ngelapor, bisa2 dia dimarahin karena memanfaatkan fasilitas kantor utk nge-game. Hiks...

~~ kasian ya? ~~

dan, moral value dr cerita di atas itu adalah :
  • jangan maksain program klo dah expired masa trialnya. klo dah habis, en emang tu program bagus, belilah... (usaha dikit keq... minim, browse2 d Craagle keq utk 'beli' versi communitynya. xixixixi...)
  • selalu teliti klo mo ngoperasikan program yg sensitif, apalagi klo menyangkut ttg uang.
  • semestinya programmer yg bikin tu progam jg memperhatikan masalah penanggalan. karena dari sudut pandang sistem informasi, penanggalan itu sama sensitifnya dgn uang pada poin 2 di atas...

Nah, artikel d sini akan mencoba membahas mengenai upaya preventif supaya hal-hal begituan tidak terjadi di kemudian hari..

Ada beberapa solusi nih supaya pencatatan tanggal transaksi di client bs sinkron dgn tanggal yg berlaku di server...

PERTAMA, pendekatan query. Sejauh ini, ini merupakan cara yang paling-paling ampuh. Misal pake MySQL, gunakan UDF Now() pada query INSERT. Ato GetDate() ~> kalo di SQL Server. Jadi, semisal user menekan tombol "Save" pada form transaksi, n di tombol save itu didefinisikan query INSERT, e.g :
"INSERT INTO TblTrans(Tgl,NIS,JmlBayar,Sumbangan) VALUES(Now(),'11298',25000,5000)";


jadi, tanggal berapapun yg di set di client, yg tersimpan tetep tanggal sekarang... (tanggal kapan dia nyimpen transaksi tersebut maksutku).

Tapi kadang pendekatan itu thox ngga cukup. Di form laporan transaksi ada combobox bulan/tahun yg akan meng-automatic-view transaksi yg terjadi pada bulan ini. Nah, biasanya, default valuesnya adalah bulan/tahun sekarang. Programmer biasanya nyettingnya ngga make cara ngirim2 query segala.. cukup pake function Now() dari program aplikasi. Artinya, ngambil settingan tanggal dari localtime dari masing2 kompie. Bukan server... NAH! Masalahnya td ada kasus pemunduran tanggal... gimana solusinya? Kirim query lg utk dapetin bulan sekarang? Boleh... itu pendekatan kedua.

Pendekatan KETIGA, ~ ini sebenarnya inti dari artikel ini (nggak to the point banged sih) ~ maksain settingan tanggal pada kompie client supaya sinkron dgn tanggal di server. Jadi, berapapun tanggal yg disetting di localtime, pas aplikasi dijalanin, aplikasi langsung nyesuaikan ostosmastis tanggal di client supaya SAMA PLEK dgn tanggal di server, se jam-menit-detiknya...

Caranya ?

Simak modul berikut :

Private Declare Function SetSystemTime Lib "kernel32" _
(lpSystemTime As SYSTEMTIME) As Long

Private Type SYSTEMTIME
wYear As Integer
wMonth As Integer
wDayOfWeek As Integer
wDay As Integer
wHour As Integer
wMinute As Integer
wSecond As Integer
wMilliseconds As Integer
End Type

Public Sub SyncTime2ServerTime(ByRef db As ADODB.Connection)
Dim sQuery As String

Screen.MousePointer = vbHourglass
If DATABASE_ENGINE = "MYSQL" Then
sQuery = "SELECT YEAR(NOW()), " & _
"MONTH(NOW()), " & _
"DAY(NOW()), " & _
"HOUR(NOW()), " & _
"MINUTE(NOW()), " & _
"SECOND(NOW())"
ElseIf DATABASE_ENGINE = "SQLSERVER" Then
sQuery = "SELECT Datepart(yyyy, GETDATE()), " & _
" DatePart(mm, GETDATE()), " & _
" DatePart(dd, GETDATE()), " & _
" DatePart(hh, GETDATE()), " & _
" DatePart(mi, GETDATE()), " & _
" DatePart(ss, GETDATE()) "
Else 'kalo access n sqlite...
'nothing will be sync
Screen.MousePointer = vbDefault
Exit Sub
End If

Dim sNewTime As SYSTEMTIME
Dim lLng As Long
Dim rs As ADODB.Recordset
Set rs = db.Execute(sQuery)
If rs.RecordCount > 0 Then
sNewTime.wYear = rs(0)
sNewTime.wMonth = rs(1)
sNewTime.wDay = rs(2)
sNewTime.wHour = CStr(CInt(rs(3)) - 7)
sNewTime.wMinute = rs(4)
sNewTime.wSecond = rs(5)
lLng = SetSystemTime(sNewTime)
End If
rs.close
Set rs = nothing
Screen.MousePointer = vbDefault
End Sub


Trus implementasinya, bs dilakukan pas aplikasi baru start, panggil di sub Main() -- ato pas salah satu form baru dibuka, di form_load() misalnya...

Private Sub Form_Load()
'blablabla...
SyncTime2ServerTime(db)
'dengan db adalah object ADODB.Connection yg udah
'open connection dengan baek...
End Sub

Efeknya, semisal di server skrg tgl 24 Oktober 2007 pukul 02:43:29, di client jg akan berubah settingan tanggalnya jadi 24 Oktober 2007 pukul 02:43:29

Gimana? Implementatif bukan? (maaf klo nggak, hehehe...)

Selamat mencoba.

3 comments:

Anonim mengatakan...

mantab gan......
thank's atas inpo nya...
hix hix hix hix
nise inpo gan

Anonim mengatakan...

wah tipe mismatch gan...

Anonim mengatakan...

sungguh?

type mismatch di mana?

ntu code udah lolos seleksi indonesian idol 7 koq... mgkn juragan aja yg kurang co-pas nya ^_^ hehehe..

Posting Komentar