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

從INTERBASE 中取數死機(沒回映)

尚未結案
SY_Huang
一般會員


發表:17
回覆:31
積分:9
註冊:2003-10-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-12-07 11:16:55 IP:202.64.xxx.xxx 未訂閱
各位大大:SQl語句如下: select Att_date,staff_code,L1_Code,L2_Code,L3_Code,L4_Code,Given_Name,DESCRIPTION2,act_abs_integer, Rec_Mt_start,Rec_Mt_End,Rec_T1_Start,Rec_T1_End,Rec_T2_Start,Rec_T2_end, Act_Mt_start,Act_Mt_End,Act_T1_Start,Act_T1_End,Act_T2_Start,Act_T2_end, IRR_MT_START,IRR_MT_END,IRR_T1_Start,IRR_T1_END,IRR_T2_Start,IRR_T2_END, Act_OT1_integer,Act_OT2_integer from Em_mast,ta_job,em_att_data where em_att_data.staff_code=em_mast.staff_code and ta_job.job_code=em_mast.job_code and em_att_data.Att_date >='2004/11/04' and att_date<='2004/11/04' order by staff_code' 數據大概5000-6000 用Tquery 控件做的﹐是不是Interbase 不支持如此大的查詢》 有沒有更好的方法...........HELP.....HElp......
SY_Huang
一般會員


發表:17
回覆:31
積分:9
註冊:2003-10-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-12-07 11:45:56 IP:202.64.xxx.xxx 未訂閱
Interbase 為6.5﹐是不是不支持大量數據的跨表取數呢?
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-12-07 11:46:54 IP:202.62.xxx.xxx 未訂閱
您好﹗    SQL敘述部分有些問題 staff_code和job_code此兩個欄位是用于關聯資料庫之作用﹐job_code在查詢的回傳部分(Select ...省略點的位置)沒有出現﹐故無關緊要﹐但staff_code在查詢的回傳部分有出現(Select Att_date, staff_code...)中有出現﹐既然是關聯欄位﹐其它的某個資料表中一定也有此欄位﹐故在Select時﹐資料庫不知要回傳哪個資料表的staff_code﹒記住這里有一個原則﹐在多資料表的關聯查詢中﹐如果查詢的欄位分別是各個資料表獨有的﹐在欄位名稱前就可不必加上資料表名﹐如果查詢的欄位在超過一個資料表中具有﹐就需要在欄位名稱前加上資料表名稱﹐根据這個原則修改您的欄位名稱部分﹐應該就可以了﹒所以應將您的SQL改成如下﹕ select Att_date,em_att_data.staff_code,L1_Code, L2_Code,L3_Code,L4_Code,Given_Name,DESCRIPTION2, act_abs_integer,Rec_Mt_start,Rec_Mt_End,Rec_T1_Start,Rec_T1_End, Rec_T2_Start,Rec_T2_end,Act_Mt_start,Act_Mt_End,Act_T1_Start,Act_T1_En d,Act_T2_Start,Act_T2_end,IRR_MT_START,IRR_MT_END,IRR_T1_Start,IRR_T1_ END,IRR_T2_Start,IRR_T2_END, Act_OT1_integer,Act_OT2_integer from Em_mast,ta_job,em_att_data where em_att_data.staff_code= em_mast.staff_code and ta_job.job_code=em_mast.job_code and em_att_data.Att_date>='2004/11/04' and att_date<='2004/11/04' order by em_att_data.staff_code 當然﹐其中可能還有一些欄位是超過一個資料表中具有的﹐故請您自己再做一個檢查﹐找出有此問題的欄位名稱﹐在其之前加上資料表名稱﹐建議您使用資料表別名的方法在每個欄位名稱前皆加上資料表別名﹐有利用查看﹒ 另外還有一個問題﹐就是效率方面的﹐一般來講﹐我們在做SQL查詢時﹐資料表之間的關聯欄位敘述我們都會放在SQL語句中Where語句的最后面﹐就您的例子來講﹐先做Where 欄位關聯會查詢出很多資料﹐再做Where 欄位值>=條件來查詢符合條件的資料一定會比先做Where 欄位值>=條件來查詢符合條件的資料﹐再做Where 欄位關聯的效率慢了很多﹐所以再把您的SQL改善如下﹕ select Att_date,em_att_data.staff_code,L1_Code, L2_Code,L3_Code,L4_Code,Given_Name,DESCRIPTION2, act_abs_integer,Rec_Mt_start,Rec_Mt_End,Rec_T1_Start,Rec_T1_End, Rec_T2_Start,Rec_T2_end,Act_Mt_start,Act_Mt_End,Act_T1_Start,Act_T1_En d,Act_T2_Start,Act_T2_end,IRR_MT_START,IRR_MT_END,IRR_T1_Start,IRR_T1_ END,IRR_T2_Start,IRR_T2_END, Act_OT1_integer,Act_OT2_integer from Em_mast,ta_job,em_att_data where em_att_data.Att_date>='2004/11/04' and att_date<='2004/11/04' and em_att_data.staff_code= em_mast.staff_code and ta_job.job_code=em_mast.job_code order by em_att_data.staff_code 參考看看﹗ ========================= 我是您的朋友﹐有您真好﹗ =========================
------
忻晟
hahalin
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-12-07 11:48:36 IP:218.174.xxx.xxx 未訂閱
建個view會不會改善一點 或是join的key設index呢
SY_Huang
一般會員


發表:17
回覆:31
積分:9
註冊:2003-10-24

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-12-07 16:08:25 IP:202.64.xxx.xxx 未訂閱
1.按cashxin2002兄 做了﹐但是還是很慢(在任務管理中查看 其執行沒有回應). 2.按hahalin 做了﹐有效果.但是我如何知道一個RecordCount 呢?進度條必須知道記錄總數. 程序執行到 如: .... ProgressBar1.Max:= trec.recordcount ; trec.close ; ... 時死機﹐程序沒有回應。。。等了一個小時還是沒有回應. 另: 我的Data.gdb 為 855M .此Tquery大概取到5000-6000 數據.是不是 Interbase 數據庫不支持大量數據操作.(經測試在137M,以前的備份資料庫上 代碼完全可以順利執行). HElp.............HElp.............HElp............. 各位大大﹐是否有一個工具可以隊Interbase 資料庫瘦身呢?? 謝謝!!!
hahalin
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-12-07 16:16:33 IP:218.174.xxx.xxx 未訂閱
>> .... >> ProgressBar1.Max:= trec.recordcount ; >> trec.close ; ???? trec.clsoe... ??? 要不要附上程式碼來看看
chinyu
高階會員


發表:12
回覆:157
積分:153
註冊:2002-06-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-12-07 18:50:55 IP:61.223.xxx.xxx 未訂閱
引言: 1.按cashxin2002兄 做了﹐但是還是很慢(在任務管理中查看 其執行沒有回應). 2.按hahalin 做了﹐有效果.但是我如何知道一個RecordCount 呢?進度條必須知道記錄總數. 程序執行到 如: .... ProgressBar1.Max:= trec.recordcount ; trec.close ; ... 時死機﹐程序沒有回應。。。等了一個小時還是沒有回應. 另: 我的Data.gdb 為 855M .此Tquery大概取到5000-6000 數據.是不是 Interbase 數據庫不支持大量數據操作.(經測試在137M,以前的備份資料庫上 代碼完全可以順利執行). HElp.............HElp.............HElp............. 各位大大﹐是否有一個工具可以隊Interbase 資料庫瘦身呢?? 謝謝!!!
我用firebird時遇到客戶用了2年多的資料庫,在做某個查詢時變慢了(本來5秒內變為30秒),也查不出來原因,後來把資料庫backup再restore後就正常了,給你參考看看。
SY_Huang
一般會員


發表:17
回覆:31
積分:9
註冊:2003-10-24

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-12-08 10:05:06 IP:202.64.xxx.xxx 未訂閱
但怎樣進行Backup/Restore ?能不能給出相關詳細資料/ 操作說明.非常感謝!!
chinyu
高階會員


發表:12
回覆:157
積分:153
註冊:2002-06-14

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-12-08 10:42:18 IP:61.223.xxx.xxx 未訂閱
引言: 但怎樣進行Backup/Restore ?能不能給出相關詳細資料/ 操作說明.非常感謝!!
我是使用IB Expert Person Edition 這個免費版本,在選單 Tools 中有Backup Database 與 Restore Database 兩項目,請自行研究。 http://www.hksoftware.net/download/
Miles
尊榮會員


發表:27
回覆:662
積分:622
註冊:2002-07-12

發送簡訊給我
#10 引用回覆 回覆 發表時間:2004-12-08 22:11:34 IP:220.135.xxx.xxx 未訂閱
Hi SY_Huang 你好: Backup : 使用IBConsole, 先將資料庫打開, 在資料庫上按滑鼠右鍵-->Backup/Restore-->Backup-->Garbage Collection 設為False-->Alias隨便取個名稱-->左下Grid FileName先隨便給個檔名例如: C:\abc.gdb-->點選OK Backup 完成 Restore : 將外層Backup展開, 選到你剛剛Alias填的名稱-->OverWrite設為True-->點選OK 這動作有一點修復的能力, 並且將多於保留空間清除, 資料庫會變的比較小, 效率小小增加, 建議你先將Table的Index設定看看, 將SQL貼到IBConsole點選Prepare....像一頁筆記的圖案, 看看資料是否都是Plan還是有用到Index. 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
系統時間:2024-09-17 8:07:40
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!