我有一个TTable,我正在加载CSV文件到这个TTable.有三个领域:Id,Hits路径. 我用另一个查询为这个TTable做了一些查找字段. 我想排序表.我收到消息“功能不受支持”.当我尝试调用AddIndex(‘
我用另一个查询为这个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您之前提到的问题是您使用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的IndexName属性设置为您想要活动的索引:
CDS.IndexName := 'ndxHits';
像使用任何其他数据集一样使用ClientDataSet.使用Locate或FindKey搜索它,使用Insert或Append添加它,过滤它,等等.