当前位置 : 主页 > 编程语言 > delphi >

delphi – 如何在TTable中对CSV文件进行排序?

来源:互联网 收集:自由互联 发布时间:2021-06-23
我有一个TTable,我正在加载CSV文件到这个TTable.有三个领域:Id,Hits路径. 我用另一个查询为这个TTable做了一些查找字段. 我想排序表.我收到消息“功能不受支持”.当我尝试调用AddIndex(‘
我有一个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
您之前提到的问题是您使用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添加它,过滤它,等等.

网友评论