全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2435
推到 Plurk!
推到 Facebook!

如何在呼叫.rpt檔時動態修改所連結的檔案型資料庫來源?

答題得分者是:sryang
喬狼
一般會員


發表:2
回覆:3
積分:1
註冊:2010-08-25

發送簡訊給我
#1 引用回覆 回覆 發表時間:2012-02-03 17:24:14 IP:220.130.xxx.xxx 訂閱
小弟的公司是做ERP的,
環境是D5、CR8(rpt開發程式而非Delphi開發用),還因為部份元件某些版權因素無法升級(舊就算了,侷限到有股想離職的衝動囧),


報表既有作法是程式印表將DBF丟到本機固定路徑,報表預設是讀該路徑,EX: C:\Report\
程式呼叫報表時,報表會自己去開該路徑下的DBF,

後來ERP增加可以切換把這些暫存檔、工作檔丟到使用者目錄下,
即C:\Document and Settings\User\Application Data\Temp\Report\或C:\User\AppData\Temp\Report\
在一開啟ERP時會設進一個公用的全域變數,供執行時期所有工作檔或報表使用,

但是問題來了,報表開啟會跳錯誤533,因為報表找不到資料庫所致,
網路找過可以透過設一個ADOQuery來動態取得dBase的路徑,再設給CrpeDS的DataSet使用:

[code delphi]
Crpe1.Tables[0].DataPointer := CrpeDS1.DataPointer;
[/code]

試著安裝TCrpeDS結果install失敗,查過這顆元件是只能在含D6以上的版本Run,
像是DesignIntf.dcp在D5是Dsgnintf.dcp, 而DesignEditors.dcp是在D6之後從 Dsgnintf.dcp分出來的,

請問是否有其他方法可以在runtime時,去改.rpt檔的檔案型資料庫路徑?
sryang
尊榮會員


發表:38
回覆:742
積分:876
註冊:2002-06-27

發送簡訊給我
#2 引用回覆 回覆 發表時間:2012-02-05 00:08:17 IP:114.35.xxx.xxx 訂閱
用什麼方法動態修改檔案型資料庫的資料目錄,與貴司使用何種方法呼叫 Crystal Report 有關
請問是使用 Crystal Report VCL?還是 ActiveX (CRAXDRT.DLL) 方式?
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
喬狼
一般會員


發表:2
回覆:3
積分:1
註冊:2010-08-25

發送簡訊給我
#3 引用回覆 回覆 發表時間:2012-02-06 12:18:19 IP:220.130.xxx.xxx 訂閱
公司是幾十年前另一間做ERP的公司合夥人分出來的,
因為部份程式或元件是有擋權限或沒有Source,無法修改所以Delphi 6以上就不能跑,

目前使用的印表函數也是其一,因為是包死的沒Source,推測是呼叫crystal.dcp,所以算是VCL?
後來現在這間公司有自己另寫印表函數,Source是使用TCrpe,package也是使用crystal.dcp,

如果均是使用VCL,試過這個網站的方式:http://topic.csdn.net/t/20040413/20/2961272.html


[code delphi]
//Crpe.Connect.ServerName := '';
Crpe.Connect.DatabaseName := 'DBFDB'; //這是ERP底層預設的dBase Database AliasName
//Crpe.Connect. '';
//Crpe.Connect.Password := '';
Crpe.Connect.Propagate := True;
Crpe.SQL.Query.Text := 'SELECT * FROM ' DBFDIR 'AAA.DBF';
[/code]

不確定是否是這樣設,註記的地方針對dBase也不確定是否需要所以mark起來,
只是每支報表的DBF檔名都不一樣,例如說有的是以UnitName或FormName產生的,
真正的DBF檔名還是要抓得到RPT檔設的才準,程式只要負責改連結路徑就好
===================引 用 sryang 文 章===================
用什麼方法動態修改檔案型資料庫的資料目錄,與貴司使用何種方法呼叫 Crystal Report 有關
請問是使用 Crystal Report VCL?還是 ActiveX (CRAXDRT.DLL) 方式?
編輯記錄
喬狼 重新編輯於 2012-02-05 21:20:11, 註解 無‧
喬狼 重新編輯於 2012-02-05 21:21:27, 註解 無‧
sryang
尊榮會員


發表:38
回覆:742
積分:876
註冊:2002-06-27

發送簡訊給我
#4 引用回覆 回覆 發表時間:2012-02-06 12:58:45 IP:118.171.xxx.xxx 訂閱
Crystal Report 連接到 DBF 檔的方式還有好幾種
有 ODBC 方式,也有 xBase 方式
兩種連接方式修改資料目錄的方式也不同
一種要修改 TCrpe.LogOnInfo.Items[i].ServerName
一種要修改 TCrpe.Tables[i].Name

建議您兩種方法都可以試試看
------
歡迎參訪 "腦殘賤貓的備忘錄" http://maolaoda.blogspot.com/
喬狼
一般會員


發表:2
回覆:3
積分:1
註冊:2010-08-25

發送簡訊給我
#5 引用回覆 回覆 發表時間:2012-02-06 18:42:29 IP:220.130.xxx.xxx 訂閱
 感謝指教,後來用Crpe1.Tables[0]試出來了,分享如下:

[code delphi]
CrpForm.Crpe1.ReportName := REPORTNAME '.rpt';
CrpForm.Crpe1.Tables.Add(0);
CrpForm.Crpe1.Tables[0].Retrieve;
CrpForm.Crpe1.Tables[0].Path := DBFDIR;
[/code]
系統時間:2017-12-12 8:33:24
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!