Un detalle, no uses double precision, usa NUMERIC(10,2) para campos monetarios en Dialecto 3, o tendrás problemas de redondeos y verás que guarda valores que no se corresponden con los introducidos.
Me ha extrañado que al ser un campo indexado, añadas la restricción NOT NULL, eso más bien sería si el campo es obligatorio (Required) ¿no?. Bueno, quizás tú lo necesites así.
Por lo demás me parece fantastico el código.
Si se puede aportar algo... así puedes saber cual es la clave primaria y crear los índices.
Código Delphi
[-]
with Table1.IndexDefs[i] do
begin
if ixPrimary in Options then
Opc:= Opc + 'ixPrimary ';
if ixUnique in Options then
Opc:= Opc + 'ixUnique ';
if ixDescending in Options then
Opc:= Opc + 'ixDescending ';
if ixCaseInsensitive in Options then
Opc:= Opc + 'ixCaseInsensitive ';
if ixExpression in Options then
Opc:= Opc + 'ixExpression ';
if ixNonMaintained in Options then
Opc:= Opc + 'ixNonMaintained ';
Saludos