我试图在客户EDB数据库的表的主索引中寻找。我悲惨地失败了。我使用 JetGetIndexInfo 检索索引信息并了解索引的所有内容(它是主索引,我知道使用的列)。现在我想在已知和现有值的索引上寻找以最大化性能,但 JetSeek 声称它找不到我想要搜索的密钥。
现在我正在寻找一种转储索引键的方法。这样我就可以看到我是否应该在我正在使用的键上添加一些东西或以某种方式转换它(我绝对相信它是正确的键)。还是有另一种技巧可以找到出错的地方吗?
可能导致我失败的一个细节可能是 MSysObjects 表中的 KeyFldIDs 列中的条目。特定索引在那里有一些条目。如果我自己创建索引,那么该字段通常是空白的。它做了什么?
UPDATE
@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
答案 0 :(得分: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()问题。