Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community

At 14 OCT 1998 06:47:09PM Greg James, ISIS, Inc. wrote:

After restoring an application with APPBACKUP I reattached the tables. In database manager List Indexed Tables only shows one indexed table (SYSREPOSLOCKS). Before I backed-up the application there were three relational indexes for the application.

When I tried to add a relational index I saw the following message:

"Index type "3" has already been created for the column ""."

I can see the ! file in the system editor, but when I execute:

RUN DELETE_INDEX ,,'3' I get an error.

Is the index there or not? If it is, how do I get rid of it, and if it's not, how can I add a new index?


At 19 OCT 1998 09:48AM Cameron Revelation wrote:

Greg,

It sounds like you need to manually remove it. Open the DICT. table and look at the record that purportedly has an index. Clear the following fields:

6 (DICT_INDEX_FLAG$)

21 (DICT_DEPENDENT$)

22 (DICT_XREF$)

23 (DICT_RELATIONAL$)

24 (DICT_RELATED$, related to DICT_RELATIONAL$)

25 (DICT_PROTECT$, related to DICT_RELATIONAL$)

Below is the code for List_Index, to give you a reference point for how this info is stored.

<code>
routine List_Index(pTableNameList, pColumnNameList, pIndexTypeList)
RowDef(CharStr, CharStr, Integer, Integer, Integer)

*****************************************************************************
*
* Name       :  List_Index()
* Description:  Returns a list of indexes.
*
* Arguments:
*   pTableNameList  - The name of the table to return indexing information about
*   pColumnNameList - Specific columns to get indexing information about
*   pIndexTypeList  - A list of index types (1, 2, 3) to return
*
* ROWDEF structure:
*    Table Name
*    Column Name
*    Btree Flag
*    Crossref Flag
*    Relational Flag
*
* History (Date, Initials, Notes)
*   10/01/97  cp   Re-did.
*   10/27/97  cp   Sort table list (this used to be done by RTP50 select)
*
*****************************************************************************

declare subroutine Set_Status, V119
declare function   Send_Dyn

$insert Dict_Equates
$insert FSErrors_Hdr
$insert Logical


******
* main
******
  Set_Status(FALSE$)

 * check parameters
  if assigned(pTableNameList) then
    TableNameList=pTableNameList
    convert @lower_case to @upper_case in TableNameList
  end else
    TableNameList="
  end

  if assigned(pColumnNameList) then
    ColumnNameList=pColumnNameList
    convert @lower_case to @upper_case in ColumnNameList
  end else
    ColumnNameList="
  end

  if assigned(pIndexTypeList) then
    IndexTypeList=pIndexTypeList
  end else
    IndexTypeList="
  end

 * apply parameter defaults
  if len(TableNameList) else
   * default to all index tables
    TableNameList="
    cTables=count(@tables, @fm) + (@tables # "")
    for iTable=1 to cTables
      Table=@tables
      if Table 1,1=!" then
        TableNameList := Table 2,99999: @rm
      end
    next i

   * sort list
    V119("S", "", "A", "L", TableNameList, "")
    convert @rm to @fm in TableNameList
    TableNameList -1,1="
  end

  if len(IndexTypeList) else
   * default to return all index types
    IndexTypeList=123"
  end

 *
  bErr=FALSE$
  cTables=count(TableNameList, @fm) + (TableNameList # "")
  for iTable=1 to cTables
    TableName=TableNameList
    DictName =DICT.": TableName
    open DictName to fDict then
     * get a list of column names to check
      if len(pColumnNameList) else
        readv ColumnNameList from fDict, "%FIELDS%", 3 then
          convert @vm to @fm in ColumnNameList
        end else
          ColumnNameList="
        end
      end

     * check each column for indexes
      cColumns=count(ColumnNameList, @fm) + (ColumnNameList # "")
      for iColumn=1 to cColumns
        ColumnName=ColumnNameList
        if len(ColumnName) and ColumnName 1,1 # "%" then
          read Record from fDict, ColumnName then
            if Record=F" or Record=S" then
              Outrec  =0: @fm: 0: @fm: 0
              bIndexed="
              if index(IndexTypeList, 1, 1) then
                if Record then
                  bIndexed =TRUE$
                  OutRec=TRUE$
                end
              end
              if index(IndexTypeList, 2, 1) then
                if len(Record) then
                  bIndexed =TRUE$
                  OutRec=TRUE$
                end
              end
              if index(IndexTypeList, 3, 1) then
                if len(Record) then
                  bIndexed =TRUE$
                  OutRec=TRUE$
                end
              end
              if bIndexed then
                Stat=Send_Dyn(TableName: @fm: ColumnName: @fm: OutRec)
                if Stat then
                  Set_Status(TRUE$, Stat)
                  return
                end
              end
            end
          end
        end
      next iColumn
    end else
      ErrArgs=@file.error
      convert @vm to @fm in ErrArgs
      Set_Status(-1, FS_PREFIX$: @file.error, ErrArgs)
      bErr=TRUE$
    end
  next iTable

  if bErr else 
    Set_Status(FALSE$)
  end   
return

</code>

Hope it helps,

Cameron Purdy

Revelation Software

View this thread on the forum...

  • third_party_content/community/commentary/forums_nonworks/8ad332ba992276428525669d007d2ae0.txt
  • Last modified: 2024/01/04 21:00
  • by 127.0.0.1