0

我试图在客户 EDB 数据库上的表的主索引中寻找。我失败得很惨。我使用JetGetIndexInfo检索了索引信息,并且了解索引的所有信息(它是主索引,我知道所使用的列)。现在我想在该索引上寻找已知值和现有值以最大化性能,但JetSeek声称它找不到我想要搜索的键。

现在我正在寻找一种方法来转储索引键。这样我就可以查看是否应该在我正在使用的密钥中添加一些内容或以某种方式对其进行转换(我绝对确定它是正确的密钥)。还是有其他技巧可以找出问题所在?

可能是我失败原因的一个细节可能是MSysObjects表中KeyFldIDs列中的条目。特定的索引在那里有一些条目。如果我自己创建索引,该字段通常为空白。它有什么作用?


更新@Laurion:我已经设法在数据库上运行dbutil。这是相关的摘录:

AdditionalData
AttId
    Coltyp:     Binary
    Columnid:   2.147.483.777
    Max length: 8
    Grbit:      None
MsgFolderIndex6
    Grbit:          IndexUnique, IndexPrimary
    CultureInfo:    en-US
    CompareOptions: IgnoreCase, IgnoreKanaType, IgnoreWidth
        AttId
            Coltyp:      Binary
            IsAscending: True
            IsASCII:     False
4

1 回答 1

1

对于该索引,此调用序列应该有效:

JetOpenTable(...)
JetMakeKey(sesid, tableid, pvData, cbData, JET_bitNewKey);
JetSeek(sesid, tableid, JET_bitSeekEQ);

如果你想转储索引键,你可以这样做:

JetOpenTable(...);
Use JetGetTableColumnInfo to get the ID of the column called "AttId"
Use JetMove to walk the table sequentially, retrieving and dumping the column values

最可能的错误是您在创建密钥时传入了不正确的 cbData 值,可能是非一错误或 sizeof() 问题。

于 2011-07-20T20:03:55.860 回答