Menampilkan Crystal Report Melalui Reportviewer di Komputer Klien

Guys, kali ini gw mau membahas mengenai cara menampilkan laporan crystal report di komputer klien. Terkadang kita dengan sangat mudah menampilkannya di komputer kita (developer). Tapi ketika sudah di deploy dan didistribusikan ke komputer klien akan muncul masalah. Dan yang paling mengesalkan adalah muncul database login prompt yang mengharuskan kita memasukkan User ID dan Password. Mending ketika kita masukkan user dan password langsung tampil, nah ini bukannya tampil tapi error yang melanda.

Gw sempet berkutat dengan masalah ini hampir 2 hari lamanya. Gw cari di forum2 yang ada dan terus terang jawabannya kurang memuaskan. Bahkan terlalu teknis cara penyampaiannya. Gw yang newbie bukannya dapat inspirasi tapi malah tambah ‘down’ melihat cara penyelesaiannya. Intinya terlalu teknikal dan sulit untuk dipahami bagi yang baru belajar VB.Net. Okay, tanpa berpanjang lebar lagi gw langsung aja sharing cara penyelesaiannya biar teman2 langsung dapat menggunakannya. (Catatan : gw buat di VB.Net 2008 dan menggunakan SQL Server 2005)

Langkah-langkahnya :

  1. Pertama-tama buat dulu crystal reportnya. Gw asumsikan nama dari crystal report yang gw buat adalah crDiagnosa.
  2. Setelah itu, lo jangan lupa untuk buat Dataset.xsd -nya. Caranya gampang kok. Lo klik kanan di aplikasi buatan lo (di Solution Explorer). Terus lo klik add new item. Nah disitu lo langsung dibawa ke kolom categories yang banyak bgt. Sekarang lo pilih kategori Data. Dan di kategori tersebut lo bakalan ketemu dengan Dataset.xsd. Lo pilih dan kasih nama sesuai keinginan lo. Gw pake nama KlinikDataSet.xsd. Setelah lo buat, tinggal ikutin perintahnya aja. Lo drag database-nya ke halaman dataset yang lo buat. Ok, langkah ke 2 dah kelar.
  3. Setelah itu, lo buat report viewernya. Gampang kok, lo tinggal klik kanan di aplikasi yang lo buat (sama seperti langkah ke dua). Add new item terus pilih windows form. Lo namain deh windows form itu sesuai keinginan lo.
  4. Di windows form yang baru lo buat itu, lo masukkin property reportviewer-nya. Caranya lo cari di toolbox tab reporting. Setelah lo dapet lo buka. Nah disitu akan terlihat crystal reportviewer. Lo tinggal drag ke halaman windows form buatan lo tadi. Lo namain crystal reportviewer-nya sesuai dengan yang lo mau. Kalo gw menggunakan nama CrystalReportViewer1.
  5. Nah langkah 1-4 udah kelar. Sekarang tinggal bagian coding aja. Lo double klik di windows form-nya. Ingat jangan double klik di report viewer-nya!
  6. Ok, sekarang ini coding-nya :

—————————————————————————–

Public Class LaporanDokter      (1)

Private Sub LaporanDokter_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rpt As New crDiagnosa   (2)

Dim MyCommand As New SqlClient.SqlCommand
Dim myDA As New SqlClient.SqlDataAdapter
Dim myDS As New KlinikDataSet   (3)

Try
MyCommand.Connection = conn   (4)
MyCommand.CommandText = “SELECT * FROM tdokter”  (5)
MyCommand.CommandType = CommandType.Text
myDA.SelectCommand = MyCommand

myDA.Fill(myDS, “tdokter”)

rpt.SetDataSource(myDS)
CrystalReportViewer1.ReportSource = rpt  (6)

Catch Excep As Exception
MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

End Class

——————————————————————————————————–

(1) Merupakan nama windows form yang gw buat

(2) Merupakan nama crystal report gw

(3) Nama dataset yang dibuat

(4) conn —> sql connection-nya | | kalo gw udah inisiate di module login : Public conn As SqlConnection = Nothing

(5) Nama table yang berpengaruh di laporan lo

(6) CrystalReportViewer 1 –> merupakan nama crystal reportviewer yang lo buat

Ok….sekarang tinggal lo jalankan aja (F5)…..It works!!!!! Great

Sekarang muncul pertanyaan, kalo seandainya laporang yang gw buat ternyata melibatkan lebih dari 1 table gimana? Ok gampang….here we go :

—————————————————————————

Public Class LaporanDiagnosa

Private Sub LaporanDiagnosa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rpt As New crDiagnosa

Dim MyCommand As New SqlClient.SqlCommand
Dim MyCommand1 As New SqlClient.SqlCommand

Dim myDA As New SqlClient.SqlDataAdapter
Dim myDA1 As New SqlClient.SqlDataAdapter

Dim myDS As New KlinikDataSet

Try

MyCommand.Connection = conn
MyCommand.CommandText = “SELECT * FROM tpasien”
MyCommand.CommandType = CommandType.Text
myDA.SelectCommand = MyCommand

MyCommand1.Connection = conn
MyCommand1.CommandText = “SELECT * FROM tperiksa”
MyCommand1.CommandType = CommandType.Text
myDA1.SelectCommand = MyCommand1

myDA.Fill(myDS, “tpasien”)
myDA1.Fill(myDS, “tperiksa”)

rpt.SetDataSource(myDS)
CrystalReportViewer1.ReportSource = rpt

Catch Excep As Exception
MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

End Class

————————————————————————–

Gampangkan?! Lo tinggal buat sql command dan sql adapternya aja…..Inget kalo ternyata table2 saling berhubungan baik itu primary key dan foreign key-nya lo harus lebih hati2. Karena entar nga mau running….

Setelah semuanya kelar lo tinggal deploy aja dan didistribusikan ke komputer klien. Di dalam deploy sistem, lo harus masukkan add file-nya semua baik itu crystal report, database, dan dataset-nya supaya running smoothly di komputer klien.

Dalam deployement sistem inget lo harus masukin pre-requisites untuk crystal report dan report viewer-nya. Karena penting untuk jalan di komputer klien….

Ok bro/sis sekian sharing dari gw….kalo ada pertanyaan langsung aja isi comment. Kita belajar dan sharing bareng. Gw juga nga jago2 bgt. Tapi setiap ilmu yang gw dapet harus di sharing biar semua jadi bisa….Bener nga guys?……

——————————————————————————————————

Berhubung ada beberapa e-mail yang sampe ke gw, dan menyatakan bahwa tidak bisa menjalankannya secara baik. Maka gw buat update-an teranyar dan gw harap bisa membantu teman-teman. Berikut coding-nya :

Imports System.Data.SqlClient
Imports System.Data

Public Class LaporanDiagnosa

Private Sub LaporanDiagnosa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Dim rpt As New crDiagnosa()
Dim myConnection As SqlConnection
Dim MyCommand As New SqlCommand()
Dim myDA As New SqlDataAdapter()
Dim myDS As New KlinikDataSet()

Try

myConnection = New SqlConnection(“Data Source=.\SQLEXPRESS;Initial Catalog=bank;Integrated Security=True”)
MyCommand.Connection = myConnection
MyCommand.CommandText = “SELECT * from tdokter”
MyCommand.CommandType = CommandType.Text
myDA.SelectCommand = MyCommand

myDA.Fill(myDS, “tdokter”)
rpt.SetDataSource(myDS)
CrystalReportViewer1.ReportSource = rpt

Catch Excep As Exception
MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
End Try
End Sub

End Class

Tagged , , , , ,

24 thoughts on “Menampilkan Crystal Report Melalui Reportviewer di Komputer Klien

  1. Dmtry says:

    saya dah buat crnya,
    tapi ko ga kebaca yah di conding ?

  2. Nga kebaca ya boss? ehm…boleh tau ada berapa table yang ikut di query didalam aplikasi CR-nya? Seandainya ada lebih dari satu table yang terlibat, boss bisa liat di contoh :
    ————————————————————————
    Public Class LaporanDiagnosa

    Private Sub LaporanDiagnosa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim rpt As New crDiagnosa

    Dim MyCommand As New SqlClient.SqlCommand
    Dim MyCommand1 As New SqlClient.SqlCommand

    Dim myDA As New SqlClient.SqlDataAdapter
    Dim myDA1 As New SqlClient.SqlDataAdapter

    Dim myDS As New KlinikDataSet

    Try

    MyCommand.Connection = conn
    MyCommand.CommandText = “SELECT * FROM tpasien”
    MyCommand.CommandType = CommandType.Text
    myDA.SelectCommand = MyCommand

    MyCommand1.Connection = conn
    MyCommand1.CommandText = “SELECT * FROM tperiksa”
    MyCommand1.CommandType = CommandType.Text
    myDA1.SelectCommand = MyCommand1

    myDA.Fill(myDS, “tpasien”)
    myDA1.Fill(myDS, “tperiksa”)

    rpt.SetDataSource(myDS)
    CrystalReportViewer1.ReportSource = rpt

    Catch Excep As Exception
    MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    End Sub

    End Class
    —————————————————————————-

    Kalo nga keberatan bisa di-email kesaya coding dan CR yang sudah dibuat? email saya : herosetyanofario@hotmail.com

    Tks

    • Dmtry says:

      klo data di crnya sih ke baca om,

      yang jadi masalahnya, ketika saya definisikan crnya ga kebaca di baris berikut :

      Dim rpt As New crDiagnosa

      nama crDiagnosa itu ada garis bawahnya, kenapa yah ?

      saya pake VB.NET 2008 dan SQL SERVER 2005

      • O iya bro Dmtry bisa liat diupdate-an terbaru di atas. Ini coding-nya Om : ^-^

        ————————————————————
        Imports System.Data.SqlClient
        Imports System.Data

        Public Class LaporanDiagnosa

        Private Sub LaporanDiagnosa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim rpt As New crDiagnosa()
        Dim myConnection As SqlConnection
        Dim MyCommand As New SqlCommand()
        Dim myDA As New SqlDataAdapter()
        Dim myDS As New KlinikDataSet()

        Try

        myConnection = New SqlConnection(“Data Source=.\SQLEXPRESS;Initial Catalog=bank;Integrated Security=True”)
        MyCommand.Connection = myConnection
        MyCommand.CommandText = “SELECT * from tdokter”
        MyCommand.CommandType = CommandType.Text
        myDA.SelectCommand = MyCommand

        myDA.Fill(myDS, “tdokter”)
        rpt.SetDataSource(myDS)
        CrystalReportViewer1.ReportSource = rpt

        Catch Excep As Exception
        MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
        End Try
        End Sub

        End Class
        ————————————————————

        O iya untuk inisiate connectionstringnya sendiri gw kebetulan menggunakan SQL Server 2005. Jadi Om tinggal tulis nama databasenya aja. Gw menggunakan nama database “bank”.

        Semoga bisa berjalan mulus yah Om Dmytry….

        Tks buat masukannnya….^-^V

  3. sigit says:

    thx infonya. Tp ak ada sdkt masalah ni, krn wktu instal d kmptr klien, reportny g mau nampilin data sama skali. Trus prerequisitiesny yg diperlukn apa sja y? Thx b4

  4. Sebelumnya tks yah udah nge-baca bacot gw di blog ini…heheh
    Kalo gw rasa pre-requisitenya yah….

    Caranya gampang kok, tinggal klik kanan di Setup (file yang telah akan kita build) di Solution Explorer. Terus klik properties. Nah disitu ada options prerequisites. Tinggal klik dan pilih. Biasanya sih Windows installer, Crystal Report, Report Viewer….

    Semoga berhasil sobat…hehe

  5. O iya kemarin gw terima beberapa email yang menyatakan bahwa cara diatas tidak bisa dijalankan dengan sempurna. Mungkin banyak yang salah di inisiate “conn”. Setelah gw utak-atik nih ada coding yang baru hasil penerawangan….hehehe :

    Imports System.Data.SqlClient
    Imports System.Data

    Public Class LaporanDiagnosa

    Private Sub LaporanDiagnosa_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
    Dim rpt As New crDiagnosa()
    Dim myConnection As SqlConnection
    Dim MyCommand As New SqlCommand()
    Dim myDA As New SqlDataAdapter()
    Dim myDS As New KlinikDataSet()

    Try

    myConnection = New SqlConnection(“Data Source=.\SQLEXPRESS;Initial Catalog=bank;Integrated Security=True”)
    MyCommand.Connection = myConnection
    MyCommand.CommandText = “SELECT * from tdokter”
    MyCommand.CommandType = CommandType.Text
    myDA.SelectCommand = MyCommand

    myDA.Fill(myDS, “tdokter”)
    rpt.SetDataSource(myDS)
    CrystalReportViewer1.ReportSource = rpt

    Catch Excep As Exception
    MessageBox.Show(Excep.Message, “Error”, MessageBoxButtons.OK, MessageBoxIcon.Error)
    End Try
    End Sub

    End Class
    ——————–

    Hampir sama sih. Tapi moga2 bisa dijalanin yah kawan…

  6. sigit says:

    Masalah yg aku temui dah slesai n report sukses tercetak setelah proses instalasi slesai. Makasih udah bantuin.. Klo boleh nambahin, untuk pre requisitesnya: .net framework & crystal report, mending diincludekan pada proses build jd g perlu repot saat instalasi klo nemuin kmptr klien yg g ada .net 2 ato crystalny. Resiko: ukuran file instalasi besar

    • Sama-sama bro sigit. Bener bgt ide-nya. Dalam proses build-up project lebih baik memasukan pre-requisitenya seperti yang sudah disebutkan oleh bro sigit; .net framework & crystal report.
      Memang kalo belajar programming khususnya vb.net kudu harus sabar. Kalo udah berhasil pasti seneng bgt rasanya…heheh
      Bro sigit ada blog atau website gitu? Entar kalo ada pertanyaan yang berkaitan dengan vb.net boleh dong tanya-tanya? ^-^

  7. sigit says:

    Maap.. untuk sementara belum bikin blog ato web. Jadi kepingin malu… 😀

  8. seyda says:

    hi,
    do you have sample for search textbox in CrystalReportViewer vb.net..after click button view it will display data required.
    i already tried and looking for the another coding thru internet, but also got problem…
    need urgent.
    thanks

    • Hi seyda….I’ve sent to you my sample application. The sample application is what you need in particular. Hope you can run the application ^-^

      I sent the attachment on .rar format to your email : bbailah_deng@yahoo.com.sg
      Before you run the application, it would be better if you read my message in the notepad “Read Me!!!”

      Happy Coding ^-^V

  9. […] 1. Setelah database dibuat maka sekarang tinggal buat buat Form1 yang gunanya sebagai trigger buat pemanggilan laporan. (Sebenarnya gw udah pernah sharing mengenai cara pemanggilan laporan dari  CrystalReportViewer. Tapi demi kenyamanan teman-teman gw sharing kembali) —- Lihat contoh sebelumnya […]

  10. danyyy says:

    mas tanya dong.. saya kan lagi buat aplikasi database stand alone(sementara) pake vb2008 sama sqlserver2005.. saya koneksi crystal report nya pake cara setting2 (tanpa coding sql) buat nembak ke sql nya.. cara nembak koneksi sql nya jg sama pake (“Data Source=\SQLEXPRESS;Initial Catalog=blabla;Integrated Security=True”). nah waktu aplikasinya saya coba pindah ke laptop laen, ternyata harus diganti di source code yg buat nembak koneksi sqlserver di bagian \SQLEXPRESS> karena sqlexpress kalo diinstal di tiap pc namanya pasti beda2… terus yg bagian crystal reportnya harus di update ke tujuan datasource db tiap2 form nya biar reportnya bisa kebaca lagi ya di pc yg laen? masih newbie saya soalnya, hehehe..

    thanks a lot..

    • Anyway tks udah sudi mampir gan. Mengenai permasalahan agan, kalo seandainya agan lagi sedang membuat suatu aplikasi. Terus karena sesuatu dan lain hal pindah ke laptop (mungkin karena lebih mobile). Nah pas pindah kelaptop ini terjadi masalah. Nga bisa konek ke database, SQL.
      Jadi menurut ane pribadi, langkah pertama agan harus pastiin di laptop tersebut sudah terinstall SQLExpress. Ok, langkah kedua adalah install SQL Server Management Studio yang fungsinya untuk mengatur database.
      Setahu ane memang nama tiap2 SQL bakalan beda. Tergantung dari pengaturan saat setting pertama program SQL itu sendiri. Tapi dengan penggunaan global setting —–> .\SQLEXPRESS sejauh ini gw pake di kompie lain atau lapie lain tetep bisa jalan mulus. Selama ada program SQLexpressnya dan SQL Server Management yang sudah gw bilang diatas.
      Pastiin penyusunan connection stringnya ada titik —-> .\SQLEXPRESS (Karena untuk setting global. Mau beda nama Server juga nga masalah). Contoh nama server : abc234. Penyusunan statis akan terlihat seperti ini : abc234\SQLEXPRESS. Nah diubah menjadi .\SQLEXPRESS…..Mau Server namanya abc123 atau ads333 tetep aja bisa dibaca…..
      Gimana gan kira2, ada pencerahan? Kalo masih bingung comment yah….Tks

  11. danyyy says:

    ohh gt tnyt ( ./ ) itu buat nembak nama server secara global ya? dapet sedkit pencerahan kok gan baru tau klo bisa pake kaya gt, haha thanks bgt infonya.. gw sempet bingung waktu mo mindahin ke beda laptop, terus ngedit source code dlu buat ngganti nama servernya..

    nah skarang masalah gw sama kya tmpt agan dlu, setelah gw bkin setupnya terus gw cantumin prerequisitas ke dalam setup nya kaya reportviewer, dll yang perlu buat klien bisa buka laporannya.. masalah konek database bisa dibuka semua, terus waktu mau buka laporan harus ngisi username n password, gw centang yg integrated security tetapi jg sama aja “login failed”… tnyt setelah gw liat di jendela login db waktu buka laporan nama server nya nama server gw (blabla\SQLEXPRESS) beda ma namaserver komputer client.. soalnya gw buat crystal reportnya ga pake coding kaya yg agan cantumin diatas, gw pake yg nembak datasource db yg di crystal reportnya… hmm, jadi intinya apa harus dikasi coding lagi kaya yg di atas ya gan?

    thanks a lot..

    • Wah tks kalo udah dapat pencerahan gan….gw juga seneng setidaknya sedikit ilmu gw bisa bermanfaat buat agan….

      Ok untuk masalah login database yang selalu muncul promptnya juga pernah gw hadapi dulu. Gampang kok gan solusinya. Coba liat coding gw yang sudah updated diatas. Jadi menurut gw nga usah pake nembak datasource. Karena seringkali terjadi masalah. Nah saran gw ya coba aplikasikan koding gw yang diatas (yang updated). Agan bisa liat dalam penulisannya langsung nembak ke databasenya. Jadi bakalan nga ada login prompt lagi….^_^v

      Kalo masih terjadi kendala comment lagi yah…..entar gw kasih contoh aplikasinya….=:-^]

  12. danyyy says:

    udah gan ternyata bisa ya klo pake coding nembak crystal reportnya, td gw bkin setupnya terus uda gw coba di laptop laen sukses berkat bantuan agan, hehe..

    nah skg ada sdkit masalah lagi nih gan barusan nemu 😦
    gini gan crita dan asal mulanya, kan di aplikasi gw ada button buat nampilin form yg berisi crystalreportviewer buat nampilin datanya.. nah sebelum ditampilin ada form pilihan buat milih pengeluaran bahan per tanggalnya, jadi ada tgl awal & tgl akhirnya, gw pake 2 datetimepicker.. gw pake parameter buat mencetak datetimepicker tgl awal & akhir di laporannya buat judul gt biar jelas dari tgl brapa – tgl brapa.. nah sebelum gw ganti pake coding, setelah gw set tgl awal & akhir dr datetimepicker nya dan klik tombol OK maka langsung keluar data2nya di laporan.. tapi setelah gw ganti pake coding, tiap kali klik tombol OK setelah gw set tglnya selalu keluar prompt buat masukin parameter awal kemudian prompt buat masukin parameter akhir.. kan jadi tidak efisien dan nyusahin bgt ya gan secara gw uda kasi datetimepicker masa masi harus masukin parameter lagi, apalagi formatnya tgl..

    oo iya sbg cttn, sebelum gw pake coding, jg kluar prompt buat masukin parameter awal & akhir, tnyt gara2 nih coding gan, ‘lapMutasiRaw.CrystalReportViewer1.RefreshReport()’ terus gw ilangin dan alhasil ga perlu masukin parameter lagi setelah gw tekan tombol OK.. nah klo yg pake coding ini buat ngilangin prompt parameter yg selalu kluar ini gmn ya gan? apa gara2 nembaknya pake coding ini ya gan jadi mesti kluar prompt buat parameternya ‘CrystalReportViewer1.ReportSource = rpt’.. adakah sedkit pencerahan lagi gan? \ oo /

  13. danyyy says:

    aplikasi persediaan bahan baku gitu sih gan intinya, hehhe..
    nah itu masalahnya tetap input parameter yg sll keluar waktu mau nampilin data td blum ketemu kaya yg gw jabarkan diatas td, datetimpicker1 gw masukin ke parameter ‘awal’, datetimepicker2 gw masukin ke parameter ‘akhir’.. nah parameter itu gw masukin ke judul di reportnya buat penjelasan doang gt… misal:
    ” Pengeluaran Bahan dari tgl ‘awal’ sampai tgl ‘akhir’ “.. mentok2 ga gw kasi penjelasan tgl deh..

    hmmm sumber yang gmn maksut agan? gw pernah baca2 skripsi2 di perpus dlu gan ttg perhitungan rata-rata sama laporan neraca laba rugi, dll.. klo akuntansi ga tll ngerti jg sih gw…
    gw jg masih newbie soalnya mhn maap gan, huehuehue…

  14. Garry P. Setiawan says:

    aku panggil mas/pak nih? aku mau tanya, ternyata untuk mendapatkan data nya , anda menggunakan sql query select, tidak menggunakan yg dari wizard dataset/datasource itu ya, terus bagaimana dengan design crystal reportnya? apakah bisa secara otomatis/ bagaimana? thanks mas hero

    • Mengenai design crystal report-nya sendiri secara otomatis kita pilih di node dari SQL Server yang tersedia pada crystal report. Intinya pas mas bro mau deploy ini sistem jadi lebih gampang. Kebetulan gw udah pernah menangani beberapa perusahaan yang minta dibuatin sistem. Dengan sistem yang gw pake pengambilan / fetch report jadi lebih mudah….:)

  15. Garry P. Setiawan says:

    masih kurang mengerti mas bro yg dimaksud node dari sql server itu apa ya??

Leave a reply to herosetyanofario Cancel reply