home *** CD-ROM | disk | FTP | other *** search
/ Monster Media 1994 #1 / monster.zip / monster / CLIPPER / CLIPTIPS.ZIP / SUPTBULL.ZIP / S50010.TXT < prev    next >
Text File  |  1992-05-28  |  8KB  |  182 lines

  1. Clipper Support Bulletin #10
  2. Solutions to DBFNTX/DBFNDX indexing problems
  3.  
  4. Copyright (c) 1991, 1992 Nantucket Corporation.  All rights reserved.
  5.  
  6.  
  7. Version:  Clipper 5.0, revisions 1.00 - 1.29, version 5.01
  8. Date:     24th March, 1992
  9. Revised:  22nd May, 1992
  10. Status:   Active
  11.  
  12. ================================================================================
  13.  
  14. This Support Bulletin covers the following topics:
  15.  
  16.    1. Replacing key fields
  17.    2. Index key length must be fixed
  18.    3. Convert numeric key expressions to character
  19.    4. Recreate index with INDEX instead of REINDEX
  20.    5. Opening the same database in multiple work areas
  21.    6. Don't use memory variables in key expressions
  22.    7. Preventing index corruption on a network
  23.    8. Interacting with dBASE III PLUS
  24.    9. Runtime errors during index write operations
  25.    10.Expanded memory problems
  26.    11.Memory-resident programs and disk caches
  27.    12.Workstation crashes when INDEXing under DOS 4.x
  28.    13.Indexes improperly updated
  29.    14.Determining which index is causing a problem
  30.  
  31. ================================================================================
  32. 1. Replacing key fields
  33.    
  34.    When replacing a key field, the current index is updated and the
  35.    relative position of the record pointer within the index is
  36.    changed.  This means that specifying a REPLACE command with a
  37.    scope or condition to change a key field may yield an erroneous
  38.    result.  To update a key field, SET ORDER TO 0 before the REPLACE.
  39.    This ensures that the record pointer moves sequentially in natural
  40.    order.  However, all open indexes are still updated.
  41.    
  42. ================================================================================
  43. 2. Index key length must be fixed
  44.    
  45.    Make sure the length of the index expression is the same for every
  46.    record.  Clipper stores key values in fixed increments, and index
  47.    key sizes are calculated by evaluating the expression on a blank
  48.    record.  A trimmed expression, therefore, always evaluates to a
  49.    null string, leading to a size mismatch between the target and the
  50.    defined key length.  To use any of the TRIM() functions within a
  51.    key expression, use PADR() to guarantee a fixed length, like this:
  52.    
  53.    USE Customer NEW
  54.    INDEX ON PADR(RTRIM(Last) + First, 40) TO CustName
  55.    
  56. ================================================================================
  57. 3. Convert numeric key expressions to character
  58.    
  59.    Use of numeric keys can sometimes lead to precision problems.  You
  60.    can largely avoid this issue by converting numeric indexes to
  61.    character indexes using the STR() function in the index
  62.    expression.  Note, be sure to specify both the numeric value as
  63.    well as the length arguments when specifying the STR() in the key
  64.    expression.
  65.    
  66. ================================================================================
  67. 4. Recreate index with INDEX instead of REINDEX
  68.    
  69.    When recreating damaged or corrupted indexes, use INDEX ON rather
  70.    than the REINDEX command.  REINDEX uses the existing index header
  71.    which may be the source of the corruption.  On local drives, you
  72.    may want to issue CHKDSK /F before recreating the indexes.
  73.    
  74. ================================================================================
  75. 5. Opening the same database in multiple work areas
  76.    
  77.    If you open the same database file in multiple work areas you need
  78.    to treat each work area as if it is a different workstation on a
  79.    network.  SHARE must be loaded or the database file must be
  80.    located on a network drive and opened shared.  If you plan to
  81.    update the database file from one of the work areas, you must have
  82.    all applicable indexes open to ensure all stay up to date.  Do not
  83.    open database files in multiple work areas if you do not have
  84.    SHARE loaded or the database files are not located on a network
  85.    drive.
  86.    
  87. ================================================================================
  88. 6. Don't use memory variables in key expressions
  89.    
  90.    Avoid including memory variables in key expressions for the
  91.    following reasons:
  92.    
  93.    1. Values are undependable
  94.    
  95.    2. Scope dependent
  96.    
  97.    3. Application dependent
  98.    
  99.    Use fields, operators, and functions in key expressions only.
  100.    
  101. ================================================================================
  102. 7. Preventing index corruption on a network
  103.    
  104.    Because network operating systems buffer disk writes, it is
  105.    possible to corrupt indexes if a workstation crashes after
  106.    updating an index and the writes are still in the buffer.
  107.    
  108.    To prevent this, do all the REPLACEs, unlock the file, and then
  109.    COMMIT to force writes. If the database file was opened exclusive,
  110.    do all the REPLACEs then COMMIT to force writes.
  111.    
  112.    For multiuser applications under DOS 3.3 or above, issue the
  113.    COMMIT command after unlocking the record or file.  For DOS 3.2 or
  114.    below, the only way to ensure that the writes are actually written
  115.    to disk is to close the file.
  116.    
  117.    For more information, refer to the Update Visibility section of
  118.    the Network Programming chapter in the Programming and Utilities
  119.    Guide.
  120.    
  121. ================================================================================
  122. 8. Interacting with dBASE III PLUS
  123.    
  124.    Avoid opening a database in dBASE III PLUS and issuing a PACK or
  125.    ZAP.  This will cause end of file markers to be inserted in the
  126.    file, which may result in database or index corruption when the
  127.    file is read by Clipper.
  128.    
  129. ================================================================================
  130. 9. Runtime errors during index write operations
  131.    
  132.    If either an unrecoverable, and internal fatal runtime error such
  133.    as "Disk full," "Out of memory," occurs during a write operation,
  134.    the indexes being written may become corrupted.  If this happens,
  135.    it is advisable to recreate all indexes using the INDEX command.
  136.    
  137. ================================================================================
  138. 10.Expanded memory problems
  139.    
  140.    Since some expanded memory boards or third-party software may not
  141.    be "well-behaved" in their use of expanded memory, try setting the
  142.    E parameter of the CLIPPER environment variable to 0 (e.g. SET
  143.    CLIPPER=E0).  This should only be attempted if the BADCACHE
  144.    setting mentioned in point 9 has not helped.
  145.    
  146. ================================================================================
  147. 11.Memory-resident programs and disk caches
  148.    
  149.    Check for memory-resident programs and disk caches that may cause
  150.    problems.  If you suspect that a cache may be the source of your
  151.    problems, set the CLIPPER environment variable to BADCACHE (e.g.
  152.    SET CLIPPER=BADCACHE).
  153.    
  154. ================================================================================
  155. 12.Workstation crashes when INDEXing under DOS 4.x
  156.    
  157.    If the workstation crashes during an INDEX operation under DOS
  158.    4.x, issue SHARE with different F and L parameters. For example,
  159.    in your AUTOEXEC.BAT file, insert the following command line:
  160.    
  161.    SHARE /F:4096 /L:31
  162.    
  163. ================================================================================
  164. 13.Indexes improperly updated
  165.    
  166.    If an application program doesn't have all indexes open when key
  167.    fields are updated, it is a strong probability an index will not
  168.    be correctly updated.  This problem will not be discovered until
  169.    another application that uses the index that wasn't updated when
  170.    an attempt is made to use the index.
  171.    
  172. ================================================================================
  173. 14.Determining which index is causing a problem
  174.    
  175.    Sometimes, an index file problem may not be noticed until another
  176.    index is opened.  This means that the file actually causing the
  177.    problem may not be the one specified in the error message.  If
  178.    this is the case, try recreating the previously opened file.
  179.    
  180.  
  181.                               *  *  *
  182.