[MAKALE] - Visual Basic 6.0 'da Crystall Report ile Raporlama

eSa

Dekan
Yasaklı
Gerek dökümanların ingilizce olması gerekse örnek yetersizliğinden, Visual Basic ile programlama yapan birçok kişi, iş raporlamaya geldiğinde sıkıntılar yaşamaktadır. Bu makalede SQL server üzerinde bulunan verilerimizin Crystall Report ile Form içinde kullanıcıya en kolay yoldan nasıl göstereceğimizi anlatacağım.


Örnekte kullanılan programlar: Visual Basic 6.0 , Crystall Report 8.0 dır.

İlk olarak projemize Crystall Report Viewer bileşenini ekleyerek başlıyoruz. Project|Componets menüsünden Browse 'e tıklayıp yeni bileşenimizi projemize ekliyoruz.



Ardından Yine Project menüsünden Referanslara tıklayıp, Crystall Report için gerekli referansları da projemize ekliyoruz. Bunlar da;

- Crystall Report 8 ActiveX Designer Design Time Library(Internal)
- Crystall Report 8 ActiveX Designer Run Time Library




Kodlamaya başlamadan önce eklemiş olduğumuz crystallreportviewer controlunu formumuza ekliyoruz. Ben kodlamada kolaylık olsun diye ismini CR1 olarak değiştirdim.





Bileşen ve Referans eklemeleri tamamlandıktan sonra, kodlamaya geçelim.

İlk olarak General-Decleration bölümünde bu modülde kullanacağımız tanımlarımızı yapalım.


Kod:
  Dim crxApp As New CRAXDRT.Application
  Dim crxRpt As CRAXDRT.Report
  Dim crxTables As CRAXDRT.DatabaseTables
  Dim crxTable As CRAXDRT.DatabaseTable
  Dim crxSubreportObject As CRAXDRT.SubreportObject
  Dim crxSubReport As CRAXDRT.Report
  Dim crxSections As CRAXDRT.Sections
  Dim crxSection As CRAXDRT.Section
  Dim crParamDefs As CRAXDRT.ParameterFieldDefinitions
  Dim crParamDef As CRAXDRT.ParameterFieldDefinition

  Dim strServerOrDSNName As String
  Dim strDBNameOrPath As String
  Dim strUserID As String
  Dim strPassword As String
  
  Dim ReportName As String
  Dim ReportFormula As String



Form_Load bölümünde değişken atamalarımıza başlıyoruz.


Kod:
Private Sub Form_Load()
    strServerOrDSNName = "sql_server_adi_veya_ip_no"
    strDBNameOrPath = "sql_veritabani_adi"
    strUserID = "sql_kullanici_adi"
    strPassword = "sql_kullanici_sifresi"
    ReportName = App.path & "\rapor_adi.rpt"
    
End Sub


Eğer formumuzun boyutları değiştiğinde viewerimizin de boyutlarının form ile aynı anda değişmesini istiyorsak, Form_Resize kısmına
Kod:
  CR1.Move 0, 0, Me.ScaleWidth, Me.ScaleHeight

ekleyebiliriz. Buradaki CR1 benim CrystallReportViewer nesnesine verdiğim isimidir.

Artık önceden Crystall Report ile hazırlamış olduğumuz raporumuzu, kullanıcıya göstermeye hazırız. Bunun için ShowReport adında bir Sub hazırlayalım ki, programımızın istediğimiz yerinde (herhangi bir button veya bir olayda ) yalnızca ShowReport yazarak kullanabilelim.

Kod:
Private Sub ShowReport()

Set crxApp = New CRAXDRT.Application
Set crxRpt = crxApp.OpenReport(ReportName)


[COLOR=#008000]'Çağırdığımız rpt dosyası için server ve kullanıcı adları set ediliyor[/COLOR].

crxRpt.Database.Tables(1).SetLogOnInfo strServerOrDSNName, strDBNameOrPath, strUserID, strPassword
crxRpt.VerifyOnEveryPrint = True
crxRpt.Database.Verify


[COLOR=#008000]'Rapor içinde kullanılan tüm tabloların, sub reportların ve içindeki tabloların da ayrı ayrı
'table.location ve session bilgilerinin gönderilmesi gerekiyor.[/COLOR]


Set crxTables = crxRpt.Database.Tables
For Each crxTable In crxTables
     With crxTable
          .Location = .Name
     End With
Next


Set crxSections = crxRpt.Sections

For i = 1 To crxSections.Count
    Set crxSection = crxSections(i)


    For j = 1 To crxSection.ReportObjects.Count


        If crxSection.ReportObjects(j).Kind = crSubreportObject Then
            Set crxSubreportObject = crxSection.ReportObjects(j)


            Set crxSubReport = crxSubreportObject.OpenSubreport


            Set crxTables = crxSubReport.Database.Tables


            For Each crxTable In crxTables
                With crxTable
                   .SetLogOnInfo strServerOrDSNName, _
                       strDBNameOrPath, strUserID, strPassword
                    .Location = .Name
                End With
            Next


        End If


    Next j


Next i

[COLOR=#008000]'Eğer raporumuz için herhangi bir kriter verecek isek, burada bunun tanımını yapıyoruz.
'Burada örnek olarak kriter bir textboxtan alınmıştır.[/COLOR]

ReportFormula = "{p1_stok_hareket.hareket_id}=" & txtValue(0)
crxRpt.RecordSelectionFormula = ReportFormula


[COLOR=#008000]'ve son olara tüm verileri set edilmiş raporumuzu viewere aktarıp show ediyoruz.[/COLOR]

CR1.ReportSource = crxRpt
CR1.Zoom (100)
CR1.ViewReport


Set crxTables = Nothing
Set crxSubReport = Nothing
Set crxSections = Nothing
Set crxRpt = Nothing
Set crxApp = Nothing


End Sub


Eğer kullandığımız formumuzu unload olmadan önce hafızadan atmaz isek formu bir sonraki açışımızda hata ile karşılaşabiliriz. Bu tip hatalara düşmemek için son olarak şu kodu da Formumuzun Query_Unload kısmına eklememiz gerekir.


Kod:
Private Sub Form_Unload(Cancel As Integer)
Set form1 = Nothing
End Sub


Bir sonraki makalede görüşmek üzere..

eSa
 

Son mesajlar

Üst