ibm-information-center/dist/eclipse/plugins/i5OS.ic.cl_5.4.0.1/cpyfrmqryf.htm

496 lines
23 KiB
HTML

<!doctype html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head><META http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Copy From Query File (CPYFRMQRYF)</title>
<link rel="stylesheet" type="text/css" href="../rzahg/ic.css">
</head>
<body bgcolor="white">
<script language="Javascript" src="../rzahg/synch.js" type="text/javascript"></script>
<a name="CPYFRMQRYF.Top_Of_Page"></a>
<h2>Copy From Query File (CPYFRMQRYF)</h2>
<table width="100%">
<tr>
<td valign="top" align="left"><b>Where allowed to run: </b>All environments (*ALL)<br>
<b>Threadsafe: </b>Conditional
</td>
<td valign="top" align="right">
<a href="#CPYFRMQRYF.PARAMETERS.TABLE">Parameters</a><br>
<a href="#CPYFRMQRYF.COMMAND.EXAMPLES">Examples</a><br>
<a href="#CPYFRMQRYF.ERROR.MESSAGES">Error messages</a></td>
</tr>
</table>
<div> <a name="CPYFRMQRYF"></a>
<p>The Copy From Query File (CPYFRMQRYF) command copies either all or part of a file that is opened with the Open Query File (OPNQRYF) command to a physical program-described printer, diskette, a DDM file, or tape file, or *PRINT can be specified on the TOFILE parameter to print the records by using the IBM-supplied printer file, QSYSPRT.
</p>
<p>
<b>Note: </b>For more information on DDM files, see the Distributed Data Management information in the iSeries Information Center at http://www.ibm.com/eserver/iseries/infocenter.
</p>
<p>This command can:
</p>
<ul>
<li>Add records to an existing physical file member or replace contents of a receiving physical file member by using the MBROPT parameter.
</li>
<li>Copy records from an open query file format that is different than the to-file record format and convert records when copying to a source physical file. When the formats are different, the copy operation can:
<ul>
<li>Map fields that have the same name in the open query file format and the to-file record format
</li>
<li>Drop fields from the open query file format that do not exist in the to-file record format
</li>
<li>Copy the records directly, disregarding the differences between the open query file format and the to-file record format
</li>
</ul>
</li>
<li>Select a printout format when TOFILE(*PRINT) is specified. The records can be listed in character format, or in both character and hexadecimal format (OUTFMT parameter).
</li>
<li>If the to-file does not exist before the copy operation, create the file (CRTFILE parameter) so that it has the same format as the open query file. Only the name, type, length, and decimal positions of each field in the open query format are used.
</li>
<li>Copy a specified number or all of the records from an open query file depending if NBRRCDS(*END) was used or if a specific number was specified on the NBRRCDS parameter.
</li>
</ul>
<p>Additional information about CPYFRMQRYF is in the Files and file systems topic in the iSeries Information Center at http://www.ibm.com/eserver/iseries/infocenter and the Database information in the iSeries Information Center at http://www.ibm.com/eserver/iseries/infocenter.
</p>
<p><b>Restrictions:</b>
</p>
<ol>
<li>The open query file used by the CPYFRMQRYF command must not use any DDM files (specified on the FILE parameter of the OPNQRYF command).
</li>
<li>A member cannot be copied to itself. This restriction means that a member specified by the TOFILE and TOMBR parameters of the CPYFRMQRYF command cannot have the same name as any member specified on the FILE parameter of the OPNQRYF command, nor can the member have the same qualified name as any physical file members used by logical files that are on the FILE parameter of the OPNQRYF command.
</li>
<li>When the CRTFILE(*YES) parameter is specified and the FROMOPNID parameter identifies a query file that has an associated trigger, the file created (TOFILE parameter) does not have the associated trigger. The Add Physical File Trigger (ADDPFTRG) command must be used to add a trigger to the file.
</li>
<li>In multithreaded jobs, this command is not threadsafe if the OPNQRYF command is not run in a threadsafe manner, or if copying to multiple database members, device files (except SPOOL(*YES) print files), distributed files, or DDM files of type *SNA. This command fails for distributed files that use relational databases of type *SNA and DDM files of type *SNA. It is threadsafe ONLY when copying to single database file members (local or DDM of type *IP) or SPOOL(*YES) print files provided the OPNQRYF command is run in a threadsafe manner.
</li>
</ol>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<hr size="2" width="100%">
<div>
<h3><a name="CPYFRMQRYF.PARAMETERS.TABLE">Parameters</a></h3>
<table border="1" cellpadding="4" cellspacing="0">
<!-- col1="10" col2="15" col3="30" col4="10" -->
<tr>
<th bgcolor="aqua" valign="bottom" align="left">Keyword</th>
<th bgcolor="aqua" valign="bottom" align="left">Description</th>
<th bgcolor="aqua" valign="bottom" align="left">Choices</th>
<th bgcolor="aqua" valign="bottom" align="left">Notes</th>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.FROMOPNID"><b>FROMOPNID</b></a></td>
<td valign="top">From open file identifier</td>
<td valign="top"><i>Name</i></td>
<td valign="top">Required, Positional 1</td>
</tr>
<tr>
<td valign="top" rowspan="3"><a href="#CPYFRMQRYF.TOFILE"><b>TOFILE</b></a></td>
<td valign="top">To file</td>
<td valign="top">Single values: *PRINT<br>Other values: <i>Qualified object name</i></td>
<td valign="top" rowspan="3">Required, Positional 2</td>
</tr>
<tr>
<td valign="top">Qualifier 1: To file</td>
<td valign="top"><i>Name</i></td>
</tr><tr>
<td valign="top">Qualifier 2: Library</td>
<td valign="top"><i>Name</i>, <b><u>*LIBL</u></b>, *CURLIB</td>
</tr><tr>
<td valign="top"><a href="#CPYFRMQRYF.TOMBR"><b>TOMBR</b></a></td>
<td valign="top">To member or label</td>
<td valign="top"><i>Name</i>, <b><u>*FIRST</u></b></td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.MBROPT"><b>MBROPT</b></a></td>
<td valign="top">Replace or add records</td>
<td valign="top"><b><u>*NONE</u></b>, *ADD, *REPLACE</td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.CRTFILE"><b>CRTFILE</b></a></td>
<td valign="top">Create file</td>
<td valign="top"><b><u>*NO</u></b>, *YES</td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.OUTFMT"><b>OUTFMT</b></a></td>
<td valign="top">Print format</td>
<td valign="top"><b><u>*CHAR</u></b>, *HEX</td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.NBRRCDS"><b>NBRRCDS</b></a></td>
<td valign="top">Number of records to copy</td>
<td valign="top"><i>Unsigned integer</i>, <b><u>*END</u></b></td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.FMTOPT"><b>FMTOPT</b></a></td>
<td valign="top">Record format field mapping</td>
<td valign="top">Single values: <b><u>*NONE</u></b>, *NOCHK, *CVTSRC<br>Other values (up to 2 repetitions): *MAP, *DROP</td>
<td valign="top">Optional</td>
</tr>
<tr>
<td valign="top"><a href="#CPYFRMQRYF.ERRLVL"><b>ERRLVL</b></a></td>
<td valign="top">Errors allowed</td>
<td valign="top"><i>Unsigned integer</i>, <b><u>0</u></b>, *NOMAX</td>
<td valign="top">Optional</td>
</tr>
</table>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
</div>
<div> <a name="CPYFRMQRYF.FROMOPNID"></a>
<h3>From open file identifier (FROMOPNID)</h3>
<p>Specifies the name used on the OPNQRYF command for identifying the open identifier for the query file. You must specify an open identifier associated with an open query file that allows input, update, or all operations specified by the OPNID and OPTION parameters on the OPNQRYF command.
</p>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.TOFILE"></a>
<h3>To file (TOFILE)</h3>
<p>Specifies the file that receives the copied records.
</p>
<p>
<b>Note: </b>A device file can be a diskette file, tape file, or a program-described printer file.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b>*PRINT</b></dt>
<dd>The data is copied to a system printer device file (QSYSPRT) and formatted according to the value specified for the <b>Print format (OUTFMT)</b> parameter.
</dd>
</dl>
<p>The IBM-supplied printer file, QSYSPRT, may not be overridden to a different file name, and it must have the RPLUNPRT(*YES) and CTLCHAR(*NONE) attributes.
</p>
<p>The possible library values are:
</p>
<dl>
<dt><b><u>*LIBL</u></b></dt>
<dd>All libraries in the library list for the current thread are searched until the first match is found.
</dd>
</dl>
<dl>
<dt><b>*CURLIB</b></dt>
<dd>The current library for the job is used to locate the physical file or device file. If no library is specified as the current library, QGPL is used.
</dd>
<dt><b><i>library-name</i></b></dt>
<dd>Specify the name of the library where the physical file or device file is located.
</dd>
<dt><b><i>file-name</i></b></dt>
<dd>Specify the name and library of the physical file or device file that receives the copied records. If no library qualifier is specified, *LIBL is used to locate the file. However, if CRTFILE(*YES) is specified and the specified file cannot be found, the file name must be qualified with a library name. When the physical to-file is created, it is placed in the specified library.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.TOMBR"></a>
<h3>To member or label (TOMBR)</h3>
<p>Specifies the name of the file member that receives the copied records.
</p>
<p>If the to-file is a printer file, *FIRST must be specified for the <b>To member or label</b> prompt (TOMBR parameter).
</p>
<p>The possible values are:
</p>
<dl>
<dt><b>*FIRST</b></dt>
<dd>The first member of the specified file is used.
</dd>
</dl>
<dl>
<dt><b><i>member-name</i></b></dt>
<dd>Specify the name of the physical to-file member, or the label identifier of the diskette to-file, or tape to-file that receives the records. If a member with the specified name does not already exist in the physical to-file, the copy operation attempts to add a member with the specified name to the file.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.MBROPT"></a>
<h3>Replace or add records (MBROPT)</h3>
<p>Specifies whether the new records replace or are added to the existing records.
</p>
<p>
<b>Note: </b>If the copy is to an existing physical file, this parameter must specify either *ADD or *REPLACE. If the to-file does not exist but CRTFILE(*YES) is specified, the copy operation assumes MBROPT(*ADD) for all records copied to the file after it is created, regardless of the value specified on this parameter. The copied records are always physically added to the end of a database file member in the same order that they are retrieved from the open query file.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>*NONE</u></b></dt>
<dd>This parameter does not apply to this copy operation. When the to-file is an existing physical file, *NONE is not allowed; either *ADD or *REPLACE must be specified to indicate whether records should be added or replaced in each to-file member used.
</dd>
<dt><b>*ADD</b></dt>
<dd>The copied records are added to the existing records in each to-file member that is used.
</dd>
</dl>
<dl>
<dt><b>*REPLACE</b></dt>
<dd>The system clears the existing member and adds the new records.
</dd>
</dl>
<dl>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.CRTFILE"></a>
<h3>Create file (CRTFILE)</h3>
<p>Specifies whether a physical file is created to receive the data if the to-file does not exist. If the to-file already exists when this command is started, this parameter is ignored.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>*NO</u></b></dt>
<dd>The to-file must exist when this command is started. A physical file is not created to receive the data.
</dd>
<dt><b>*YES</b></dt>
<dd>If the to-file does not exist, a physical file is created that has the name specified on the <b>To file</b> prompt (TOFILE parameter). If the open query file format contains a user defined type, datalink, or LOB field type, the physical file created will be an SQL table. In all other instances the to-file created will be a database physical file that is not an SQL table. In addition to the normal copy operation validity checks, the following special conditions must all be true for the copy operation to create a to-file:
<ul>
<li>A library name must be specified on the <b>To file</b> prompt (TOFILE parameter). The default value *LIBL is not allowed.
</li>
<li>There cannot be an override to a different file or library name. The values specified on this command for the to-file must be used.
</li>
<li>The user running this command must be authorized to add the file to the TOFILE library and must have operational authority to the Create Physical File (CRTPF) command.
</li>
</ul>
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.OUTFMT"></a>
<h3>Print format (OUTFMT)</h3>
<p>Specifies whether records are printed in character format, or in both character and hexadecimal format. This parameter is used only when *PRINT is specified for the <b>To file (TOFILE)</b> parameter.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>*CHAR</u></b></dt>
<dd>Records are printed in character format.
</dd>
<dt><b>*HEX</b></dt>
<dd>Records are printed in both character and hexadecimal format.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.NBRRCDS"></a>
<h3>Number of records to copy (NBRRCDS)</h3>
<p>Specifies the number of records copied to the to-file.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>*END</u></b></dt>
<dd>Records are copied until the end-of-file condition is indicated.
</dd>
</dl>
<dl>
<dt><b><i>number-of-records</i></b></dt>
<dd>Specify a record number, ranging from 1 through 4294967288, that identifies the number of records copied to the to-file. Fewer records are copied if an end-of-file condition occurs before the specified number of records have been copied.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.FMTOPT"></a>
<h3>Record format field mapping (FMTOPT)</h3>
<p>Specifies, when the open query file is copied to a physical to-file, what field-level record format processing (if any) is done. If the to-file is a source physical file, *CVTSRC must be specified on this parameter. The CCSIDs for character and DBCS fields in the open query format are determined by the CCSID of the job in which the Open Query File (OPNQRYF) command is run. All CCSIDs other than 65535 are reset to the job CCSID of the OPNQRYF command, unless the OPNQRYF job CCSID is 65535, in which case the CCSIDs are unchanged. If the open query file format and to-file record formats are identical and the to-file is a data physical file, any FMTOPT value except *CVTSRC can be specified to perform the copy operation.
</p>
<p>
<b>Note: </b>Change the job CCSID to 65535 before running the OPNQRYF command if you plan to use the CPYFRMQRYF command.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>*NONE</u></b></dt>
<dd>No field mapping or field dropping is done during the copy operation. This value is valid only if the open query file and to-file have the same record format, or if the to-file is not a database file. The record formats are the same only if every field exists in both the open query file and to-file formats, and has the same starting position and attributes in both formats. Attributes include CCSIDs, whether or not a field is null-capable, and the date/time format and separator (if the field is a date/time field). Null values are copied if *NONE is valid and both files are database files.
</dd>
<dt><b>*NOCHK</b></dt>
<dd>If the record formats of the open query file and the to-file are different, the copy operation continues despite the differences. Record data is copied directly (left to right) from one file to the other.
</dd>
<dt><b>*CVTSRC</b></dt>
<dd>This value is used to copy to a source file. It is valid only when the to-file is a source file. If the to-file is a source file, sequence number and date fields are added, and the open query file record data is copied to the source data part of each to-file record. Null values are ignored and no conversion of date/time data occurs.
</dd>
<dt><b>*MAP</b></dt>
<dd>Fields with the same name in the open query file and to-file record formats are copied, and fields in the to-file that do not exist in the open query file format are set to the default value specified on the DFT keyword for the data description specification (DDS) of the to-file (or zero for numeric fields, blanks for character fields, current date/time for date/time fields, or the null value for null-capable fields). If *MAP is specified, *DROP can also be specified. Mapped fields may have different starting positions in the open query file and to-file record formats. *MAP allows for the conversion of date/time data and for the copying of null values.
</dd>
<dt><b>*DROP</b></dt>
<dd>This value must be specified for field-level mapping if any of the field names in the open query file record format do not exist in the to-file format. If *DROP is specified, *MAP can also be specified. When *DROP is specified, all the field names that exist in both record formats must have the same attributes and relative positions in the open query file and to-file record formats, or *MAP must also be specified.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<div> <a name="CPYFRMQRYF.ERRLVL"></a>
<h3>Errors allowed (ERRLVL)</h3>
<p>Specifies the maximum number of recoverable read or write errors that are tolerated for the file during the copy operation. The recoverable error count is reset at the beginning of each CPYFRMQRYF operation. If the number of recoverable errors handled is larger than the number specified on the ERRLVL parameter, the copy operation ends and a message is sent.
</p>
<p>The possible values are:
</p>
<dl>
<dt><b><u>0</u></b></dt>
<dd>If a recoverable error occurs, the copy operation ends.
</dd>
<dt><b>*NOMAX</b></dt>
<dd>No maximum number of errors is specified. All recoverable errors are tolerated. The copy operation continues regardless of the number of recoverable errors found.
</dd>
<dt><b><i>number-of-errors</i></b></dt>
<dd>Specify a value that specifies the maximum number of recoverable errors that is allowed for the copy operation. If one or more errors occur than the value specified here, the copy operation ends.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<hr size="2" width="100%">
<div><h3><a name="CPYFRMQRYF.COMMAND.EXAMPLES">Examples</a> </h3>
<p><b>Example 1: Building a File with a Subset of Records</b>
</p>
<p>
<pre>
OPNQRYF FILE(CUSTOMER/ADDRESS) QRYSLT('STATE *EQ "TEXAS"')
:
CPYFRMQRYF FROMOPNID(ADDRESS) TOFILE(TEXAS/ADDRESS)
CRTFILE(*YES)
</pre>
</p>
<p>These commands create a file from the CUSTOMER/ADDRESS file containing records that have a value of Texas in the STATE field.
</p>
<p><b>Example 2: Printing Records Based on Selection</b>
</p>
<p>
<pre>
OPNQRYF FILE(FILEA) QRYSLT('CITY *EQ "CHICAGO"')
:
CPYFRMQRYF FROMOPNID(FILEA) TOFILE(*PRINT)
</pre>
</p>
<p>These commands print all records from FILEA where the value of the CITY field is Chicago.
</p>
<p><b>Example 3: Copying a Subset of Records to a Diskette</b>
</p>
<p>
<pre>
OPNQRYF FILE(FILEB) QRYSLT('FIELDB *EQ "10"') OPNID(MYID)
:
CPYFRMQRYF FROMOPNID(MYID) TOFILE(DISK1)
</pre>
</p>
<p>These commands copy to a diskette file all records from FILEB where the value of FIELDB is 10.
</p>
<p><b>Example 4: Creating a Copy of the Output from a Dynamic Join</b>
</p>
<p>Assume a user wants to create a physical file with the format and data of FILEA and FILEB. Assume the files contain the following fields:
</p>
<p>
<pre>
FILEA FILEB JOINAB
----- ----- ------
Cust Cust Cust
Name Amt Name
addr Amt
</pre>
</p>
<p>
<pre>
OPNQRYF FILE(FILEA FILEB) FORMAT(JOINAB)
JFLD((FILEA/CUST FILEB/CUST))
MAPFLD((CUST 'FILEA/CUST')) OPNID(QRYFILE)
:
CPYFRMQRYF FROMOPNID(QRYFILE) TOFILE(MYLIB/FILEC)
CRTFILE(*YES)
</pre>
</p>
<p>These commands join FILEA and FILEB and save a copy of the results in a new physical file MYLIB/FILEC. The format of the file will be like JOINAB. The file will contain the data from the join of FILEA and FILEB using the Cust field. File FILEC in library MYLIB can be processed like any other physical file with CL commands (for example, Display Physical File Member (DSPPFM)) and utilities (for example, Query/400).
</p>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
<hr size="2" width="100%">
<div><h3><a name="CPYFRMQRYF.ERROR.MESSAGES">Error messages</a> </h3>
<p><b><u>*ESCAPE Messages</u></b>
</p>
<dl>
<dt><b>CPF2816</b></dt>
<dd>File &amp;1 in &amp;2 not copied because of error.
</dd>
<dt><b>CPF2817</b></dt>
<dd>Copy command ended because of error.
</dd>
<dt><b>CPF2858</b></dt>
<dd>File attributes not valid for printed output.
</dd>
<dt><b>CPF2859</b></dt>
<dd>Shared open data path not allowed.
</dd>
<dt><b>CPF2864</b></dt>
<dd>Not authorized to file &amp;1 in library &amp;2.
</dd>
<dt><b>CPF2875</b></dt>
<dd>Wrong file member or label opened.
</dd>
<dt><b>CPF2883</b></dt>
<dd>Error creating file &amp;1 in library &amp;2.
</dd>
<dt><b>CPF2888</b></dt>
<dd>Member &amp;3 not added to file because of error.
</dd>
<dt><b>CPF2909</b></dt>
<dd>Error clearing member &amp;3 in file &amp;1 in &amp;2.
</dd>
<dt><b>CPF2949</b></dt>
<dd>Error closing member &amp;3 in file &amp;1 in &amp;2.
</dd>
<dt><b>CPF2952</b></dt>
<dd>Error opening file &amp;1 in library &amp;2.
</dd>
<dt><b>CPF2971</b></dt>
<dd>Error reading member &amp;3 in file &amp;1.
</dd>
<dt><b>CPF2972</b></dt>
<dd>Error writing to member &amp;3 in file &amp;1.
</dd>
<dt><b>CPF2975</b></dt>
<dd>Error while reading from keyed file.
</dd>
<dt><b>CPF2976</b></dt>
<dd>Number of errors greater than ERRLVL value.
</dd>
<dt><b>CPF3140</b></dt>
<dd>Initialize or copy of member &amp;2 canceled.
</dd>
<dt><b>CPF3143</b></dt>
<dd>Increments not allowed for member &amp;2.
</dd>
<dt><b>CPF3148</b></dt>
<dd>New records need too much space for member &amp;2.
</dd>
<dt><b>CPF3150</b></dt>
<dd>Data base copy failed for member &amp;2.
</dd>
<dt><b>CPF9212</b></dt>
<dd>Cannot load or unload DDM file &amp;2 in &amp;3.
</dd>
</dl>
</div>
<table width="100%">
<tr><td align="right"><a href="#CPYFRMQRYF.Top_Of_Page">Top</a></td></tr>
</table>
</body>
</html>