水晶報表的一個小小的例子

這次我們做了一個程序.

訪問數據庫:

         使用數據庫訪問中間件,只要寫一個XML文件,通過Hibrate訪問到真正的數據庫,它將會返回一個XML文檔給我們做爲記錄集.

做報表使用的方式:


      生成靜態的報表.寫出一個TTX文件.基於這個做一個靜態報表.把一些需要顯示的內容都把它謀劃好.還有一些公式也要做好.之後,數據來源是這樣的.讀出XML文檔中的記錄集,打開一個沒有連接到數據庫上的一個ADO的記錄集.然後一條一條的把記錄集加入.然後使用水晶報表對象將一個報表中的表結構與我的一個ADO記錄集梆定,這樣就能很方便的把內容顯示出來了.


      例子代碼我在這裏帖一些吧.可能今後會要用到.

 _RecordsetPtr m_pRecordset;
 m_pRecordset.CreateInstance(__uuidof(Recordset));
 m_pRecordset->CursorLocation=adUseClient;

 
 try{
  //加入列
  m_pRecordset->Fields->Append(_bstr_t("id"),adVarChar, 40, adFldIsNullable);

  //打開這個記錄集,(com裏,有一些默認值可以使用vtMissing來填寫)
  m_pRecordset->Open(vtMissing,vtMissing,adOpenStatic, adLockBatchOptimistic,adCmdUnknown);
  

  //創建DOM,加載XML文檔
  MSXML::IXMLDOMDocumentPtr pCommandDoc;
  pCommandDoc.CreateInstance(__uuidof(MSXML::DOMDocument));
  
  pCommandDoc->put_async(VARIANT_FALSE);
  pCommandDoc->put_validateOnParse(VARIANT_FALSE);
  pCommandDoc->put_resolveExternals(VARIANT_FALSE);
  pCommandDoc->put_preserveWhiteSpace(VARIANT_TRUE);
  pCommandDoc->load(Dlg.GetPathName().GetBuffer(0));
  
  MSXML::IXMLDOMNodePtr pRootNode=pCommandDoc->selectSingleNode("rowdata");
  if (pRootNode==NULL)
  {
   return ;
  }
  
  //讀出記錄集
  MSXML::IXMLDOMNodeListPtr pListNode = pRootNode->selectNodes("row");
  for(int i=0;i< pListNode->length;i++)
  {
   MSXML::IXMLDOMNodePtr pNode=pListNode->Getitem(i);
   MSXML::IXMLDOMNodeListPtr pListNode2=pNode->selectNodes("*");
   for(int j=0;j<pListNode2->length;j++)
   {
    MSXML::IXMLDOMNodePtr pNode2=pListNode2->Getitem(j);
    _bstr_t info=pNode2->Gettext();
   //插入行
   m_pRecordset->AddNew();///添加新記錄
   m_pRecordset->PutCollect("id",_variant_t(info));
   m_pRecordset->Update();///保存到庫中
   }
  }

  //梆定一個數據源
  m_report->m_Report->Database->Tables->Item[1]->SetDataSource(_variant_t((IDispatch *)m_pRecordset));
  m_report->m_CRViewer1.SetReportSource(m_report->m_Report);
  
  //刷新
  m_report->m_CRViewer1.ViewReport();
  m_report->m_CRViewer1.Refresh();
  m_pRecordset->Close();
 }

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章