h1

Programming RDLC : 1

15 Maret 2016

Dalam beberapa post saya akan share beberapa tips dan trik untuk programming (baca : konfigurasi ) report RDLC. Kenapa RDLC ?

RDLC (Report Definition Language Client-side) adalah salah satu opsi built in report di .NET (Windows Form dan ASP.NET) yang dapat langsung dipergunakan untuk kebutuhan pembuatan laporan di aplikasi yang kita buat dengan menggunakan .NET (menggunakan editor Visual Studio). Dari beberapa reporting tool yang tersedia di lingkungan .NET, RDLC merupakan opsi termudah untuk keperluan reporting sederhana. Untuk detail setting, programming backend dan setting database dapat anda lihat di artikel-artikel yang di posting di internet. Banyak artikel yang akan membahas pros dan cons reporting tools dan langkah-langkah setupnya dari awal. Termasuk pendekatan push/pull untuk reporting.

Saya hanya share beberapa pengalaman yang saya pikir sifatnya reusable.

Bagaimana caranya agar Report RDLC tidak menampilkan “extra blank page” di akhir halaman atau akhir group ?

By default (entah mengapa), laporan yang di generate menggunakan template report RDLC akan menampilkan halaman kosong antar group apabila laporan anda lebih dari 1 halaman. Untuk membuang “extra blank page” tersebut dapat dilakukan dengan melakukan konfigurasi di bawah ini :

Baca entri selengkapnya »

h1

TIPS : SQL SERVER 2005 DATETIME (best practise series)

20 April 2011

Para pengguna RDBMS SQL SERVER 2005 pasti telah mengenai tipe data datetime yang akan menyimpan tanggal beserta dengan jam. Pada umumnya formatnya berbentuk yyyy-MM-dd HH:mm:ss.

Pada kasus tertentu ketika programmer diharuskan membuat aplikasi yang menyimpan tanggal update data ke tabel, ada beberapa hal yang harus diperhatikan dalam menggunakan tipe data datetime ini. Misal pada kasus transaksi pembelian barang pada suatu waktu.  Program harus menyimpan tanggal terjadinya transaksi atau tanggal data tersimpan dalam tabel. Ada beberapa saran yang dapat saya share.

Saran :

Jangan menggunakan langsung function bawaan SQL SERVER GETDATE() untuk mengupdate tabel.

Ada beberapa cara yang lebih “baik” (*menurut saya) untuk menyimpan terjadinya transaksi.

1.      Menggunakan function GETDATE() yang dimodifikasi

Alih-alih menggunakan GETDATE() secara langsung, gunakan perintah :

CONVERT(DATETIME,CONVERT(VARCHAR(11), GETDATE()))

2.      Mengirimkan parameter tanggal yang digenerate pada level aplikasi

Cara kedua adalah level aplikasi mengirimkan parameter tanggal yang sesuai dengan format dari SQL SERVER. Biasanya dalam format MM/dd/yyyy.

Kenapa harus menggunakan cara yang lebih sulit kalau ada yang lebih mudah ? Pertanyaan yang bagus menurut saya. Saya sendiri juga ingin yang mudah, gampang, dan cepet. Ternyata tidak semua yang mudah, gampang dan cepet itu baik.

Ada kasus dimana saya diminta untuk menampilkan data transaksi yang diupdate antara tanggal A hingga tanggal B

Pada umumnya kita menggunakan perintah :

SELECT * FROM tblHandover WHERE UPDATED_DATE >= '04/01/2011' AND  UPDATED_DATE <= '04/11/2011'

SELECT * FROM tblHandover WHERE UPDATED_DATE BETWEEN '04/01/2011' AND  '04/11/2011'

Maka perintah diatas akan menghasilkan  output sebagai berikut :

Gambar Hasil Query

Gambar Hasil Query

Apanya yang salah? Ternyata data tanggal 11 April 2011 tidak dimunculkan, padahal saya menuliskan between tanggal 01 April 2011 hinggal 11 April 2011. Padahal data yang tersimpan dalam tabel sebagai berikut.

Gambar Hasil Query Semua Record

Gambar Hasil Query Semua Record

Jadi kemana hilangnya data tanggal 11 April 2011 saat saya menggunakan kondisi between tanggal 01 April 2011 hinggal 11 April 2011 ?

Satu keanehan lagi adalah apabila saya menggunakan kondisi between tanggal 01 April 2011 hinggal 12 April 2011. Data tanggal 12 April 2011 baru muncul.

Selidik punya selidik ternyata SQL Server Engine (*saya mengira-ira sendiri sebutannya) akan mengubah data dengan tipe datetime menjadi float/long (* yang ini saya belum tahu pasti, silakan mengkoreksi). Kemudian data hasil perubahan ini yang nantinya akan dibandingkan dengan query kondisi kita.

Contoh : saya menggunakan konversi ke float

SELECT CONVERT(FLOAT,UPDATED_DATE),UPDATED_DATE FROM tblHandover
Gambar Hasil Query Semua Record Date dalam bentuk Float

Gambar Hasil Query Semua Record Date dalam bentuk Float

Jadi inilah alasan mengapa jangan menggunakan function GETDATE() secara langsung ketika akan mengupdate tabel dengan tanggal sekarang /current date karena kita tidak dapat langsung memfilter berdasarkan tanggal saja. Hal ini juga yang menjawab pertanyaan saya kenapa perintah :

WHERE UPDATED_DATE >= '04/01/2011' AND  UPDATED_DATE <= '04/11/2011'

dapat dieksekusi dalam mencari range tanggal di SQL Server (* gimana dengan yang lain ya?).

Cara 1 sebenarnya memiliki kelemahan dimana perintah :

CONVERT(DATETIME,CONVERT(VARCHAR(11), GETDATE()))

Perintah tersebut memaksa SQL Server harus melakukan 2 kali konversi data dari datetime ke string, dipotong menjadi 11 karakter dan kemudian dikonversi ulang ke datetime. Kalau dipikir-pikir pasti akan sedikit mempengaruhi performance dari aplikasi secara keseluruhan (* sok melakukan analisa, padahal ini masukan dari mantan suhu saya @rd_djunaedi),  karena ada sedikit usaha konvesi data.

Kelemahan kedua adalah terjadi depedency terhadap database (sekali lagi ini masukan @rd_djunaedi ). Perintah ini hanya akan dieksekusi di SQL Server, sedangkan MySQL, Oracle, dan database lain tidak akan mengeksekusi perintah tersebut.

Demikian pula dengan cara kedua juga memiliki kelemahan. Tanggal yang dikirimkan dari level aplikasi dapat berbeda dengan penanggalan yang ada di SQL Server, sehingga tidak valid. Hal ini dapat diatas sebenarnya dengan melakukan query currentdate yang disimpan dalam aplikasi, entah dalam bentuk session atau global variabel. Kemudian ketika akan melakukan update tabel menggunakan data dari session atau global variabel tersebut.

Pada versi SQL Server 2008 telah dijumpai tipe data Date sehingga kasus seperti ini dapat diminimalisir. Namun demikian tetap harus diingat bahwa tipe data Date hanya “hidup” di SQL Server 2008, tidak diversi sebelumnya.

Dari semua analisa saya yang dangkal dan hanya berdasarkan pengalaman trial-error tentu saja masih banyak kelemahan. Silakan memberikan saran dan kritik atau menambahkan untuk studi kasus yang lain. Happy Coding!

h1

Mengatasi “Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack” di ASP.NET

17 Februari 2011

Hal yang menggangu saya adalah kenapa beberapa kali muncul pesan kesalahan “Unable to evaluate expression because the code is optimized or a native frame is on top of the call stack” ketika melakukan debug dengan menggunakan VS 2008.

Hal ini pada umumnya terjadi pada block try-catch dimana di dalam nya terdapat perintah Response.Redirect, Server.Transfer dan Response.End. Setelah mencari dari internet, berikut adalah pemecahan masalah yang saya dapat dari sini

Intinya karena perintah Response.End akan membuat baris setelahnya tidak di ekseskusi dan berganti ke event Application_EndRequest di application’s event pipeline. (Detail dari event ini saya masih belum paham).

Baca entri selengkapnya »

h1

Backup-Restore SQL Server yang “Backward Compatible”

31 Agustus 2010

Suatu kali saya diminta untuk merestore database dari database server SQL Server 2008 ke database server SQL Server 2005.
File yang di restore berekstensi .bak. Tapi setiap kali akan merestore, selalu muncul pesan kesalahan

Server: Msg 3241, Level 16, State 7, Line 1
The media family on device 'C:\nama_database.bak' is incorrectly formed. SQL Server cannot process this media family.
Server: Msg 3013, Level 16, State 1, Line 1
RESTORE DATABASE is terminating abnormally.

Baca entri selengkapnya »

h1

Bergulat dengan Crystal Report yang “merepotkan”

15 April 2010

Seharian ini penulis puyeng karena Crystal Report. Entah mimpi apa minggu2 ini, membuat report saja belum selesai-selesai. Penulis menggunakan Visual StudioTeam 2008 dan menggunakan Crystal Report bawaan VS2008. Untuk DataSource di file .rpt penulis menggunakan file XMD yang di generate oleh GeneratorXMD yang diisikan parameter store procedure yang penulis buat.

Begini kira2 tampilan report penulis.

Gambar Tampilan Report

Gambar Tampilan Report

Berikut kode program di Code Behind Baca entri selengkapnya »

h1

Paging Cerdas di MySQL

29 Maret 2010

Salah satu hal yang sepertinya menjadi pakem di dalam mengembangkan sebuah aplikasi berbasis web adalah kecepatan dan kompabilitas aplikasi.Yang patut dperhatikan adalah ketika akan menampilkan kumpulan data pada aplikasi berbasis web. Kita tidak dapat serta merta menampilkan semua ada yang ada, melainkan menampilkannya per-halaman. Istilah kerennya ‘paging’.

Bagaimana melakukan paging yang efesien ?

Baca entri selengkapnya »

h1

Publish Blog dengan menggunakan Flock

25 Maret 2010

Sebuah Web browser unik yang dibangun di atas Mozzilla Firefox. Kita dapat melakukan publish ke blog kesayangan kita secara instant tanpa harus membuka halaman sunting blog konvensional. Uniknya lagi kita dapat mengintegrasikan social network, webbased mail, YouTube dalam sebuah browser yang sederhana. Silakan mencobanya, gratis. Silakan unduh di sini

Blogged with the Flock Browser