我使用 delphi7 和 MS Access。
當我嘗試在表欄位 IndexName 中放置索引時,我收到以下訊息:
當前提供程式不支持索引功能所需的介面
連接字串:
rovider=Microsoft.Jet.OLEDB.4.0;Password="";User ID=Admin;Data Source=D:\Informatique\Programmes personnels\MyDataBase.mdb;Mode=Share Deny None;Extended Properties="";Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=0;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False
我使用 ADO 快遞。
我只是希望對 DBGrid 中的資料進行排序。當我在 OnTitleClick 事件中使用 sort 函式單擊網格標題時,我將其排序
Table.Field.sort:='MySortedField ASC';
但是我希望在打開表單時對其進行排序。
看來我不能使用我的 MS Access 資料庫的創建索引。我是否遺漏了某些東西,或者 MS Access 索引無法與 delphi 7 一起使用?
uj5u.com熱心網友回復:
以下D7專案支持按列排序,不會遇到
當前提供程式不支持索引功能所需的介面
你報告的問題。請注意,我僅在包含專門字符型別欄位的 Access 表上對其進行了測驗,例如 Char(20)
創建一個新的 D7 專案,其中包含:
配置為連接到 Access 資料庫的 TAdoConnection
使用 TAdoConnection 的 TAdoTable 和 TAdoCommand
一個 TDataSource 和 TDBGrid 來顯示 TAdoTable 的內容
添加如下所示的 FormCreate、FormClose 和 DBGrid1TitleClick 事件處理程式以及 DropTable 方法。
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
AdoTable1.IndexFieldNames := Column.FieldName;
end;
procedure TForm1.DropTable;
begin
try
AdoCommand1.CommandText := 'Drop Table ATest;';
AdoCommand1.Execute;
except
end;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
if AdoTable1.Active then
AdoTable1.Close;
DropTable;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
// the following is just to ensure that AdoTable1 is closed
// before we attempt to recreate and populate the table
if AdoTable1.Active then
AdoTable1.Close;
try
AdoCommand1.CommandText := 'Drop table ATest;';
AdoCommand1.Execute;
except
end;
try
AdoCommand1.CommandText := 'CREATE TABLE ATest( F1 Char(20) NOT NULL, F2 Char(20) NOT NULL, F3 Char(20) NOT NULL);';
AdoCommand1.Execute;
except
end;
AdoTable1.Open;
AdoTable1.InsertRecord(['Row1F1', 'A', 'B']);
AdoTable1.InsertRecord(['Row3F1', 'B', 'A']);
AdoTable1.InsertRecord(['Row2F1', 'C', 'C']);
end;
在除錯器選項中將“Stop on Language Exceptions”標志設定為 false,然后編譯并運行專案。它洗掉并重新創建 ATest 表,并將其流行為三行。當您單擊三個列標題之一時,它會根據單擊的列對資料進行排序。注意中的代碼
procedure TForm1.DBGrid1TitleClick(Column: TColumn);
begin
AdoTable1.IndexFieldNames := Column.FieldName;
end;
這會忽略列標題中的實際文本,因為它可能與欄位名稱不同,而是使用單擊的列的 FieldName 屬性。
這個示例專案避免了使用自定義 Order By 子句關閉和重新打開表的必要性,正如我之前的評論之一(自洗掉后)所建議的那樣。
如上所述,我僅針對僅包含字符型別欄位的 Access 表測驗了代碼,您將需要針對您希望支持的任何其他列型別測驗代碼。顯然,避免嘗試按列排序實際上不起作用的列型別對網格進行排序是微不足道的。
uj5u.com熱心網友回復:
至少我使用 ADOCommand 并根據代碼構建一個表,如果訪問權限不可用,該表會很有用。我想要的是打開表格,按照我的意愿對冒號進行排序。看了你的例子后,我記得在我的商店軟體中,我確實解決了這個問題。看完之后,我看到了我在 20j 前所做的
在 FormActivate 我有這個代碼,現在當我打開表單時,冒號按照我的意愿很好地排序。
ADOTable.Sort:=DBGrid6.Columns[3].FieldName;
DBGrid6.Columns[3].Title.Color:=clYellow;
案例結束了,我學到了更多東西。謝謝,祝你一周愉快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/351738.html
下一篇:繪制兩組資料時不顯示所有散點
