首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> VC >> 關於VC++

Crystal Reports 在 VC++ 6.0 中的快速整合指南:從 COM 匯入到報表顯示

     編輯:關於VC++

Crystal Reports (水晶報表) 是功能強大的報表設計工具,但官方範例多為完全動態生成,程式碼冗長。本文提供在 VC++ 6.0 + Windows 2000 環境下,使用預先設計好的 .rpt 模板檔案,透過 COM 介面快速顯示報表的最簡單流程。

環境需求

  • VC++ 6.0 SP5
  • Crystal Reports 9 (craxdrt9.dll)
  • SQL Server 7.0 / 2000 (資料來源)

三步驟完成整合

1. 匯入型別庫

在 stdafx.h 或對話框標頭檔頂部加入:

#import "C:\\Program Files\\Common Files\\Crystal Decisions\\2.5\\bin\\craxdrt9.dll" no_namespace

路徑請依實際安裝位置調整。no_namespace 讓介面指標 (如 IApplicationPtr) 直接可用,無需 craxdrt:: 前綴。

2. 宣告智慧指標與控件變數

// 報表引擎介面 IApplicationPtr m_Application; IReportPtr m_Report; // 報表檢視器 ActiveX 控件 // 在對話框編輯器右鍵 → Insert ActiveX Control → Crystal Report Viewer Control 9 CCrystalReportViewer9 m_CRViewer1;

3. 核心實作碼 (如 OnInitDialog 或按鈕事件中)

try { // 1. 建立應用程式物件 m_Application.CreateInstance(__uuidof(Application)); // 2. 開啟預先設計的 .rpt 檔 m_Report = m_Application->OpenReport(_bstr_t("C:\\Reports\\staff.rpt")); // 3. 設定報表屬性 m_Report->put_ReportTitle(_bstr_t("員工名冊")); m_Report->PutReportAuthor(_bstr_t("xiaojin")); // 4. 設定資料庫登入 (SQL Server) // 參數: Server, Database, User, Password m_Report->Database->Tables->Item[1]->SetLogOnInfo( _bstr_t("(local)"), _bstr_t("staff"), _bstr_t("sa"), _bstr_t("sa")); // 5. 指定 SQL 查詢 (覆蓋報表內建查詢) m_Report->put_SQLQueryString(_bstr_t("SELECT * FROM person WHERE id < '4' ORDER BY id")); // 6. 進階篩選 (Crystal 語法,功能同 SQL) m_Report->PutRecordSelectionFormula(_bstr_t("{person.id}='1'")); // 7. 不顯示重複記錄 m_Report->PutEnableSelectDistinctRecords(TRUE); // 8. 綁定至檢視器控件 m_CRViewer1.SetReportSource(m_Report); // 9. 介面微調 m_CRViewer1.SetDisplayToolbar(TRUE); // 顯示工具列 m_CRViewer1.SetDisplayGroupTree(FALSE); // 隱藏群組樹 m_CRViewer1.SetDisplayBorder(FALSE); // 無邊框 // 10. 重新整理並顯示 m_CRViewer1.Refresh(); m_CRViewer1.ViewReport(); } catch (_com_error& e) { AfxMessageBox(_T("報表載入失敗: ") + CString(e.ErrorMessage())); }

關鍵點說明

方法/屬性用途
SetLogOnInfo設定資料庫連線,必須在 OpenReport 之後、ViewReport 之前呼叫。
put_SQLQueryString動態覆蓋 SQL 查詢,彈性極高,適合參數化報表。
PutRecordSelectionFormula使用 Crystal 語法篩選,如 {table.field}='value',不需修改 SQL。
Refresh() + ViewReport()雙雙呼叫才能確保資料重抓並顯示。

常見問題排除

  • 編譯錯誤「cannot open type library」:確認 craxdrt9.dll 路徑正確,或將 DLL 複製至專案目錄並用相對路徑匯入。
  • 執行時錯誤「Invalid TLV record」:通常為資料庫登入資訊錯誤,檢查 DSN、帳號密碼。
  • 中文欄位顯示亂碼:確認資料庫、報表設計環境、VC++ 專案字碼頁一致 (建議全用 Unicode/_UNICODE)。

本範例省略例外處理細節,實務上請務必包裹 try/catch(_com_error) 並記錄錯誤日誌。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved