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

請問paradox的資料庫是否有大小或筆數限制

答題得分者是:kevin2004
utopia
一般會員


發表:12
回覆:10
積分:4
註冊:2006-08-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-08-07 11:16:38 IP:59.105.xxx.xxx 訂閱
手邊有一個200多mb的paradox .db的file,
裡面筆數約有36萬多筆,當我用delphi的desktop...tool打開db瀏灠時,
若按向上鍵一筆筆看很正常,
若用pageup/pagedown 按快點,就會出現"corrupt file-other than header"
而ap在run時,有時也會無法新增資料到該db而自動關閉程式。
請問
1.paradox的資料庫是否有大小或筆數限制?
2.把36萬多筆砍掉一些有用嗎?
3.砍掉部份資料要注意什麼嗎?
4.有快速的砍資料方法嗎?

謝謝各位大大!
wameng
版主


發表:31
回覆:1336
積分:1188
註冊:2004-09-16

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-08-07 11:57:42 IP:61.222.xxx.xxx 訂閱
出現那樣的錯誤訊息表示,索引已損壞!!需重建索引。

沒有限制。在BDE 需設置足夠的 XXX 忘記了 BufferSize 吧。
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-08-08 10:52:57 IP:61.219.xxx.xxx 訂閱
你的問題純是Paradox的老問題,就是它壞了。只要如版大講的,修一修就好了。

工具很多,在站裏找找吧,馬上就可以解決。
------
Kevin
編輯記錄
kevin2004 重新編輯於 2007-08-08 10:54:18, 註解 無‧
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-08-08 10:59:34 IP:61.219.xxx.xxx 訂閱
1.paradox的資料庫是否有大小或筆數限制?
==>雖說Paradox是被棄的孤兒,也別小看它的本事,幾十萬筆在
它來說,木是難事吧。
2.把36萬多筆砍掉一些有用嗎?
==>沒必要吧。
3.砍掉部份資料要注意什麼嗎?
==>這可多了,比如說ForeignKey等
4.有快速的砍資料方法嗎?
==>用SQL就可以了,不過你要先將壞的Paradox先救回來
------
Kevin
編輯記錄
kevin2004 重新編輯於 2007-08-08 11:00:04, 註解 無‧
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-08-08 11:02:08 IP:61.219.xxx.xxx 訂閱
給你個良心的建議,放棄Paradox吧。連Borland都棄其而去了,你何必單戀一支花。
------
Kevin
utopia
一般會員


發表:12
回覆:10
積分:4
註冊:2006-08-15

發送簡訊給我
#6 引用回覆 回覆 發表時間:2007-08-09 11:57:22 IP:211.75.xxx.xxx 訂閱

再請問:
1.重建索引,是指用像borland TUtility工具作rebuild嗎?
2.那重建出來的索引檔是不是就是*.XG0,*.XG1.....*.YG0,*.YG1.....
3.但我作完rebuild仍有這種現象耶!
4.還有一位大大說檔案壞了,是指索引檔壞了對嗎?

感謝!
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#7 引用回覆 回覆 發表時間:2007-08-09 18:21:40 IP:61.219.xxx.xxx 訂閱
不是索引壞了,是這個*.db壞了。修這個表就好了。
Paradox有很多個表,而可能只是某個表壞了。不像Access是整個MDB完蛋。
當然,只是單一*.db檔壞了而非整個MDB壞了,這個的問題會比較嚴重。因為通常發現時,可能已沒時間處理了。

剛才找了老半天,找到N年以前寫的程式片段給你參考。

Function BdeDB_PackThisParadoxTableOK ( ThisDataBaseName ,
ThisTableName : string ) : Boolean ;
stdcall ;
var
NewTable : TTable ;
begin
NewTable := TTable.Create ( Application ) ;
try
try
Result := False ;
with NewTable do
begin
Active := False ;
DataBaseName := ThisDataBaseName ;
TableName := ThisTableName ;
TableType := ttParadox ;
Exclusive := True ;
end ;
NewTable.Open ;
Result := BdeDB_PackParadoxTableOK ( NewTable ) ;
NewTable.Close ;
finally
NewTable.Free ;
end ;
except
Result := False ;
end ;
end ;

Function BdeDB_PackParadoxTableOK ( Table: TTable) : Boolean ;
stdcall ;
var
Props: CURProps;
hDb: hDBIDb;
TableDesc: CRTblDesc;
begin
try
Result := False ;
// Make sure the table is open exclusively so we can get the db handle...
if not Table.Active then
begin
Beep ;
ShowMessage ( '通知閣下:待重整檔只能對已開啟檔運作,此檔未開啟。' cEnter cEnter
'此檔﹝' Table.TableName '﹞重整作業取消。' );
exit ;
end ;
if not Table.Exclusive then
begin
Beep ;
ShowMessage ( '通知閣下:待重整檔只能對以獨佔模式開起檔案運作。' cEnter cEnter
'此檔﹝' Table.TableName '﹞重整作業取消。' );
exit ;
end ;

// Get the Table properties to determine table type...
Check(DbiGetCursorProps( Table.Handle, Props));

// If the Table is a Paradox table, you must call DbiDoRestructure...
if (Props.szTableType = szPARADOX) then
begin
// Blank out the structure...
FillChar(TableDesc, sizeof(TableDesc), 0);
// Get the database handle from the table's cursor handle...

Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));
// Put the table name in the table descriptor...
StrPCopy(TableDesc.szTblName, Table.TableName);
// Put the table type in the table descriptor...
StrPCopy(TableDesc.szTblType, Props.szTableType);
// Set the Pack option in the table descriptor to TRUE...
TableDesc.bPack := True;
// Close the table so the restructure can complete...
Table.Close;
// Call DbiDoRestructure...

Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));
end
else
begin
// If the table is a dBASE table, simply call DbiPackTable...
if (Props.szTableType = szDBASE) then
Check(DbiPackTable(Table.DBHandle, Table.Handle, nil, szDBASE, True))
else
begin
Beep ;
ShowMessage ( '通知閣下:非 Paradox 或 dBase 檔,重整作業取消。' cEnter cEnter
'此檔﹝' Table.TableName '﹞重整作業取消。' );
exit ;
end ;
end ;
Table.Close ;
Result := True ;
except
Result := False ;
end ;
end;

------
Kevin
kevin2004
資深會員


發表:18
回覆:463
積分:416
註冊:2005-05-29

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-08-09 18:58:10 IP:61.219.xxx.xxx 訂閱
還有其他的資訊可以一併參考。

修護paradox資料庫的工具範例程式
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=18019

可以下載pdxrbld.zip 資料庫修復工具試試看!這個網站上就有了!
http://delphi.ktop.com.tw/topic.php?TOPIC_ID=16840

參考這篇http://delphi.ktop.com.tw/board.php?cid=30&fid=66&tid=27539

------
Kevin
編輯記錄
kevin2004 重新編輯於 2007-08-09 18:59:32, 註解 無‧
rachex2000
一般會員


發表:21
回覆:32
積分:20
註冊:2003-04-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2008-04-11 14:21:47 IP:203.66.xxx.xxx 訂閱
我試過似乎128MB時會有問題
系統時間:2024-11-23 11:44:20
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!