淺談crystal reports在VB中的調用

來源:互聯網
上載者:User
環境:VB6.0,crystal reports 9.0
在一個項目中用到了crystal reports,總結一些經驗和教訓。
以做一張單據的套打為例。
單據包括單據頭,單據體。單據頭和單據體可能是一對多的關係。並且他們分別存在於兩張表當中,用欄位FID做關聯。要求能夠動態傳入參數FID,顯示不同的結果。
首先,開啟crystal reports,做好一張單據的模板rpt。製作報表的方法有很多,比如:用它的圖形化工具直接建立幾個表之間的串連,然後將想要顯示的欄位托到報表當中;或是調用一個已經寫好的預存程序;或是直接編輯COMMAND。再將想要顯示的欄位托到報表當中。然而,經常問題就出在這裡,用圖形化工具製作的報表,在VB中給此報表傳入DATASOURCE時經常會因為欄位不對應,而導致部分資料無法顯示。所以建議在crystal reports中利用COMMAND編輯sql語句,製作單據。然後將此sql語句copy到VB代碼中,產生新的結果集,並賦給rpt檔案新的資料來源。以此保證各欄位的對應。
假定單據頭資訊存放於表Quotation中,單據體存放於表QuotationEntry中。單據頭資訊中需要顯示欄位客戶名稱FCustomer,單據編號FBillNo,單據日期FBillDate,制單人FBiller......;單據體需要顯示的是商品明細,包括商品代碼FNumber,商品款式FStyle,商品大小FSize,商品顏色FColor......兩表關聯欄位FID。
於是,在rpt檔案的command中添入sql語句”select a.*,b.* from Quotation a left join QuotationEntry b on a.FID=b.FID”。然後將需要的欄位拉入報表當中。
在VB中,首先應用crystal reports 9 actionX designer disign and runtime library,並添加組件crystal report viewer control 9。
在FORM中添加剛才加入的組件。就可以調用並顯示了。

public BillID as integer '傳入的參數
Private Sub Command1_Click()
Dim capp As New CRAXDDRT.Application
Dim carp As New CRAXDDRT.Report
Dim conn As New Connection
Dim rs As New Recordset
Dim sql As String
conn.ConnectionString = "Provider=SQLOLEDB.1;Password=sa;Persist Security Info=True;User ID=sa;Initial Catalog=AIS20041209121508;Data Source=127.0.0.1"
sql = "select a.*,b.* from Quotation a left join QuotationEntry b on a.FID=b.FID where a.FID="&BillID
With conn
.Open
rs.Open sql, conn, adOpenStatic, adLockBatchOptimistic
End With
Set carp = capp.OpenReport("E:\Code\Component\Client\Quotation.rpt")
carp.DiscardSavedData '清空以前資料
carp.Database.SetDataSource rs
CRViewer91.ReportSource = carp
CRViewer91.ViewReport
End Sub
也可以將寫好的Quotation.rpt檔案一起打包到VB當中,具體的辦法是在VB工程的右鍵載入crystal report 9的設計器,選擇開啟以有的檔案,開啟E:\Code\Component\Client\Quotation.rpt,並載入到其中。以上的代碼Set carp = capp.OpenReport("E:\Code\Component\Client\Quotation.rpt")就可以不要了,直接將carp替換為載入進來的控制項名稱。




相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。