請問paradox的資料庫是否有大小或筆數限制 |
答題得分者是:kevin2004
|
utopia
一般會員 發表:12 回覆:10 積分:4 註冊:2006-08-15 發送簡訊給我 |
手邊有一個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 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
|
utopia
一般會員 發表:12 回覆:10 積分:4 註冊:2006-08-15 發送簡訊給我 |
|
kevin2004
資深會員 發表:18 回覆:463 積分:416 註冊:2005-05-29 發送簡訊給我 |
不是索引壞了,是這個*.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 發送簡訊給我 |
還有其他的資訊可以一併參考。
修護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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |