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

如何切換Crystal Report 的DataBase

尚未結案
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-28 11:47:15 IP:61.221.xxx.xxx 未訂閱
小弟是用D7 Crystal Report 9 SQL Server 2000 當我的報表是用A的database做的,如何用delphi 呼叫時切換到B或其他資料庫,我用的元件是 TCrpe
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-29 01:55:56 IP:211.76.xxx.xxx 未訂閱
引言: 小弟是用D7 Crystal Report 9 SQL Server 2000 當我的報表是用A的database做的,如何用delphi 呼叫時切換到B或其他資料庫,我用的元件是 TCrpe
如果是access之類的檔案型資料庫是可以用程式碼控制路徑,至於如果是sql server那麼可以考慮用動態建立odbc的方式,我曾經這樣設計過,在cr中設定資料來源為odbc就可以了,要換資料庫就更動odbc設定.
crispin2k
初階會員


發表:7
回覆:42
積分:33
註冊:2002-07-24

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-29 10:31:35 IP:61.70.xxx.xxx 未訂閱
CrystalReport可以動態切換資料庫及資料表沒有問題,例如您有10家廠商,分別放在不同的資料庫(SQL Server及Access等資料庫均可),此時你可以利用程式透過ActiveX及VCL提供的功能切換資料庫,動態切換報表對應的資料庫來列印報表,這樣就可以達到一份報表給n家廠商使用的目的。 想找一下當初的資料給您,不過用了FastReport之後,已經很久沒用CrystalReport了,我再找一下NoteBook看看,若找到之前為某家資訊公司上課的資料,再傳給你。 發表人 - crispin2k 於 2003/11/29 10:33:41
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-12-02 14:08:00 IP:61.221.xxx.xxx 未訂閱
不好意思~~最近忙了沒時間回應, 感謝兩位前輩熱心指導, 我有去試過動態Create ODBC但是列印的資料還是原來報表所指向的資料庫耶?? //自動建立ODBC function TForm1.CreateClientODBC: boolean; var Reg: TRegistry; DataSourceName, DataBaseName, ServerName: string; begin DataSourceName:='DB1'; DataBaseName:='DB1'; ServerName:='SQL1'; Reg := TRegistry.Create; try Reg.RootKey := HKEY_CURRENT_USER; if Reg.OpenKey('\Software\ODBC\', True) then begin Reg.OpenKey('\Software\ODBC\ODBC.INI\ODBC Data Sources', True); Reg.WriteString(DataSourceName,'SQL Server'); Reg.OpenKey('\Software\ODBC\ODBC.INI\' DataSourceName, True); Reg.WriteString('DataBase', DataBaseName); Reg.WriteString('Driver', 'C:\WINNT\System32\SQLSRV32.dll'); Reg.WriteString('LastUser', 'sa'); Reg.WriteString('PassWord', 'xx'); Reg.WriteString('Server', ServerName); end; Reg.CloseKey; Reg.Free; Result:=true; except Result:=false; end; end;
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-12-02 14:44:32 IP:61.222.xxx.xxx 未訂閱
你好: 1.cr的savedatawithreport有沒有關閉呢? 2.報表開啟前,檢查一下odbc是否真的改變設定值了. 3.cr連結資料庫用的是ado還是rdo,之前曾試過成功可以用的是rdo.
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-02 15:26:19 IP:61.221.xxx.xxx 未訂閱
引言: 你好: 1.cr的savedatawithreport有沒有關閉呢? 我有關 2.報表開啟前,檢查一下odbc是否真的改變設定值了. 有改變值 3.cr連結資料庫用的是ado還是rdo,之前曾試過成功可以用的是rdo. 我也是用RDO 還是抓到原來的資料耶~~
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-02 21:01:37 IP:211.76.xxx.xxx 未訂閱
那麼很肯定的兇手不是crystal report... check check你的資料庫吧..
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-03 10:47:21 IP:61.221.xxx.xxx 未訂閱
我查閱了我的報表是用command去下的,其他一般若是用table join出來報表是沒有問題的,還在努力尋找答案中。
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-12-03 10:51:18 IP:61.222.xxx.xxx 未訂閱
你好 是否需要將command的內容post出來好讓更多朋友能有協助你的機會
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-12-03 10:58:34 IP:61.221.xxx.xxx 未訂閱
我的報表是用command去下的,我有將SQL那段都抓出來,直接改變他的DB1改為DB2,結果資料還是顯示出DB1的,很奇怪耶 SELECT "T7026"."F001", "T7026"."F005", "T7026"."F003", "T7026"."F004", "T7026"."F079_R", "T7026"."F080_R", "T7026"."F009", "T7026"."F010", "T7026"."F011", "T7026"."F012", "T7026"."F013", "T7026"."F006", "T7026"."F007", "T7026"."F008", "T7026"."F002" FROM "DB2"."dbo"."T7026" "T7026" ORDER BY "T7026"."F001"
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-12-03 11:07:05 IP:61.222.xxx.xxx 未訂閱
你好 改成這樣呢... crpe1.SQL.Retrieve; crpe1.SQL.Query.Text:=''; 不過cr在聯結資料庫上比較固定,他的靈活性在排報表,不像qr可以抽換dataset如此方便有彈性, 如果你是在delphi中使用cr的vcl元件,考慮使用TCrpeDs這個元件,可以有抽換dataset的效果,只不過在操作上要指標來指標去的,比較不是那麼pascal直覺... 參考看看...good luck
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-12-03 12:22:02 IP:61.221.xxx.xxx 未訂閱
感謝 ~~我找時間再試試看~~現在又被別的需求綁住了~~ 等我試了有問題再請教你~~
------
ivankuo
crispin2k
初階會員


發表:7
回覆:42
積分:33
註冊:2002-07-24

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-12-05 21:11:52 IP:61.70.xxx.xxx 未訂閱
關於此一問題,我終於找到當初某家ERP軟體公司向我詢問此一問題的解答,請連接至我的討論區(http://www.jane.com.tw),然後搜尋"[CrystalReport]的特異功能"即可找到解答,這個範例是使用SQL Server,也就是說使用SQL Server也可以動態切換資料表。此一功能我們公司在VB 2.0的時候就已經在使用,當時是使用ActiveX的介面,而這次呢? 我們發表的是VCL介面。 自從我使用Delphi FastReport以後,CrystalReport就很少使用了,不過我們公司可以說是全國最早使用CrystalReport的單位之一,而且用到的功能非常的深入,原因之一是當初我的組原有一位留美的碩士,原文的手冊都是她K的,然後再由內部教育訓練教導其他的組員,目前這位美女呢? 現在在某科技大學任教,不過她已經結婚了喔!
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-12-05 22:55:33 IP:211.76.xxx.xxx 未訂閱
基本上這是一個討論區 不是另外一個網站的指引 要嘛您也列出link,搞什麼嘛... 會crystal report沒有什麼好驕傲的 這也不過是一種跟word,excel沒兩樣的東西 有辦法就寫一套crystal report, 至於那位已婚的美女, 放心,沒有人會有興趣
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-12-07 23:55:05 IP:211.76.xxx.xxx 未訂閱
1.根據小弟前去搜尋的結果,發現與小弟建議的方式相似,不過,如果以 Crpe1.Tables.Retrieve; 的方式只能夠在cr的資料庫來源是table的情況才能使用,至於cr還能以sql server中的view或是stored procedure,就不敷使用了,所以動態切換還是以 crpe1.SQL.Retrieve; crpe1.SQL.Query.Text:='...'; 的方式比crpe1.tables.retrieve的方式彈性較大,至於cr的vcl元件中則也提供了TCrpeDs可以指定tdataset的來源,根本不用這種要接收報表設定資訊然後run-time修改的方式. 要觀眾轉台去收看貴站,最好也自己做好功課再回答,至於又在貴站該篇post又發現所謂的: "當初我們公司就是由一位留美的閱讀Help後教大家的,所以我們得到的都是一手的資料,當初的文件目前還在我的手上呢" 所謂的看help應該算是programmer的基本功吧,不是只有所謂"留美"才看得懂help. 這個版小弟有一定的管轄權,下次如果發現這種只要觀眾轉檯不擇手段的將會有 "特別"的處置 必要的時候可以增修專屬閣下的專門條款.
No-where
一般會員


發表:31
回覆:53
積分:16
註冊:2002-09-05

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-12-12 23:13:39 IP:218.165.xxx.xxx 未訂閱
嗯 關於這個問題 提供我們的作法參考一下 在登入一資料庫作完報表後 在 set location 處 把 owner.tablename 的 owner. 拿掉 所以在 create TCrpe 時給定 user 呼叫... try try see... 希望有幫助 ^_^
No-where
一般會員


發表:31
回覆:53
積分:16
註冊:2002-09-05

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-12-12 23:16:44 IP:218.165.xxx.xxx 未訂閱
補充一下 我們用的DB 是 oracle 不走 odbc 沒試過 sql server喔
crispin2k
初階會員


發表:7
回覆:42
積分:33
註冊:2002-07-24

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-12-13 09:53:42 IP:61.70.xxx.xxx 未訂閱
引言: 1.根據小弟前去搜尋的結果,發現與小弟建議的方式相似,不過,如果以 Crpe1.Tables.Retrieve; 的方式只能夠在cr的資料庫來源是table的情況才能使用,至於cr還能以sql server中的view或是stored procedure,就不敷使用了,所以動態切換還是以 crpe1.SQL.Retrieve; crpe1.SQL.Query.Text:='...'; 的方式比crpe1.tables.retrieve的方式彈性較大,至於cr的vcl元件中則也提供了TCrpeDs可以指定tdataset的來源,根本不用這種要接收報表設定資訊然後run-time修改的方式. 要觀眾轉台去收看貴站,最好也自己做好功課再回答,至於又在貴站該篇post又發現所謂的: "當初我們公司就是由一位留美的閱讀Help後教大家的,所以我們得到的都是一手的資料,當初的文件目前還在我的手上呢" 所謂的看help應該算是programmer的基本功吧,不是只有所謂"留美"才看得懂help. 這個版小弟有一定的管轄權,下次如果發現這種只要觀眾轉檯不擇手段的將會有 "特別"的處置 必要的時候可以增修專屬閣下的專門條款.
一、CrystalReport在報表定義完成的時候,擷取資料的動作會由CRPE自動完成,所以並不一定需要再透過外部的資料提供,當然下SQL指令餵資料的動作也是多此一舉,但是為什麼VCL會提供此一功能呢? 無非是提供程式設計師多一點的控制,但是若真正討論在程式中下達SQL指令,你認為會比較好嗎? 我們舉個例子,若報表增加一個欄位的時候,在你的做法裡面,程式設計師要做什麼工作呢? 1.修改報表 2.修改程式中的SQL指令 3.重新分發你的程式 但是使用改變資料表的方式,只需下列的動作: 1.修改報表 2.分發報表 其中,分發報表只需數KB或數十KB就可以了,優劣立見。 二、之前提到留美碩士的事,可能我沒說清楚,主要我要表達的意思是現在程式設計的工作相當複雜,有些事是可以專業分工的,由適當的人做適當的事,然後透過教育訓練分享給大家(知識分享),這樣工作效率不是比較好嗎? 其實沒有任何炫耀之意,但是每個人的解讀不同,沒想到你的反應這麼大,真歹勢! 三、沒貼上程式碼與大家分享真抱歉,當初想法是網站已經討論過了,告訴大家多利用搜尋的方式檢索已經討論過的主題,這樣不是很好嗎? 若問過的問題隔一段時間又出現,這都非你我所願意看見的,所以利用此作檢索的教育訓練不是很好嗎? 凡是往好處想不是很好嗎? 何必生這麼大的氣呢?
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-12-16 15:47:45 IP:61.221.xxx.xxx 未訂閱
各位前輩真是熱情又熱心~~~別為了小弟此問題傷和氣, 大家都是好人,都是為了幫助小弟解決問題,在此感激不盡! 小弟試了好久,發現問題還是一樣, 當報表是用command去create 的時候,並沒有下任何的owner,很單純的SQL語法 ,A,B兩個實際資料庫內容不同,但列印B資料庫的報表時竟然是A資料庫的資料,檢查過ODBC的設定已經改過為B資料庫了,很奇怪,不曉得是不是CR9的Bug,目前還在Crystrl decision 尋找相關問題??
------
ivankuo
hahalin
版主


發表:295
回覆:1698
積分:823
註冊:2002-04-14

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-12-18 11:38:39 IP:61.222.xxx.xxx 未訂閱
To crispin2k 發言失當,得罪之處請多包涵,向您致上最深的歉意, 小弟今後會謹慎言詞的
ivankuo
中階會員


發表:132
回覆:272
積分:95
註冊:2002-11-21

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-12-19 11:48:00 IP:61.221.xxx.xxx 未訂閱
小弟更新了CR9的Service Pack 版本為9.2.3.787,目前還是一樣的問題?? 難道就如crispin2k前輩所說的﹝下SQL指令餵資料的動作也是多此一舉﹞,這是真的嗎??這樣無法改變其SQL耶 小弟採用TCrpeDs來處理的時候,發現其DataSet的屬性只能用在TTable,用其他DataSet則不能使用,不知是我用法錯誤還是.........請前輩們在指導。 var Table1 : TTable; begin Crpe1.ReportName := 'c:\company.rpt'; CrpeDS1.DataSet := Table1; {the field types must be in the correct order} Crpe1.Tables[0].DataPointer := CrpeDS1.DataPointer; Crpe1.Show; end;
------
ivankuo
系統時間:2024-04-30 1:56:18
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!