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

請教程式的錯誤訊息??

答題得分者是:BOSS
lkkplayer
一般會員


發表:26
回覆:59
積分:17
註冊:2006-11-22

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-11-30 17:16:50 IP:210.202.xxx.xxx 未訂閱
請教各位大大,小弟寫了一個小程式
RUN的時候,卻出現下面的錯誤訊息的視窗
Project Sample.exe raised exception class EDatabaseError with message 'Table1: No index currently active'.
Process stopped. Use Step or Run to continue.
這個小程式是讀取test.dbf到ListBox1,然後我點其中一項後,就會呼叫SndForm上面會列出我選的項目的相關資料
另外我寫的這個程序不知道對不對procedure SetClickedData(aSource: TDataSource; aTbl:TTable ; const aName : String);

請各位大大我哪裡出了問題了呢?
以下是我的程式碼
第一個Form
unit MainForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DB, DBTables, Grids, DBGrids;
type
TForm1 = class(TForm)
DataSource1: TDataSource;
Table1: TTable;
ListBox1: TListBox;
Button1: TButton;
Button2: TButton;
procedure FormActivate(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses SndForm;

{$R *.dfm}
procedure TForm1.FormActivate(Sender: TObject);
begin
Table1.DatabaseName := GetCurrentDir;
Table1.TableName := 'TEST.DBF';
Table1.Active := True;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.First;
While not Table1.EOF do
begin
ListBox1.Items.Add(Table1.FieldByName('Name').Text);
Table1.Next;
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
ListBox1.Clear;
end;
procedure TForm1.ListBox1Click(Sender: TObject);
var
aStr : String;
begin
aStr := ListBox1.Items[ListBox1.ItemIndex];
Form2.SetClickedData(DataSource1,Table1,aStr);
Form2.ShowModal;
end;
end.
第二個Form
unit SndForm;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, DBCtrls, DB, DBTables;
type
TForm2 = class(TForm)
Label1: TLabel;
Label2: TLabel;
DBText1: TDBText;
DBText2: TDBText;
aTable: TTable;
aDataSource: TDataSource;
procedure FormActivate(Sender: TObject);
private
{ Private declarations }
aNameStr: String;
public
{ Public declarations }
procedure SetClickedData(aSource: TDataSource; aTbl:TTable ; const aName : String);
end;
var
Form2: TForm2;
implementation
{$R *.dfm}
procedure TForm2.SetClickedData(aSource: TDataSource; aTbl:TTable ; const aName : String);
begin
aDataSource := aSource;
aTable := aTbl;
aNameStr := aName;
end;
procedure TForm2.FormActivate(Sender: TObject);
begin
DBText1.DataSource := aDataSource;
DBText2.DataSource := aDataSource;
if aTable.FindKey([aNameStr]) then
begin
DBText1.DataField := 'NAME';
DBText2.DataField := 'GOOD';
end;
end;
end.
附加檔案:456ea18275e18_test.rar
BOSS
中階會員


發表:70
回覆:79
積分:64
註冊:2006-11-01

發送簡訊給我
#2 引用回覆 回覆 發表時間:2006-12-01 14:50:00 IP:202.154.xxx.xxx 未訂閱
因你的資料表沒建立索引鍵
不然也可以使用locate,if aTable.Locate('NAME',aNameStr,[]) then
lkkplayer
一般會員


發表:26
回覆:59
積分:17
註冊:2006-11-22

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-01 16:02:30 IP:210.202.xxx.xxx 未訂閱
感謝感謝,可以了耶^^
是不是沒幫資料表建立索引鍵
就無法使用搜尋的指令
像SetKey,GoToKey,GoToNearest等等的

===================引 用 文 章===================

因你的資料表沒建立索引鍵
不然也可以使用locate,if aTable.Locate('NAME',aNameStr,[]) then
BOSS
中階會員


發表:70
回覆:79
積分:64
註冊:2006-11-01

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-02 01:01:41 IP:211.76.xxx.xxx 未訂閱
findkey, findnearest
setkey(或editkey) ...gotokey(或gotonearest)
lookup
等都需建立索引欄位
locate則不需要
lkkplayer
一般會員


發表:26
回覆:59
積分:17
註冊:2006-11-22

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-02 09:57:21 IP:218.169.xxx.xxx 未訂閱
謝謝,又學到該注意的事情啦^^
系統時間:2024-05-19 14:20:06
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!