0

我正在将现有的 Clipper 代码从免费表转换为数据字典。我可以读写表,但不能创建索引。

这是代码:

connSaisie := DacSession():new(GetSsoConnection(1))
connSaisie:SetDefault()
DbeInfo( COMPONENT_DATA, ADSDBE_RIGHTS_MODE, ADSDBE_CHECKRIGHTS  )
DbeInfo( COMPONENT_DATA, ADSDBE_LOCK_MODE, ADSDBE_PROPRIETARY_LOCKING )
DbeInfo( COMPONENT_DATA , ADSDBE_TBL_MODE, ADSDBE_CDX )
DbeInfo( COMPONENT_ORDER, ADSDBE_TBL_MODE, ADSDBE_CDX )

DBUSEAREA (.F., , "Nomencla", connSaisie, .F., .F.)  
cTag:="SEBTAG"
SELECT Nomencla
Index on Code_nomen + Padl(Alltrim(Nom_champ1), 5, "0") +;
Padl(Alltrim(Nom_champ2), 4, "0") +;
Padl(Alltrim(Nom_champ3), 3, "0") TAG (cTag)

Set Order to TAG (cTag)

(GetSsoConnection(1))语法负责检索正确的连接字符串。

问题是索引已创建但在可执行目录中,而不是为数据字典定义的数据库或临时文件夹中。

我期待任何帮助或指示,并且非常愿意提供一个 sql 脚本来创建一个示例表来重现该问题。

谢谢 !

4

3 回答 3

2

我认为您需要命令的TO子句,INDEX ON以指定创建索引的目录(而不仅仅是命令的名称)。我没有尝试过,因为我没有 Clipper(尽管我可能能够在工作中挖掘它:-))。

此页面建议可以更改目录: http ://www.itlnet.net/programming/program/reference/c53g01c/ngcc94d.html (适用于 Clipper 5.3)

INDEX ON <expKey> TAG <cOrderName> TO <cOrderBagName>

但是,它并没有说明您如何在TO子句中实际指定目录。

此页面包含“INDEX ON ID TO (cFileName)”行,所以我认为您可以这样做INDEX ON blah TAG (cTag) TO ("d:\example\SEBTAG")(也许需要文件扩展名)

于 2012-12-12T22:58:07.253 回答
2

如果我没记错的话,Advantage Clipper 库仅使用数据字典作为 AIS(Advantage Internet Server)通信的身份验证机制,但是表是在字典之外打开的。

在这种情况下,我不相信 Clipper 对数据字典中的任何默认设置等有任何了解。

您是在使用 Clipper,还是在使用支持 Clipper 语法但生成 32 位应用程序的众多其他语言中的一种?

于 2012-12-13T16:35:46.710 回答
0

感谢您的帮助,但我已经通过删除所有这些调用并用永久索引替换它们来解决(或者更确切地说是规避)了这个问题。

再次感谢您的意见。

于 2012-12-13T21:12:10.520 回答