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

indexFieldNames

答題得分者是:P.D.
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-02-11 10:39:24 IP:140.125.xxx.xxx 訂閱
--------------------------------------------------------------------------------------------------
private
{ Private declarations }
procedure setindex; //自訂的程序

(下面是新增兩個Radiobutton 分別改成 indexcustno 和 indexcompany)

procedure TForm1.indexcustnoClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure TForm1.indexcompanyClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure tform1.setindex;
begin
//只有Table1的State是在瀏覽模式時, 我們才允許變更索引
if Table1.State <> dsBrowse then
Exit;
if IndexCustNo.Checked then
//以客戶編號做索引
Table1.IndexFieldNames := 'CustNo';
if IndexCompany.Checked then
//以客戶名稱做索引
Table1.IndexFieldNames := 'Company';
--------------------------------------------------------------------------------------------
以上 我是照著書本作的
書本是套用DBDEMOS內建的資料庫customer.db

欄位 custno 型態N 索引*
欄位 company 型態A 30

我用我寫的程式 套用DBDEMOS的CUSTOMER.DB就可以
但一換上自己創建的TABLE 卻不行
欄位型態 及大小 都和 DBDEMOS的customer.db一樣
但還是發生錯誤

"project project1.exe raised exeption class EDatabaseError with message 'Table1:No index for fields 'company '' . process stopped.
use step or run to continue "

請問是哪裡沒弄好呢?
frappe
中階會員


發表:88
回覆:114
積分:95
註冊:2008-10-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-02-11 10:48:21 IP:115.83.xxx.xxx 訂閱
IndexFieldNames並不是真的將資料庫的索引更改,
而是設定程式要使用資料庫哪個索引欄位

因為一張表可能有多個索引,而IndexFieldNames設定索引後,資料顯示會跟著索引排序

你的資料庫company欄位沒設索引當然會出錯^^

===================引 用 g9614721 文 章===================
--------------------------------------------------------------------------------------------------
private
{ Private declarations }
procedure setindex; //自訂的程序

(下面是新增兩個Radiobutton 分別改成 indexcustno 和 indexcompany)

procedure TForm1.indexcustnoClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure TForm1.indexcompanyClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure tform1.setindex;
begin
//只有Table1的State是在瀏覽模式時, 我們才允許變更索引
if Table1.State <> dsBrowse then
Exit;
if IndexCustNo.Checked then
//以客戶編號做索引
Table1.IndexFieldNames := 'CustNo';
if IndexCompany.Checked then
//以客戶名稱做索引
Table1.IndexFieldNames := 'Company';
--------------------------------------------------------------------------------------------
以上 我是照著書本作的
書本是套用DBDEMOS內建的資料庫customer.db

欄位 custno 型態N 索引*
欄位 company 型態A 30

我用我寫的程式 套用DBDEMOS的CUSTOMER.DB就可以
但一換上自己創建的TABLE 卻不行
欄位型態 及大小 都和 DBDEMOS的customer.db一樣
但還是發生錯誤

"project project1.exe raised exeption class EDatabaseError with message 'Table1:No index for fields 'company '' . process stopped.
use step or run to continue "

請問是哪裡沒弄好呢?
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-02-11 19:40:08 IP:61.67.xxx.xxx 未訂閱
你這裡有兩個INDEX, 其中一個應該為 PRIMARY INDEX, 另一個為 SECONDARY INDEX, 使用書上的有建立實質索引檔出來, 你自己開的資料庫有建立出這兩個索引檔, 如果有建立, DB的架構應該可以看到 XXXX.XG0, XXXX.YG0, XXXX.XG1, XXXXX.YG1 之類的索引檔
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-02-12 18:06:24 IP:140.125.xxx.xxx 訂閱
可是我看DBDEMOS的CUSTOMER.DB 
他索引只有custno
company 並沒有索引!
另外我也試過
將company也設定索引
還是不行= =||



===================引 用 frappe 文 章===================
IndexFieldNames並不是真的將資料庫的索引更改,
而是設定程式要使用資料庫哪個索引欄位

因為一張表可能有多個索引,而IndexFieldNames設定索引後,資料顯示會跟著索引排序

你的資料庫company欄位沒設索引當然會出錯^^

===================引 用 g9614721 文 章===================
--------------------------------------------------------------------------------------------------
private
{ Private declarations }
procedure setindex; //自訂的程序

(下面是新增兩個Radiobutton 分別改成 indexcustno 和 indexcompany)

procedure TForm1.indexcustnoClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure TForm1.indexcompanyClick(Sender: TObject);
begin
//變更索引
setindex;
end;
procedure tform1.setindex;
begin
//只有Table1的State是在瀏覽模式時, 我們才允許變更索引
if Table1.State <> dsBrowse then
Exit;
if IndexCustNo.Checked then
//以客戶編號做索引
Table1.IndexFieldNames := 'CustNo';
if IndexCompany.Checked then
//以客戶名稱做索引
Table1.IndexFieldNames := 'Company';
--------------------------------------------------------------------------------------------
以上 我是照著書本作的
書本是套用DBDEMOS內建的資料庫customer.db

欄位 custno 型態N 索引*
欄位 company 型態A 30

我用我寫的程式 套用DBDEMOS的CUSTOMER.DB就可以
但一換上自己創建的TABLE 卻不行
欄位型態 及大小 都和 DBDEMOS的customer.db一樣
但還是發生錯誤

"project project1.exe raised exeption class EDatabaseError with message 'Table1:No index for fields 'company '' . process stopped.
use step or run to continue "

請問是哪裡沒弄好呢?
編輯記錄
g9614721 重新編輯於 2009-02-12 18:14:00, 註解 無‧
g9614721
一般會員


發表:27
回覆:51
積分:15
註冊:2008-07-23

發送簡訊給我
#5 引用回覆 回覆 發表時間:2009-02-12 18:08:18 IP:140.125.xxx.xxx 訂閱
我有看到書中提到 customer.db 的primary key 是 Custno

請問如何設定 primary key & secondary key 呢?


===================引 用 P.D. 文 章===================
你這裡有兩個INDEX, 其中一個應該為 PRIMARY INDEX, 另一個為 SECONDARY INDEX, 使用書上的有建立實質索引檔出來, 你自己開的資料庫有建立出這兩個索引檔, 如果有建立, DB的架構應該可以看到 XXXX.XG0, XXXX.YG0, XXXX.XG1, XXXXX.YG1 之類的索引檔
編輯記錄
g9614721 重新編輯於 2009-02-12 19:17:30, 註解 無‧
系統時間:2024-05-15 8:36:26
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!