On Tue, 21 Apr 2009, Adam Lubszczyk wrote:


> I do not create index - it's not problem.
> If I in ADS make index - all work OK.

I do not think so. This index is not binary compatible with CDX format.
It can be open by ADS and also by Harbour if we remove some index type
validation which now generates RT error.

> I must open existing index (only for read) maked by aplication of VFP.
> Standard Harbour DBFCDX can't open this CDX.

Intentionally. It's not CDX format. Yet another undocumented MS extensions.
Fortunately here it can be easy implemented on all platforms so I can add
support for this extensions to core code.

> ADS open this CDX and work OK except order on field type INTEGER
> ( STR(field_integer) work OK )

And this index uses internally non CDX format. Harbour nicely
detects it and generate RT error. ADS open it because it does
not validate key size but it does not know anything about this
format so index does not work correctly. IMHO Harbour behavior
is correct.
It's also an answer about using CDX indexes with some VFP/MS-Win
only extension in ADS. Looks that it does not work what is
rather expected behavior.
In exactly this case MS hacked format of numbers stored in index
file and it's very easy to guess what they exactly did so I can
add support for such indexes to Harbour to all builds without
any problem because I do not have to touch windows API.
I'll commit it but it will not help you in any way in character
indexes which can be open but they still will not work correctly.
Add to your test code this few lines to see what happens with
character keys in VFP indexes.

   while !eof()
      ? &(ordKey()), ordKeyVal()

For read only mode you can use such indexes with "EN" codepage
because the keys are already in binary format which should be
sorted without any national characters.

> Another problem with ADS is not work with "CODEPAGE" extension

Any indexes with this undocumented VFP extensions will not play well
with different codepages. They are hardcoded to Windows API, Windows
codepages and MS national collating hash function which is not public
and not compatible with Unicode universal collating algorithm.
I do no think that ADS will fully support such indexes but I could be
wrong. Just ask Extended System about it and what they use for non
Windows ADS ports. It can be very interesting information.

My personal advice:
Drop any tools which are not binary compatible with documented standard.
If MS is not able to keep the standards then it's time to migrate from
MS environment to some more professional solutions.

best regards,
Harbour mailing list

Reply via email to