Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Index
Message
From
14/03/2007 12:52:18
 
 
To
14/03/2007 11:43:00
Hilmar Zonneveld
Independent Consultant
Cochabamba, Bolivia
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Title:
Re: Index
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP SP2
Network:
Windows XP
Database:
Visual FoxPro
Miscellaneous
Thread ID:
01203424
Message ID:
01203531
Views:
15
>>>I have an index on a date field that looks like thie: dtoc(< date >).
>>>I have a view which I use in a form that is used to add/update that table.
>>>
>>>When I call the tableupdate I get the following message.
>>>Error building key for index "< cdx file >" tag "< tag name >".
>>>
>>>Is there a setting or a work around for this problem?
>>
>>
>>I found it.
>>
>>"DTOC(dExpression | tExpression [, 1])
>>
>>1
>>Returns the date in a format suitable for indexing. This is particularly useful for maintaining the table records in chronological sequence.
>>
>>For example, to order table records in entry sequence, you could issue this command:
>>
>>INDEX ON DTOC(gdInvDate, 1) + gnInvTime TAG Timeindx"
>>
>>This resolved the issue.
>
>Or, a little simpler, dtos(gdInvDate) + gnInvTime.
>
>The problem is that dtoc() (without the second parameter) might give you different values on different runs, so it is not at all suitable for indexing. About as bad as having a variable-length index expression.

For me, the real reason not to use DTOC() is that it isn't accurate for sorting when multiple years are involved.

As a practical matter, unless you are writing an international application, SET DATE won't change so you don't have to worry about getting different values on different runs. That also wouldn't lead to the problem when building the key. You'ld simply get a wrong result rather than an error.

My guess is that the error happened because SET CENTURY changed between the time the index was built and the record was added. DTOC() now returns a different length value and the index can't accept it.
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform