eSa
Dekan
- Katılım
- 5 Kasım 2011
- Mesajlar
- 9,782
- Reaksiyon puanı
- 352
- Puanları
- 263
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.
Form_Load bölümünde değişken atamalarımıza başlıyoruz.
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
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.
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.
Bir sonraki makalede görüşmek üzere..
eSa
Ö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