Database 表索引的转储项

Database 表索引的转储项,database,esent,edb,Database,Esent,Edb,我试图在客户EDB数据库的表的主索引中查找。我失败得很惨。我使用JetGetIndexInfo检索了索引信息,并了解了有关索引的所有信息(这是主索引,我知道使用的列)。现在,我想在该索引中查找已知值和现有值,以最大限度地提高性能,但JetSeek声称它找不到我要搜索的键 现在我正在寻找一种转储索引键的方法。这样,我就可以看到我是否应该添加一些东西到我正在使用的键或以某种方式转换它(我绝对肯定它是正确的键)。或者有没有其他方法可以找出问题所在 可能是我失败原因的一个细节可能是MSysObjects

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

现在我正在寻找一种转储索引键的方法。这样,我就可以看到我是否应该添加一些东西到我正在使用的键或以某种方式转换它(我绝对肯定它是正确的键)。或者有没有其他方法可以找出问题所在

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


更新 @劳里奥:我已经设法在数据库上运行了dbutil。以下是相关摘录:


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

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值,可能是一个off by one错误或sizeof()问题。

两个问题:1。JetGetIndexInfo说关键列是什么?2.你怎么称呼JetMakeKey和JetSeek。只有一个键列。这是一个主要的索引。2.我只需首先使用JET_bitmove调用JetSetCurrentIndex2,然后使用已知和现有的键(我从表转储中获得)调用jetmakey,再使用JET_bitNewKey调用JetSeek,最后使用JET_bitSeekGE调用JetSeek。另外一件可能重要的事情是,该列的类型为JET_coltypBinary。我从另一个表中读取条目,并在另一个表的索引中查找以检索soe附加信息。但是我在任何时候都不会改变KeyValue。我刚刚发现的另一件事是JET_索引列表的columnidcKey是0。这是否意味着尽管索引存在,但它不包含键值?如果是真的,这怎么可能?我可以肯定地看到表中的记录是根据特定的索引(或列)排序的。现在我很困惑。关于我之前的评论,当我在自己创建的表上调用JetGetIndexInfo时,columnidcKey和columnidcEntry也得到了0,我知道它包含数百条记录,JetSeek工作正常。非常感谢!我再次调查,你对cbData的看法是正确的。少了一个字节!
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