SET ORDER TO "primarykey" DESCENDINGYes, VFP has not way how to create descending index with ALTER TABLE. But, you can use my a small utility FILE#28060.
#INCLUDE "dbc.h" SET PROCEDURE TO dbc.prg ADDITIVE LOCAL lcAlias,liIDT,loDBC,luValue,liIDI loDBC=CREATEOBJECT("_DBC") lcAlias=SYS(2015) ** REMOVE older info about primary key =loDBC.OpenTable(HOME(2)+"\Tastrade\Data\tastrade.dbc",lcAlias,"EXCLUSIVE") * Get table ID liIDT=loDBC.GetIDObject(lcAlias,_DBC_Table,"products") * Clear property value - primary key =loDBC.ClearProperty(lcAlias,liIDT,_DBCID_PrimaryKey) * delete object for PK liIDI=loDBC.GetIDObject(lcAlias,_DBC_Table,"products.primarykey") DELE NEXT 1 PACK loDBC.CloseTable(lcAlias) ** ADD index AS descending and CANDIDATE =loDBC.OpenTable(HOME(2)+"\Tastrade\Data\tastrade.dbc!products",lcAlias,"EXCLUSIVE") INDEX ON blablalblabla TAG PRIMARYKEY DESCENDING CANDIDATE loDBC.CloseTable(lcAlias) ** ADD new info about primary key =loDBC.OpenTable(HOME(2)+"\Tastrade\Data\tastrade.dbc",lcAlias,"EXCLUSIVE") * Get table ID liIDT=loDBC.GetIDObject(lcAlias,_DBC_Table,"products") * Set property value - primary key =loDBC.SetProperty(lcAlias,liIDT,_DBCID_PrimaryKey,"primarykey") * Set index as primary liIDI=loDBC.GetIDObject(lcAlias,_DBC_Table,"products.primarykey") =loDBC.SetProperty(lcAlias,liIDI,_DBCID_Prim_Cand,.T.) loDBC.CloseTable(lcAlias) RELEASE loDBC RELEASE PROCEDURE dbc.prgMartiJ
lcTable = [Customer] >lctagexpr = "icustomerid" >lctagfilter = "icustomerid > 1000" >lctagname = "customer" >lctagproc = ["MACHINE"] >lctagorder = "DESCENDING" > >index on &lctagexpr for &lctagfilter tag &lctagname ; > collate &lctagproc &lctagorder additive >>
alter table (m.lcTable) add primary key &lctagexpr ; > for &lctagfilter tag &lctagname collate &lctagproc>