我有一个TTable,我正在将CSV文件加载到此TTable。有三个领域:Id,Hits&路径。 我用另一个查询为这个TTable做了一些查找字段。
我想对表格进行排序。我收到消息“功能不受支持”。当我尝试拨打AddIndex('ndxHits','HITS',[]);
这是我的代码:
with DM.TblCVResults do
begin
try
Active := False;
TableName := 'C:\CSV\123.txt';
Active := True;
AddIndex('ndxHits','HITS',[]);
AddIndex('ndxCandidate','LkCandidate',[]);
AddIndex('ndxLastCV','LkLastCV',[]);
AddIndex('ndxPostCode','LkPostCode',[]);
IndexDefs.Update;
Active := True;
DM.TblCVResults.IndexName := 'ndxHits';
except
on E: Exception do
MsgError(E.Message);
end;
end
答案 0 :(得分:7)
您之前的问题提到您使用ttASCII
作为TableType
。 ttASCII
表,AFAIK,不支持索引。
最好的办法是将ttASCII TTable
内容加载到支持索引的TClientDataset(CDS)中。我没有使用ttASCII表作为源测试,但它应该如下:
将TDatasetProvider
组件添加到您的应用程序中。将DataSet
属性设置为TTable
。
将TClientDataSet
组件添加到您的应用程序中。将ProviderName
设置为您在上面添加的DataSetProvider
。 (我在下面的步骤中将其命名为CDS。)
按此顺序打开Table
和ClientDataSet
(CDS)。
Table1.Active := True;
CDS.Active := True;
如果您不需要,请关闭TTable
的更新。 (它快得多。)
CDS.LogChanges := False;
运行以下代码以创建索引:
// Repeat for each additional index
with CDS.IndexDefs.AddIndexDef do
begin
Name := 'ndxHits';
Fields := 'Hits';
Options := [];
end;
将ClientDataSet's
IndexName
属性设置为您想要激活的索引:
CDS.IndexName := 'ndxHits';
像使用任何其他数据集一样使用ClientDataSet
。使用Locate
或FindKey
进行搜索,使用Insert
或Append
添加,过滤,依此类推。