我正在将现有的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脚本来创建一个示例表来重现这个问题。
谢谢!
发布于 2012-12-13 06:58:07
我认为您需要INDEX ON命令的TO子句,以便指定创建索引的目录(而不仅仅是订单的名称)。我没有尝试过,因为我没有Clipper (尽管我可能可以在工作中挖掘出来:-)。
此页面建议可以更改目录:http://www.itlnet.net/programming/program/reference/c53g01c/ngcc94d.html (适用于Clipper5.3)
INDEX ON <expKey> TAG <cOrderName> TO <cOrderBagName>但是,它没有说明在TO子句中实际是如何指定目录的。
This page包含行'INDEX ON ID TO (cFileName)',所以我认为你可以使用INDEX ON blah TAG (cTag) TO ("d:\example\SEBTAG") (也许需要一个文件扩展名)
发布于 2012-12-14 00:35:47
如果我没记错的话,Advantage Clipper Library仅使用数据字典作为AIS (Advantage Internet Server)通信的身份验证机制,但是这些表是在字典之外打开的。
在这种情况下,我不相信Clipper对数据字典中的任何默认设置等有任何了解。
您是在使用裁剪程序,还是在使用支持裁剪语法但生成32位应用程序的其他语言中的一种?
发布于 2012-12-14 05:12:11
感谢您的帮助,但我已经通过删除所有这些调用并将其替换为永久索引来解决(或者更确切地说是绕过了)这个问题。
再次感谢您的投入。
https://stackoverflow.com/questions/13823846
复制相似问题