home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: InfoMgt / InfoMgt.zip / hwid2o.zip / HWID2D.DOC next >
Text File  |  1998-02-24  |  30KB  |  771 lines

  1.  
  2.                              DBF2DB2
  3.                      =======================
  4.  
  5.  
  6. Welcome to DBF2DB2 by Harald Wilhelm.
  7.  
  8. This file contains information you need to install and run DBF2DB2.
  9.  
  10.  
  11. Disclaimer
  12. ==========
  13.  
  14. This product is supplied with no warranty, either expressed or implied. The
  15. author Harald Wilhelm will not accept responsibility for any adverse
  16. consequences that may arise from the use or misuse of DBF2DB2 or its
  17. associated program and data files. Such adverse consequences include, but are
  18. not limited to, loss of profit, and loss of data.
  19.  
  20. The author specifically disclaims all warranties, expressed or implied,
  21. including but not limited to, any implied warranty of merchantability or
  22. fitness for a particular purpose.
  23.  
  24.  
  25. Copyright
  26. =========
  27.  
  28. DBF2DB2 is Copyright 1998 Harald Wilhelm.
  29.  
  30. DBF2DB2 exists in evaluation and licensed versions.
  31.  
  32. Evaluation copies of DBF2DB2 are supplied for evaluation only. You may
  33. distribute them freely, but they are not to be used commercially. After
  34. 21 days of evaluation, you must cease using DBF2DB2 unless you register it.
  35.  
  36. Licensed copies of DBF2DB2 may be used commerically, but not freely
  37. distributed. Only one instance of each licensed copy may be used at any
  38. particular time. The copyright of DBF2DB2 is currently held by the author
  39. Harald Wilhelm.
  40.  
  41.  
  42. Licensing DBF2DB2
  43. =================
  44.  
  45. The author Harald Wilhelm invites you to license DBF2DB2 under negotiable
  46. terms. To contact the author, see "Support" at the end of this document.
  47.  
  48. Alternatively, see "How to register" below if you simply wish to continue
  49. using DBF2DB2.
  50.  
  51.  
  52. How to register
  53. ===============
  54.  
  55. DBF2DB2 is shareware. This means that you can use the program for a limited
  56. time (21 days) before you decide whether you want to keep it. If you want to
  57. continue using DBF2DB2 after that time you are expected to register it. The
  58. registered version (which you have after applying the registration codes),
  59. removes the limitations of the non-registered release, but is otherwise
  60. identical to the evaluation version.
  61.  
  62. Once you have registered, technical support is available from the author via
  63. e-mail (prefered), fax or mail. Voice support is not provided.
  64.  
  65. Please see the file ORDER.TXT for order information.
  66.  
  67. After receiving the registration keys from the author, please edit the file
  68. called HWID2D.INI. In the LICENSE section change the NAME and the CODE
  69. entries. Replace the "Evaluation NAME" and the CODE with the name and code
  70. you received from the author.
  71.  
  72.  
  73. What is DBF2DB2?
  74. ================
  75.  
  76. With IBM DB2 UDB V5 a new feature was introduced. This feature is called
  77. Table Function UDF. An UDF, User Defined Function, is external written by
  78. third parties or customers to add new functions to the already installed
  79. functions that come with DB2 UDB.
  80.  
  81. There are three typed of User Defined Functions. The third, new, feature is
  82. called Table Function UDF. A Table Function UDF is an external written piece
  83. of code that brings data from external sources into DB2 UDB. DB2 UDB operates
  84. on this data like data from it's own tables.
  85.  
  86. DBF2DB2 utilizes this Table Function UDF to bring Dbase III databases into DB2.
  87. With this feature two worlds come together. After registering this Table
  88. Function UDF for every DB2 UDB database where you need access to Dbase III data
  89. as well, you can work with Dbase III databases like DB2 does with it's own
  90. tables. With standard SQL statements you can read, collect, search and even
  91. join DB2 data and Dbase III data.
  92.  
  93.  
  94. Before You Install
  95. ==================
  96.  
  97.    Software Requirements
  98.    ---------------------
  99.  
  100.       OS/2
  101.       ----
  102.  
  103.       IBM OS/2 Warp V4 or higher
  104.       IBM DB2 UDB V5 or higher
  105.  
  106.       Windows NT
  107.       ----------
  108.  
  109.       Microsoft Windows NT V4 or higher
  110.       IBM DB2 UDB V5 or higher
  111.  
  112.  
  113. Installing DBF2DB2
  114. ==================
  115.  
  116. DBF2DB2 comes as a ZIP files either for IBM OS/2 Warp V4 or
  117. Microsoft Windows NT V5. The files are called:
  118.  
  119.    HWID2O.ZIP for IBM OS/2 Warp V4
  120.    HWID2N.ZIP for Microsoft Windows NT V4
  121.  
  122. Within a Single User Environment please use the ZIP file that matches your
  123. operating system installed in your Single User Environment. In a Single User
  124. Environment DBF2DB2 must be installed on every machine with IBM DB2 UDB V5.
  125.  
  126. Within a LAN or Workgroup Environment please use the ZIP file that matches
  127. the operating system installed on your IBM DB2 UDB V5 server. In a DB2 UDB
  128. Client Server Environment DBF2DB2 needs to be installed on the DB2 UDB server
  129. only.
  130.  
  131. After you checked the correct ZIP file for your needs, please UNZIP the
  132. complete HWID2x package into the SQLLIB\FUNCTION directory on your
  133. IBM DB2 UDB machine. In a Single User Environment you need to install
  134. DBF2DB2 on every machine. In a Workgroup Environment please install DBF2DB2
  135. on the DB2 UDB server only.
  136.  
  137. Fast start
  138. ==========
  139.  
  140. For an immediate test, please use the following instructions. This describes
  141. a typical scenario that you must repeat for every Dbase III database that
  142. needs to be cataloged with a DB2 UDB system. There must be at least one DB2
  143. UDB database created in your environment:
  144.  
  145.     1. Please go to the directory where your DB2 UDB package was installed. In
  146.        a Single User Environment go to the SQLLIB\FUNCTION directory on your
  147.        local machine. In a Workgroup Environment please go to the
  148.        SQLLIB\FUNCTION directory on the DB2 UDB server. For example:
  149.  
  150.           C:
  151.           CD \SQLLIB\FUNCTION
  152.  
  153.        If your SQLLIB package is installed on a different drive or in a
  154.        different directory, please use the drives and/or directories that will
  155.        match.
  156.  
  157.     2. Please copy the correct ZIP file that matches the operating system of
  158.        your SQLLIB package. For example:
  159.  
  160.           COPY A:\HWID2O.ZIP
  161.  
  162.        If the ZIP file is not on a disk please change the statements shown
  163.        above. Shown above is the ZIP file for IBM OS/2 Warp V4. If you need
  164.        to install the DBF2DB2 on a Microsoft Windows NT V4 system please
  165.        use the following command:
  166.  
  167.           COPY A:\HWID2N.ZIP
  168.  
  169.     3. We need to collect information about the Dbase III database, it's
  170.        contents and it's location. This information is stored into the
  171.        HWID2D.INI file and in a separate file for each Dbase III database.
  172.        We need to run the HWID2D.EXE service application to collect this
  173.        information. For example:
  174.  
  175.           On OS/2: HWID2DO.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF
  176.           On NT:   HWID2DN.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF
  177.  
  178.        Please note that this command must be activated in the \SQLLIB\FUNCTION
  179.        directory only. If a Dbase III database is found at a different
  180.        location please change the location in the statement shown above.
  181.  
  182.        After this application start we will find a modified HWID2D.INI and a
  183.        new file called TEST.UDF. The HWID2D.INI tells the Table Function UDF
  184.        where the database called TEST.DBF can be found. The TEST.UDF file
  185.        contains information about how to issue the correct SQL syntax.
  186.  
  187.        This service application needs to be called once for every Dbase III
  188.        database that should be serviced by the Table Function UDF and that is
  189.        found in your environment.
  190.  
  191.     4. Please open the "DB2 Command Center" or "DB2 Befehlszentrale" of the
  192.        DB2 UDB application. This application can be found in the DB2 UDB
  193.        folder after installation of DB2 UDB.
  194.  
  195.     5. Please open the TEST.UDF file with a editor of your choice. Mark the
  196.        lines that can be found around and including the CREATE FUNCTION
  197.        statement. There are exact three statements from "CONNECT TO SAMPLE;",
  198.        "CREATE FUNCTION ...;" to "CONNECT RESET;". Please copy these three
  199.        statements as a whole to the clipboard.
  200.  
  201.     6. Go to the "DB2 Command Center" and paste the contents in the textfield.
  202.        If you didn't install the DB2 SAMPLE database please change the name in
  203.        the "CONNECT TO" statement to match a DB2 UDB database, that can be
  204.        found in your environment.
  205.  
  206.     7. Hit the big button in the upper left corner of the main window. This
  207.        activates the "DB2 Command Center". The notebook page will change and
  208.        should report a connection and two successful issued statements.
  209.  
  210.        After this DB2 UDB "knows" that there is a Table Function UDF with a
  211.        specific name. This Table Function UDF is accessible from the DB2
  212.        database, where the CONNECT TO statement was issued against, only. If
  213.        you need access to this Table Function UDF from another database
  214.        please issue these three statements with a modified CONNECT TO
  215.        statement.
  216.  
  217.     8. Go back to the editor and mark and copy the next three statements from
  218.        the TEST.UDF file. This time we copy the first "SELECT * ..." statement
  219.        and it's surrounding "CONNECT TO SAMPLE;" and "CONNECT RESET;"
  220.        statements.
  221.  
  222.     9. Go back to the "DB2 Command Center" and change to the first notebook
  223.        page. Copy the clipboard contents to the textfiled and change the
  224.        database name if the SAMPLE database can not be found in this DB2 UDB
  225.        environment.
  226.  
  227.    10. Again, hit the big button in the upper left corner of the main window.
  228.        The notebook page will change again and should report a connection,
  229.        three statements from the Dbase III database called TEST.DBF and one
  230.        successful issued statement.
  231.  
  232.        If there are only three returned rows of data even if there is more
  233.        data in the Dbase III database, you are using the evaluation copy
  234.        of DBF2DB2. This evaluation copy limits the count of returned
  235.        rows to exact three rows. This limit goes away after registering
  236.        DBF2DB2.
  237.  
  238.    11. That's all!
  239.  
  240.  
  241. Inside the Table Function UDF
  242. =============================
  243.  
  244.    Overview
  245.    --------
  246.  
  247.    The Table Function UDF enables DB2 UDB to read Dbase III databases with
  248.    standard SQL statements. This Table Function UDF was written that way,
  249.    to service an unlimited count of different Dbase III databases in mind.
  250.  
  251.    If you have a look at the CREATE FUNCTION statement that you copied in the
  252.    above "Fast start" section, you'll notice that the CREATE FUNCTION
  253.    statement needs to know the names of all columns that should be returned
  254.    from the Table Function UDF to the DB2 UDB system. The problem is, that
  255.    different Dbase III database have different count of columns and even
  256.    different names for the various columns. DBF2DB2 addresses this problem and
  257.    resolves it.
  258.  
  259.    The service application (see the Service application section), must be
  260.    called from within the SQLLIB/FUNCTION directory for every Dbase III
  261.    database that should be serviced by the DBF2DB2 Table Function UDF. The
  262.    result is the HWID2D.INI file with an entry for every Dbase III database.
  263.    This information is used from the Table Function UDF to find the location
  264.    of every Dbase III database.
  265.  
  266.    I addition the service application produces a file with the extension UDF
  267.    for every Dbase III database it was called for. This file contains the
  268.    correct CREATE FUNCTION statement for this Dbase III database as well as
  269.    the correct syntax for some SQL SELECT statements.
  270.  
  271.    This is neccessary because there is a strong relationship between the
  272.    CREATE FUNCTION call and every SQL SELECT statement that uses this Table
  273.    Function UDF.
  274.  
  275.    - The name of the Table Function UDF is taken from the filename of the
  276.      Dbase III database. This name is used by the Table Function UDF to find
  277.      the correct section in the HWID2D.INI file. As already stated. This
  278.      information is used to find the location of the Dbase III database file.
  279.      This is first relationship:
  280.  
  281.         CREATE FUNCTION name --> HWID2D.INI --> Dbase III database file
  282.  
  283.    - The INTEGER input parameter is always the same. In SQL SELECT statements
  284.      using this Table Function UDF, this parameter must contain the correct
  285.      count of returned columns. The service application always puts the correct
  286.      count of columns in the SQL SELECT statements that are shown in the
  287.      UDF file. This information is checked by the Table Function UDF during
  288.      it's work. If there is a column count mismatch between the Dbase III
  289.      database, that was found with the help of the HWID2D.INI file, and the
  290.      INTEGER parameter, an error is returned. This is the second important
  291.      relationship:
  292.  
  293.         INTEGER --> count of columns in RETURNS clause --> Dbase III database
  294.  
  295.    Notify DB2 about Dbase III databases (CREATE FUNCTION)
  296.    ------------------------------------------------------
  297.  
  298.    Before a Table Function can be used it must be registered with every
  299.    database where the Table Function UDF is required. This is done with the
  300.    CREATE FUNCTION call. This CREATE FUNCTION call is different for every
  301.    Dbase III database, because the name of the function must be different
  302.    and the columns in different Dbase III database are different too, usually.
  303.  
  304.    The name of the Table Function UDF is taken from the Dbase III database
  305.    filename. For example the database TEST.DBF will result in a Table Function
  306.    name TEST. This name is analyzed by the Table Function UDF and with this
  307.    name a corresponding section entry is searched in the HWID2D.INI file.
  308.    This leads to the location of the Dbase III database. The service
  309.    application will address this and create a correct CREATE FUNCTION call in
  310.    the UDF file for every Dbase III database it was issued against.
  311.  
  312.    A second difference is in different Table Function UDFs. The RETURNS clause
  313.    must contain the correct count of columns that are returned from the Table
  314.    Function UDF the the DB2 UDB system. In addition the names of the columns
  315.    that are to be returned must be there too. This is addressed by the service
  316.    application too.
  317.  
  318.    To avoid typing mismatch please use the CREATE FUNCTION call that was created
  319.    from the service application in the UDF file, always. This will avoid any
  320.    problems that needn't be there.
  321.  
  322.    Use the Table Function UDF
  323.    --------------------------
  324.  
  325.    After registering the Table Function UDF with the CREATE FUNCTION call, the
  326.    Table Function UDF can be used with standard SQL statements. The service
  327.    application creates a set of example SQL SELECT statements for every Dbase
  328.    III database it was called for, and it should be called for every Dbase III
  329.    database the Table Function UDF should service.
  330.  
  331.    To avoid typing mismatch please use the SQL SELECT statements that were
  332.    created from the service application in the UDF file, always. This will
  333.    avoid any problems that needn't be there.
  334.  
  335.  
  336. Service application
  337. ===================
  338.  
  339. With the Table Function UDF you receive a service application called
  340. HWID2DO.EXE (for OS/2) or HWID2DN.EXE (for NT). This application does several
  341. things.
  342.  
  343.    The HWID2D.INI file
  344.    -------------------
  345.  
  346.    First of all this application has to maintain a central INI file called
  347.    HWID2D.INI. This text-based INI file contains information, that is used
  348.    by the Table Function UDF to find the DBase III databases. For every
  349.    Dbase III database that should be serviced by the Table Function UDF,
  350.    the service application creates an entry in this INI file. The filename
  351.    of the Dbase III database file, without the extension, will be used as
  352.    a section name. Within this section the service application will create
  353.    two entries with the name DIRECTORY and DATA. For example:
  354.  
  355.       [TEST]
  356.       DIRECTORY=C:\SQLLIB\FUNCTION
  357.       DATA=TEST.DBF
  358.  
  359.    The Table Function UDF needs these entries to find the way to the
  360.    Dbase III database files. Every Dbase III database, that you want to be
  361.    serviced from the Table Function UDF needs a similar entry, with
  362.    different values of course. The Table Function UDF takes the function
  363.    name during SQL statement invocation, to find the correct section.
  364.  
  365.    The *.UDF file
  366.    --------------
  367.  
  368.    In addition the service application creates an UDF file for every Dbase III
  369.    database it was called for, and it should be called for every Dbase III
  370.    database the Table Function UDF should handle.
  371.  
  372.    The service application takes the name of the Dbase III database filename
  373.    and creates a new file with the same name as the Dbase III database filename
  374.    without the extension DBF but with the extension UDF. For example: If the
  375.    service application is called with the Dbase III database filename TEST.DBF
  376.    and new file called. TEST.UDF is created.
  377.  
  378.    This file contains the correct CREATE FUNCTION call and a set of example
  379.    standard SQL SELECT statements for the Dbase III database.
  380.  
  381.    Calling the service application
  382.    -------------------------------
  383.  
  384.    The service application should always be called from the SQLLIB/FUNCTION
  385.    directory of you DB2 UDB system. That way it is guaranteed that the service
  386.    application can enter the correct location of the Dbase III database file in
  387.    the HWID2D.INI file.
  388.  
  389.    This is the calling sequenz for the service application:
  390.  
  391.       On OS/2: HWID2DO.EXE -dDB [-fUDF] [-sSPECIFIC]
  392.       On NT:   HWID2DN.EXE -dDB [-fUDF] [-sSPECIFIC]
  393.  
  394.    The paramater -d is required and should contain the full qualified
  395.    drive/path/filename combination of a Dbase III database. For example:
  396.  
  397.       On OS/2: HWID2DO.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF
  398.       On NT:   HWID2DN.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF
  399.  
  400.    As an optional paramater it is allowed to overwrite the UDF filename.
  401.    This is not required usually. But if there are two Dbase III databases with
  402.    an identical filename, it is required to use a different and unique UDF
  403.    filename for each of this UDF files for both Dbase III databases. If there
  404.    is need to overwrite the UDF filename, you need to overwrite the -s
  405.    parameter too. For example:
  406.  
  407.       On OS/2: HWID2DO.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF -fMYTEST.UDF -sMYTEST
  408.       On NT:   HWID2DN.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF -fMYTEST.UDF -sMYTEST
  409.  
  410.    As a second optional paramater it is allowed to overwrite the specific
  411.    filename. This is not required usually. But if there are two Dbase III
  412.    databases with an identical filename, it is required to use a different
  413.    and unique UDF filename for each of this UDF files. If there is need to
  414.    overwrite the specific name, you need to overwrite the -f parameter too.
  415.    For example:
  416.  
  417.       On OS/2: HWID2DO.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF -fMYTEST.UDF -sMYTEST
  418.       On NT:   HWID2DN.EXE -dC:\SQLLIB\FUNCTION\TEST.DBF -fMYTEST.UDF -sMYTEST
  419.  
  420.  
  421. Some SQL examples
  422. =================
  423.  
  424. This section contains some example SQL statements, that show the usage
  425. of the Table Function UDF. It uses the test database that comes with this
  426. package. If you don't have the SAMPLE database of the DB2 UDB package,
  427. please change the name of the database in the CONNECT TO statement to
  428. an existing database.
  429.  
  430. These are the SQL statements that are created from the service application
  431. for the test database. You will find these examples in a file with the name
  432. of the Dbase III database file with the extension *.UDF always. The service
  433. application guarantees that you will always use the correct syntax.
  434.  
  435.    Query all rows
  436.    --------------
  437.  
  438.       CONNECT TO sample;
  439.       SELECT   *
  440.          FROM  TABLE (TEST(6)) AS T;
  441.       CONNECT RESET;
  442.  
  443.    Query one column of all rows
  444.    ----------------------------
  445.  
  446.       CONNECT TO sample;
  447.       SELECT   NAME
  448.          FROM  TABLE (TEST(6)) AS T;
  449.       CONNECT RESET;
  450.  
  451.    Query a selected row
  452.    --------------------
  453.  
  454.       CONNECT TO sample;
  455.       SELECT   *
  456.          FROM  TABLE (TEST(6)) AS T
  457.          WHERE NAME='Wilhelm';
  458.       CONNECT RESET;
  459.  
  460.    Query the number of rows
  461.    ------------------------
  462.  
  463.       CONNECT TO sample;
  464.       SELECT   COUNT(*)
  465.          FROM  TABLE (TEST(6)) AS T;
  466.       CONNECT RESET;
  467.  
  468.    Create a DB2 table and copy the complete Dbase III database content
  469.    -------------------------------------------------------------------
  470.  
  471.       CONNECT TO sample;
  472.       CREATE TABLE TEST (NAME       VARCHAR(64),
  473.                          PRENAME    VARCHAR(64),
  474.                          ZIP        INT,
  475.                          BIRTH      DATE,
  476.                          MARRIED    CHAR(1),
  477.                          NOTE       VARCHAR(512));
  478.       INSERT
  479.          INTO TEST SELECT   NAME,
  480.                             PRENAME,
  481.                             ZIP,
  482.                             BIRTH,
  483.                             MARRIED,
  484.                             NOTE
  485.                       FROM  TABLE (TEST(6)) AS T;
  486.       CONNECT RESET;
  487.  
  488.  
  489. Return codes
  490. ============
  491.  
  492. The Table Function UDF returns well documented return codes for the various
  493. exceptions that may happen.
  494.  
  495.    00000 SQLUDF_STATE_OK
  496.    ---------------------
  497.  
  498.    Everything's ok. You won't see this code because it's translated by DB2 UDB
  499.    in normal no-error condition.
  500.  
  501.    02000 SQLUDF_STATE_EOF
  502.    ----------------------
  503.  
  504.    There are no more rows in the Dbase III database. This error is recognized
  505.    by DB2 UDB and transformed in a no-error condition. This is the usual end of
  506.    the Dbase III database scan.
  507.  
  508.    38600 SQLUDF_STATE_DBFCLOSE
  509.    ---------------------------
  510.  
  511.    The Dbase III engine could not close the Dbase database. This error will
  512.    not happen very often.
  513.  
  514.    38601 SQLUDF_STATE_DBFFLDCOUNT
  515.    ------------------------------
  516.  
  517.    The Dbase III engine reports that it can't read the count of columns in the
  518.    Dbase III database. This is a serious error. It might be possible that the
  519.    Dbase III database is corrupt or is no valid Dbase III database.
  520.  
  521.    38602 SQLUDF_STATE_DBFFLDNDECIMAL
  522.    ---------------------------------
  523.  
  524.    The Dbase III engine reports that it can't read a decimal value in the
  525.    current row of the Dbase III database. This is a serious error. It might be
  526.    possible that the Dbase III database is corrupt or is no valid Dbase III
  527.    database.
  528.  
  529.    38603 SQLUDF_STATE_DBFFLDNGETCHARACTER
  530.    --------------------------------------
  531.  
  532.    The Dbase III engine reports that it can't read a character value in the
  533.    current row of the Dbase III database. This is a serious error. It might be
  534.    possible that the Dbase III database is corrupt or is no valid Dbase III
  535.    database.
  536.  
  537.    38604 SQLUDF_STATE_DBFFLDNGETDATE
  538.    ---------------------------------
  539.  
  540.    The Dbase III engine reports that it can't read a date value in the
  541.    current row of the Dbase III database. This is a serious error. It might be
  542.    possible that the Dbase III database is corrupt or is no valid Dbase III
  543.    database.
  544.  
  545.    38605 SQLUDF_STATE_DBFFLDNGETLOGICAL
  546.    ------------------------------------
  547.  
  548.    The Dbase III engine reports that it can't read a logical value in the
  549.    current row of the Dbase III database. This is a serious error. It might be
  550.    possible that the Dbase III database is corrupt or is no valid Dbase III
  551.    database.
  552.  
  553.    38606 SQLUDF_STATE_DBFFLDNGETMEMO
  554.    ---------------------------------
  555.  
  556.    The Dbase III engine reports that it can't read a memo value in the
  557.    current row of the Dbase III database. This is a serious error. It might be
  558.    possible that the Dbase III database is corrupt or is no valid Dbase III
  559.    database.
  560.  
  561.    38607 SQLUDF_STATE_DBFFLDNGETNUMERIC
  562.    ------------------------------------
  563.  
  564.    The Dbase III engine reports that it can't read an integer value in the
  565.    current row of the Dbase III database. This is a serious error. It might be
  566.    possible that the Dbase III database is corrupt or is no valid Dbase III
  567.    database.
  568.  
  569.    38608 SQLUDF_STATE_DBFFLDNLENGTH
  570.    --------------------------------
  571.  
  572.    The Dbase III engine reports that it can't read the length of the current
  573.    column of the current row of the Dbase III database. This is a serious
  574.    error. It might be possible that the Dbase III database is corrupt or is
  575.    no valid Dbase III database.
  576.  
  577.    38609 SQLUDF_STATE_DBFFLDNTYPE
  578.    ------------------------------
  579.  
  580.    The Dbase III engine reports that it can't read the type of the current
  581.    column of the current row of the Dbase III database. This is a serious
  582.    error. It might be possible that the Dbase III database is corrupt or is
  583.    no valid Dbase III database.
  584.  
  585.    38610 SQLUDF_STATE_DBFOPEN
  586.    --------------------------
  587.  
  588.    The Dbase III engine reports that it can't open the Dbase III database.
  589.    This is a serious error. It might be possible that the Dbase III database
  590.    is corrupt or is no valid Dbase III database. In addition it might be
  591.    possible that the Dbase III database couldn't be found. Please check the
  592.    HWID2D.INI entry for this database and execute the service application
  593.    again.
  594.  
  595.    38611 SQLUDF_STATE_DBFRECGO
  596.    ---------------------------
  597.  
  598.    The Dbase III engine reports that it can't move the row pointer in the
  599.    Dbase III database. This is a serious error. It might be possible that the
  600.    Dbase III database is corrupt or is no valid Dbase III database.
  601.  
  602.    38612 SQLUDF_STATE_DBFRECSKIP
  603.    -----------------------------
  604.  
  605.    The Dbase III engine reports that it can't move the row pointer in the
  606.    Dbase III database. This is a serious error. It might be possible that the
  607.    Dbase III database is corrupt or is no valid Dbase III database.
  608.  
  609.    38613 SQLUDF_STATE_DBFRECTOP
  610.    ----------------------------
  611.  
  612.    The Dbase III engine reports that it can't move to the top of the Dbase III
  613.    database. This is a serious error. It might be possible that the Dbase III
  614.    database is corrupt or is no valid Dbase III database.
  615.  
  616.    38614 SQLUDF_STATE_PRFCLOSE
  617.    ---------------------------
  618.  
  619.    The Profile Manager reports that it can't close the HWID2D.INI file.
  620.  
  621.    38615 SQLUDF_STATE_PRFLOCATE
  622.    ----------------------------
  623.  
  624.    The Profile Manager reports that it can't read a value in the HWID2D.INI
  625.    file. Please check the contents of the HWID2D.INI file. Perhaps it's
  626.    corrupt. Please issue the service application again.
  627.  
  628.    38616 SQLUDF_STATE_PRFOPEN
  629.    --------------------------
  630.  
  631.    The Profile Manager reports that it can't open the HWID2D.INI file. Please
  632.    check the location and the contents of the HWID2D.INI file. Perhaps it's
  633.    corrupt. Please issue the service application again.
  634.  
  635.    38617 SQLUDF_STATE_WRONGFIELDCOUNT
  636.    ----------------------------------
  637.  
  638.    There was found a mismatch between the INTEGER parameter in a SQL SELECT
  639.    statement and the RETURNS clause in the CREATE FUNCTION call. Please
  640.    execute the service application for this database again and always use
  641.    the templates from the UDF file that was created by the service application
  642.    for every Dbase III database.
  643.  
  644.  
  645. Glossar
  646. =======
  647.  
  648. In this section you'll find useful information releated to DBF2DB2 and it's
  649. environment.
  650.  
  651.    UDF
  652.    ---
  653.  
  654.    User Defined Function. They enable customers to write enhancements to the
  655.    DB2 UDB engine. One of the three types of UDF is the Table Function UDF.
  656.  
  657.  
  658. Contents of the distribution ZIP file
  659. =====================================
  660.  
  661. In the ZIP file you'll find the following files:
  662.  
  663.    HWID2DO.DLL
  664.    -----------
  665.  
  666.    The Table Function UDF Library itself for OS/2.
  667.  
  668.    HWID2DN.DLL
  669.    -----------
  670.  
  671.    The Table Function UDF Library itself for NT.
  672.  
  673.    HWID2DO.EXE
  674.    -----------
  675.  
  676.    A service application that analyzes Dbase III databases and creates the
  677.    correct syntax for the CREATE FUNCTION and SELECT statements. This
  678.    application will maintain a HWID2D.INI file where the Table Function UDF
  679.    can find the locations of all Dbase III databases that should be serviced.
  680.    This is the OS/2 version of this executable.
  681.  
  682.    HWID2DN.EXE
  683.    -----------
  684.  
  685.    A service application that analyzes Dbase III databases and creates the
  686.    correct syntax for the CREATE FUNCTION and SELECT statements. This
  687.    application will maintain a HWID2D.INI file where the Table Function UDF
  688.    can find the locations of all Dbase III databases that should be serviced.
  689.    This is the NT version of this executable.
  690.  
  691.    HWID2D.INI
  692.    ----------
  693.  
  694.    A text-based INI file where the Table Function UDF finds the Dbase III
  695.    databases it should service.
  696.  
  697.    HWID2D.DOC
  698.    ----------
  699.  
  700.    The documentation (this file).
  701.  
  702.    README.1ST
  703.    ----------
  704.  
  705.    Some news around my shareware applications.
  706.  
  707.    TEST.DBF
  708.    --------
  709.  
  710.    A test Dbase III database for immediate testing.
  711.  
  712.    TEST.DBT
  713.    --------
  714.  
  715.    The memo file of the test Dbase III database.
  716.  
  717.    TEST.UDF
  718.    --------
  719.  
  720.    This file was created by HWID2D, the service application, and contains the
  721.    syntax of the CREATE FUNCTION and SELECT statements.
  722.  
  723.    ORDER.TXT
  724.    ---------
  725.  
  726.    A file that contains registration information.
  727.  
  728.  
  729. Known problems
  730. ==============
  731.  
  732. This section contains problems that do exist in the current release of
  733. DBF2DB2.
  734.  
  735.    The LONG VARCHAR problem
  736.    ------------------------
  737.  
  738.    I would like to use LONG VARCHAR fields for MEMO fields because in fact
  739.    DBase III MEMO fields can spread over more than one 512 Byte entry. The
  740.    IBM DB2 UDB documentation say's that it's possible but the CREATE FUNCTION
  741.    statement does not allow LONG VARCHAR fields in the RESULTS clause.
  742.  
  743.    If this changes, either documentation or engine, I will change this too.
  744.  
  745.    This problem is reported to IBM.
  746.  
  747.  
  748. Support
  749. =======
  750.  
  751. To contact me, use any of these:
  752.  
  753.    Internet
  754.    --------
  755.  
  756.    Harald_Wilhelm@hawi.de
  757.  
  758.    Fax
  759.    ---
  760.  
  761.    Germany (0) 221 - 5909 - 199
  762.  
  763.    Mail
  764.    ----
  765.  
  766.    Harald Wilhelm
  767.    Am Scheidweg 60
  768.    D-50765 Koeln (Cologne)
  769.    Germany
  770.  
  771.