Files
harbour-core/harbour/doc/en/dbstrux.txt
Viktor Szakats 45a114e471 2010-06-03 18:17 UTC+0200 Viktor Szakats (harbour.01 syenar.hu)
* tests/testsha1.prg
  * tests/longdev.prg
  * tests/clsccast.prg
  * tests/cmphello.prg
  * tests/clsicast.prg
  * tests/testop.prg
  * tests/clsscast.prg
  * tests/objarr.prg
  * tests/rddtest/rddmktst.prg
  * tests/rddtest/adscl52.prg
  * tests/rddtest/adscl53.prg
  * tests/rddtest/ntxcl52.prg
  * tests/rddtest/ntxcl53.prg
  * tests/rddtest/cdxcl52.prg
  * tests/rddtest/rddtst.prg
  * tests/rddtest/cdxcl53.prg
  * tests/transtst.prg
  * tests/output.prg
  * tests/ac_test2.prg
  * tests/clsscope.prg
  * tests/dosshell.prg
  * tests/sbartest.prg
  * tests/speedold.prg
  * tests/sdf_test.prg
  * tests/wcecon.prg
  * tests/debugtst.prg
  * tests/testdyn.c
  * tests/multiarg.prg
  * tests/fornext.prg
  * tests/hbinline.prg
  * tests/foreach2.prg
  * tests/objasign.prg
  * tests/scroll.prg
  * tests/inherit.prg
  * tests/rto_get.prg
  * tests/boxtst2.prg
  * tests/inkeytst.prg
  * tests/overload.prg
  * tests/cpinfo.prg
  * tests/gtwin.prg
  * tests/mt/mttest08.prg
  * tests/mt/mttest09.prg
  * tests/mt/mttest01.prg
  * tests/mt/mttest10.prg
  * tests/mt/mttest02.prg
  * tests/mt/mttest11.prg
  * tests/mt/mttest03.prg
  * tests/mt/mttest12.prg
  * tests/mt/mttest04.prg
  * tests/mt/mttest05.prg
  * tests/mt/mttest06.prg
  * tests/mt/mttest07.prg
  * tests/speedtst.prg
  * tests/testsha2.prg
  * tests/hsxtest.prg
  * tests/arrayidx.prg
  * tests/clsnv.prg
  * tests/rto_tb.prg
  * tests/gtchars.prg
  * tests/disptest.prg
  * tests/funcarr.prg
  * tests/testhtml.prg
  * tests/readhrb.prg
  * tests/tstcolor.prg
  * tests/gtxfnt.prg
  * tests/devtest.prg
  * tests/aliaslck.prg
  * tests/stripem.prg
  * tests/dynobj.prg
  * tests/tb1.prg
  * tests/round.prg
  * tests/longstr.prg
  * tests/testdyn.prg
  * tests/testdyn1.prg
  * tests/delimtst.prg
  * tests/tstdspac.prg
  * tests/version.prg
  * tests/setkeys.prg
  * tests/gtcolors.prg
  * tests/destruct.prg
  * tests/seconds.prg
  * tests/gtkeys.prg
  * tests/usrrdd/exarr.prg
  * doc/en/diskspac.txt
  * doc/en/string.txt
  * doc/en/rdd.txt
  * doc/en/hashes.txt
  * doc/en/hb_apigt.txt
  * doc/en/rddord.txt
  * doc/en/hb_api.txt
  * doc/en/hb_date.txt
  * doc/en/math.txt
  * doc/en/hb_vm.txt
  * doc/en/treport.txt
  * doc/en/terminal.txt
  * doc/en/hb_apiln.txt
  * doc/en/dir.txt
  * doc/en/command.txt
  * doc/en/rddmisc.txt
  * doc/en/errsys.txt
  * doc/en/nation.txt
  * doc/en/var.txt
  * doc/en/dbstrux.txt
  * doc/en/datetime.txt
  * doc/en/memo.txt
  * doc/en/tgetlist.txt
  * doc/en/tlabel.txt
  * doc/en/1stread.txt
  * doc/en/hb_set.txt
  * doc/en/hb_compa.txt
  * doc/en/hb_apier.txt
  * doc/en/hbinet.txt
  * doc/en/hb_macro.txt
  * doc/en/array.txt
  * doc/en/hb_apiit.txt
  * doc/en/rdddb.txt
  * doc/en/dbsdf.txt
  * doc/en/hvm.txt
  * doc/en/input.txt
  * doc/en/dbdelim.txt
  * doc/en/browse.txt
  * doc/en/menu.txt
  * doc/en/hb_apird.txt
  * doc/en/hb_apifs.txt
  * doc/en/file.txt
  * doc/en/lang.txt
  * doc/en/objfunc.txt
  * doc/en/eval.txt
  * doc/en/binnum.txt
  * doc/en/tclass.txt
  * doc/en/misc.txt
  * doc/en/set.txt
  * doc/en/readme.txt
  * doc/man/harbour.1
  * doc/man/hbmk2.1
  * doc/man/hbpp.1
  * doc/man/hbtest.1
  * doc/man/hbrun.1
  * examples/hbextern/hbextern.prg
  * examples/pp/pp.c
  * examples/pp/hbpragma.c
  * examples/pp/hbppcore.c
  * examples/pp/hbppcomp.c
  * examples/pp/hbpptbl.c
  * examples/pp/hbppdef.h
  * examples/superlib/hbsuper.prg
  * examples/hbsqlit2/hbsqlit2.ch
  * examples/misc/mankala.prg
  * examples/misc/guess.prg
  * examples/rddado/adordd.prg
  * examples/rddado/adordd.ch
  * examples/hbapollo/apollo.ch
  * examples/hbapollo/apollo.c
  * examples/hbapollo/apollo1.prg
  * examples/hbdoc2/gentpl.prg
  * examples/hbdoc2/gentxt.prg
  * examples/hbdoc2/tmplates.prg
  * examples/hbdoc2/genxml.prg
  * examples/hbdoc2/genhtml.prg
  * examples/hbdoc2/hbdoc2.prg
  * examples/hbdoc2/hbdoc2.ch
  * examples/guestbk/guestbk.prg
  * examples/httpsrv/uhttpd.ini
  * examples/httpsrv/uhttpd.prg
  * examples/httpsrv/cookie.prg
  * examples/httpsrv/cgifunc.prg
  * examples/httpsrv/session.prg
  * examples/terminal/trm_cli.prg
  * examples/terminal/terminal.prg
  * examples/terminal/trm_srv.prg
  * examples/terminal/trm_app.prg
  * examples/hbbtree/hb_btree.h
  * examples/hbbtree/hb_btree.ch
  * examples/hbbtree/hb_btree.c
  * examples/hbbtree/tbtree.prg
  * examples/hscript/hscript.prg
  * examples/hscript/dir.hs
  * examples/hscript/multiply.hs
  * examples/hscript/ugly.hs
  * examples/hscript/hello.hs
  * examples/gtwvw/hbole.h
  * examples/gtwvw/wvwdraw.c
  * examples/gtwvw/wvwmenu.c
  * examples/gtwvw/gtwvw.c
  * examples/gtwvw/wvwstbar.c
  * examples/gtwvw/wvwcheck.c
  * examples/gtwvw/wvwfuncs.c
  * examples/gtwvw/wvwpush.c
  * examples/gtwvw/wvwedit.c
  * examples/gtwvw/wvwtbar.c
  * examples/gtwvw/hbgtwvw.h
    * Deleted 'www.' from harbour-project.org website name.
      (www.harbour-project.org -> harbour-project.org)
2010-06-03 16:23:36 +00:00

712 lines
24 KiB
Plaintext

/*
* $Id$
*/
/*
* The following parts are Copyright of the individual authors.
* www - http://harbour-project.org
*
* Copyright 2000 Chen Kedem <niki@actcom.co.il>
* Documentation for: __dbCopyStruct(), COPY STRUCTURE, __dbCopyXStruct(),
* COPY STRUCTURE EXTENDED, __dbCreate(), CREATE,
* CREATE FROM, __FLEDIT(), __dbStructFilter()
*
* See COPYING for licensing terms.
*
*/
/* $DOC$
* $TEMPLATE$
* Procedure
* $NAME$
* __dbCopyStruct()
* $CATEGORY$
* API
* $SUBCATEGORY$
* Database
* $ONELINER$
* Create a new database based on current database structure
* $SYNTAX$
* __dbCopyStruct( <cFileName>, [<aFieldList>] )
* $ARGUMENTS$
* <cFileName> is the name of the new database file to create. (.dbf)
* is the default extension if none is given.
*
* <aFieldList> is an array where each element is a field name.
* Names could be specified as uppercase or lowercase.
* $DESCRIPTION$
* __dbCopyStruct() create a new empty database file with a structure
* that is based on the currently open database in this work-area. If
* <aFieldList> is empty, the newly created file would have the same
* structure as the currently open database. Else, the new file would
* contain only fields that exactly match <aFieldList>.
*
* __dbCopyStruct() can be use to create a sub-set of the currently
* open database, based on a given field list.
*
* COPY STRUCTURE command is preprocessed into __dbCopyStruct()
* function during compile time.
* $EXAMPLES$
* // Create a new file that contain the same structure
* USE TEST
* __dbCopyStruct( "mycopy.dbf" )
*
* // Create a new file that contain part of the original structure
* LOCAL aList
* USE TEST
* aList := { "NAME" }
* __dbCopyStruct( "onlyname.dbf", aList )
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $FILES$
* Library is rdd
* $SEEALSO$
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,DBCREATE(),DBSTRUCT(),__dbCopyXStruct(),__dbCreate(),__dbStructFilter()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Command
* $NAME$
* COPY STRUCTURE
* $CATEGORY$
* Command
* $SUBCATEGORY$
* Database
* $ONELINER$
* Create a new database based on current database structure
* $SYNTAX$
* COPY STRUCTURE TO <xcFileName> [FIELDS <field,...>]
* $ARGUMENTS$
* <b>TO <xcFileName></b> is the name of the new database file to
* create. (.dbf) is the default extension if none is given. It can be
* specified as a literal file name or as a character expression
* enclosed in parentheses.
*
* <b>FIELDS <field,...></b> is an optional list of field names to copy
* from the currently open database in the specified order, the default
* is all fields. Names could be specified as uppercase or lowercase.
* $DESCRIPTION$
* COPY STRUCTURE create a new empty database file with a structure
* that is based on the currently open database in this work-area.
*
* COPY STRUCTURE can be use to create a sub-set of the currently
* open database, based on a given field list.
*
* COPY STRUCTURE command is preprocessed into __dbCopyStruct()
* function during compile time.
* $EXAMPLES$
* // Create a new file that contains the same structure
* USE TEST
* COPY STRUCTURE TO MyCopy
*
* // Create a new file that contains part of the original structure
* USE TEST
* COPY STRUCTURE TO SomePart FIELDS name, address
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $SEEALSO$
* COPY STRUCTURE EXTENDED,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate(),__dbStructFilter()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* __dbCopyXStruct()
* $CATEGORY$
* API
* $SUBCATEGORY$
* Database
* $ONELINER$
* Copy current database structure into a definition file
* $SYNTAX$
* __dbCopyXStruct( <cFileName> ) --> lSuccess
* $ARGUMENTS$
* <cFileName> is the name of target definition file to create. (.dbf)
* is the default extension if none is given.
* $RETURNS$
* __dbCopyXStruct() returns .F. if no database is USED in the current
* work-area, .T. on success, or a run-time error if the file create
* operation had failed.
* $DESCRIPTION$
* __dbCopyXStruct() create a new database named <cFileName> with a
* pre-defined structure (also called "structure extended file"):
*
* <table>
* Field name Type Length Decimals
*
* FIELD_NAME C 10 0
* FIELD_TYPE C 1 0
* FIELD_LEN N 3 0
* FIELD_DEC N 3 0
* </table>
*
* Each record in the new file contains information about one field in
* the original file. CREATE FROM could be used to create a database
* from the structure extended file.
*
* For prehistoric compatibility reasons, Character fields which are
* longer than 255 characters are treated in a special way by writing
* part of the length in the FIELD_DEC according to the following
* formula (this is done internally):
*
* <fixed>
* FIELD->FIELD_DEC := int( nLength / 256 )
* FIELD->FIELD_LEN := ( nLength % 256 )
* </fixed>
*
* Later if you want to calculate the length of a field you can use
* the following formula:
*
* <fixed>
* nLength := IIF( FIELD->FIELD_TYPE == "C", ;
* FIELD->FIELD_DEC * 256 + FIELD->FIELD_LEN, ;
* FIELD->FIELD_LEN )
* </fixed>
*
* COPY STRUCTURE EXTENDED command is preprocessed into
* __dbCopyXStruct() function during compile time.
* $EXAMPLES$
* // Open a database, then copy its structure to a new file,
* // Open the new file and list all its records
* USE Test
* __dbCopyXStruct( "TestStru" )
* USE TestStru
* LIST
* $TESTS$
*
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $FILES$
* Library is rdd
* $SEEALSO$
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCreate()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Command
* $NAME$
* COPY STRUCTURE EXTENDED
* $CATEGORY$
* Command
* $SUBCATEGORY$
* Database
* $ONELINER$
* Copy current database structure into a definition file
* $SYNTAX$
* COPY STRUCTURE EXTENDED TO <xcFileName>
* $ARGUMENTS$
* <xcFileName> The name of the target definition file to
* create. (.dbf) is the default extension if none is given. It can be
* specified as a literal file name or as a character expression
* enclosed in parentheses.
* $DESCRIPTION$
* COPY STRUCTURE EXTENDED create a new database named <cFileName> with
* a pre-defined structure (also called "structure extended file"):
*
* <table>
* Field name Type Length Decimals
*
* FIELD_NAME C 10 0
* FIELD_TYPE C 1 0
* FIELD_LEN N 3 0
* FIELD_DEC N 3 0
* </table>
*
* Each record in the new file contains information about one field in
* the original file. CREATE FROM could be used to create a database
* from the structure extended file.
*
* For prehistoric compatibility reasons, Character fields which are
* longer than 255 characters are treated in a special way by writing
* part of the length in the FIELD_DEC according to the following
* formula (this is done internally):
*
* <fixed>
* FIELD->FIELD_DEC := int( nLength / 256 )
* FIELD->FIELD_LEN := ( nLength % 256 )
* </fixed>
*
* Later if you want to calculate the length of a field you can use
* the following formula:
*
* <fixed>
* nLength := IIF( FIELD->FIELD_TYPE == "C", ;
* FIELD->FIELD_DEC * 256 + FIELD->FIELD_LEN, ;
* FIELD->FIELD_LEN )
* </fixed>
*
* COPY STRUCTURE EXTENDED command is preprocessed into
* __dbCopyXStruct() function during compile time.
* $EXAMPLES$
* // Open a database, then copy its structure to a new file,
* // Open the new file and list all its records
* USE Test
* COPY STRUCTURE EXTENDED TO TestStru
* USE TestStru
* LIST
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $SEEALSO$
* COPY STRUCTURE,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* __dbCreate()
* $CATEGORY$
* API
* $SUBCATEGORY$
* Database
* $ONELINER$
* Create structure extended file or use one to create new file
* $SYNTAX$
* __dbCreate( <cFileName>, [<cFileFrom>], [<cRDDName>], [<lNew>], [<cAlias>] ) --> lUsed
* $ARGUMENTS$
* <cFileName> is the target file name to create and then open. (.dbf)
* is the default extension if none is given.
*
* <cFileFrom> is an optional structure extended file name from which
* the target file <cFileName> is going to be built. If omitted, a new
* empty structure extended file with the name <cFileName> is created
* and opened in the current work-area.
*
* <cRDDName> is RDD name to create target with. If omitted, the
* default RDD is used.
*
* <lNew> is an optional logical expression, (.T.) opens the target file
* name <cFileName> in the next available unused work-area and makes
* it the current work-area. (.F.) opens the target file in the current
* work-area. Default value is (.F.). The value of <lNew> is ignored if
* <cFileFrom> is not specified.
*
* <cAlias> is an optional alias to USE the target file with. If not
* specified, alias is based on the root name of <cFileName>.
* $RETURNS$
* __dbCreate() returns (.T.) if there is database USED in the
* current work-area (this might be the newly selected work-area), or
* (.F.) if there is no database USED. Note that on success a (.T.)
* would be returned, but on failure you probably end up with a
* run-time error and not a (.F.) value.
* $DESCRIPTION$
* __dbCreate() works in two modes depending on the value of <cFileFrom>:
*
* <b>1)</b> If <cFileFrom> is empty or not specified a new empty
* structure extended file with the name <cFileName> is created and
* then opened in the current work-area (<lNew> is ignored). The new
* file has the following structure:
*
* <table>
* Field name Type Length Decimals
*
* FIELD_NAME C 10 0
* FIELD_TYPE C 1 0
* FIELD_LEN N 3 0
* FIELD_DEC N 3 0
* </table>
*
* The CREATE command is preprocessed into the __dbCopyStruct() function
* during compile time and uses this mode.
*
* <b>2)</b> If <cFileFrom> is specified, it is opened and assumed to
* be a structure extended file where each record contains at least the
* following fields (in no particular order): FIELD_NAME, FIELD_TYPE,
* FIELD_LEN and FIELD_DEC. Any other field is ignored. From this
* information the file <cFileName> is then created and opened in the
* current or new work-area (according to <lNew>), if this is a new
* work-area it becomes the current.
*
* For prehistoric compatibility reasons, structure extended file
* Character fields which are longer than 255 characters should be
* treated in a special way by writing part of the length in the
* FIELD_DEC according to the following formula:
*
* <fixed>
* FIELD->FIELD_DEC := int( nLength / 256 )
* FIELD->FIELD_LEN := ( nLength % 256 )
* </fixed>
*
* CREATE FROM command is preprocessed into __dbCopyStruct() function
* during compile time and use this mode.
* $EXAMPLES$
* // CREATE a new structure extended file, append some records and
* // then CREATE FROM this file a new database file
*
* __dbCreate( "template" )
* DBAPPEND()
* FIELD->FIELD_NAME := "CHANNEL"
* FIELD->FIELD_TYPE := "N"
* FIELD->FIELD_LEN := 2
* FIELD->FIELD_DEC := 0
* DBAPPEND()
* FIELD->FIELD_NAME := "PROGRAM"
* FIELD->FIELD_TYPE := "C"
* FIELD->FIELD_LEN := 20
* FIELD->FIELD_DEC := 0
* DBAPPEND()
* FIELD->FIELD_NAME := "REVIEW"
* FIELD->FIELD_TYPE := "C" // this field is 1000 char long
* FIELD->FIELD_LEN := 232 // 1000 % 256 = 232
* FIELD->FIELD_DEC := 3 // 1000 / 256 = 3
* DBCLOSEAREA()
* __dbCreate( "TV_Guide", "template" )
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $FILES$
* Library is rdd
* $SEEALSO$
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Command
* $NAME$
* CREATE
* $CATEGORY$
* Command
* $SUBCATEGORY$
* Database
* $ONELINER$
* Create empty structure extended file
* $SYNTAX$
* CREATE <xcFileName> [VIA <xcRDDName>] [ALIAS <xcAlias>]
* $ARGUMENTS$
* <xcFileName> is the target file name to create and then open. (.dbf)
* is the default extension if none is given. It can be specified as
* literal file name or as a character expression enclosed in
* parentheses.
*
* <b>VIA <xcRDDName></b> is RDD name to create target with. If omitted,
* the default RDD is used. It can be specified as literal name or as a
* character expression enclosed in parentheses.
*
* <b>ALIAS <xcAlias></b> is an optional alias to USE the target file
* with. If not specified, alias is based on the root name of
* <xcFileName>.
* $DESCRIPTION$
* CREATE a new empty structure extended file with the name <cFileName>
* and then open it in the current work-area. The new file has the
* following structure:
*
* <table>
* Field name Type Length Decimals
*
* FIELD_NAME C 10 0
* FIELD_TYPE C 1 0
* FIELD_LEN N 3 0
* FIELD_DEC N 3 0
* </table>
*
* CREATE command is preprocessed into __dbCopyStruct() function during
* compile time and use this mode.
* $EXAMPLES$
* // CREATE a new structure extended file, append some records and
* // then CREATE FROM this file a new database file
*
* CREATE template
* APPEND BLANK
* FIELD->FIELD_NAME := "CHANNEL"
* FIELD->FIELD_TYPE := "N"
* FIELD->FIELD_LEN := 2
* FIELD->FIELD_DEC := 0
* APPEND BLANK
* FIELD->FIELD_NAME := "PROGRAM"
* FIELD->FIELD_TYPE := "C"
* FIELD->FIELD_LEN := 20
* FIELD->FIELD_DEC := 0
* APPEND BLANK
* FIELD->FIELD_NAME := "REVIEW"
* FIELD->FIELD_TYPE := "C" // this field is 1000 char long
* FIELD->FIELD_LEN := 232 // 1000 % 256 = 232
* FIELD->FIELD_DEC := 3 // 1000 / 256 = 3
* CLOSE
* CREATE TV_Guide FROM template
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $SEEALSO$
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE FROM,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Command
* $NAME$
* CREATE FROM
* $CATEGORY$
* Command
* $SUBCATEGORY$
* Database
* $ONELINER$
* Create new database file from a structure extended file
* $SYNTAX$
* CREATE <xcFileName> FROM <xcFileFrom> [VIA <xcRDDName>] [NEW] [ALIAS <xcAlias>]
* $ARGUMENTS$
* <xcFileName> is the target file name to create and then open. (.dbf)
* is the default extension if none is given. It can be specified as
* literal file name or as a character expression enclosed in
* parentheses.
*
* <b>FROM <xcFileFrom></b> is a structure extended file name from
* which the target file <xcFileName> is going to be built. It can be
* specified as literal file name or as a character expression enclosed
* in parentheses.
*
* <b>VIA <xcRDDName></b> is RDD name to create target with. If omitted,
* the default RDD is used. It can be specified as literal name or as a
* character expression enclosed in parentheses.
*
* <b>NEW</b> open the target file name <xcFileName> in the next
* available unused work-area and making it the current work-area. If
* omitted open the target file in current work-area.
*
* <b>ALIAS <xcAlias></b> is an optional alias to USE the target file
* with. If not specified, alias is based on the root name of
* <xcFileName>.
* $DESCRIPTION$
* CREATE FROM open a structure extended file <xcFileFrom> where each
* record contain at least the following fields (in no particular
* order): FIELD_NAME, FIELD_TYPE, FIELD_LEN and FIELD_DEC. Any other
* field is ignored. From this information the file <xcFileName> is
* then created and opened in the current or new work-area (according to
* the NEW clause), if this is a new work-area it becomes the current.
*
* For prehistoric compatibility reasons, structure extended file
* Character fields which are longer than 255 characters should be
* treated in a special way by writing part of the length in the
* FIELD_DEC according to the following formula:
*
* <fixed>
* FIELD->FIELD_DEC := int( nLength / 256 )
* FIELD->FIELD_LEN := ( nLength % 256 )
* </fixed>
*
* CREATE FROM command is preprocessed into __dbCopyStruct() function
* during compile time and uses this mode.
* $EXAMPLES$
* See example in the CREATE command
* $STATUS$
* R
* $COMPLIANCE$
* C
* $PLATFORMS$
* All
* $SEEALSO$
* COPY STRUCTURE,COPY STRUCTURE EXTENDED,CREATE,DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbCopyXStruct(),__dbCreate()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* __FLEDIT()*
* $CATEGORY$
* API
* $SUBCATEGORY$
* Database
* $ONELINER$
* Filter a database structure array
* $SYNTAX$
* __FLEDIT( <aStruct>, [<aFieldList>] ) --> aStructFiltered
* $ARGUMENTS$
* <aStruct> is a multidimensional array with database fields
* structure, which is usually the output from DBSTRUCT(), where each
* array element has the following structure:
*
* <table>
* Position Description dbstruct.ch
*
* 1 cFieldName DBS_NAME
* 2 cFieldType DBS_TYPE
* 3 nFieldLength DBS_LEN
* 4 nDecimals DBS_DEC
* </table>
*
* <aFieldList> is an array where each element is a field name.
* Names could be specified as uppercase or lowercase.
* $RETURNS$
* __FLEDIT() return a new multidimensional array where each element is
* in the same structure as the original <aStruct>, but the array is
* built according to the list of fields in <aFieldList>. If
* <aFieldList> is empty, __FLEDIT() return reference to the original
* <aStruct> array.
* $DESCRIPTION$
* __FLEDIT() can be use to create a sub-set of a database structure,
* based on a given field list.
*
* Note that field names in <aStruct> MUST be specified in uppercase
* or else no match would found.
*
* SET EXACT has no effect on the return value.
*
* __FLEDIT() is a compatibility function and it is synonym for
* __dbStructFilter() which does exactly the same.
* $EXAMPLES$
* LOCAL aStruct, aList, aRet
* aStruct := { { "CODE", "N", 4, 0 }, ;
* { "NAME", "C", 10, 0 }, ;
* { "PHONE", "C", 13, 0 }, ;
* { "IQ", "N", 3, 0 } }
* aList := { "IQ", "NAME" }
* aRet := __FLEDIT( aStruct, aList )
* // { { "IQ", "N", 3, 0 }, { "NAME", "C", 10, 0 } }
*
* aRet := __FLEDIT( aStruct, {} )
* ? aRet == aStruct // .T.
*
* aList := { "iq", "NOTEXIST" }
* aRet := __FLEDIT( aStruct, aList )
* // { { "IQ", "N", 3, 0 } }
*
* aList := { "NOTEXIST" }
* aRet := __FLEDIT( aStruct, aList ) // {}
*
*
* // Create a new file that contain part of the original structure
* LOCAL aStruct, aList, aRet
* USE TEST
* aStruct := DBSTRUCT()
* aList := { "NAME" }
* DBCREATE( "onlyname.dbf", __FLEDIT( aStruct, aList ) )
* $STATUS$
* R
* $COMPLIANCE$
* CA-Cl*pper has internal undocumented function named __FLEDIT(),
* in Harbour we name it __dbStructFilter(). The new name gives a better
* description of what this function does. In Harbour __FLEDIT() simply
* calls __dbStructFilter() and therefor the latter is the recommended
* function to use.
*
* This function is only visible if src/rdd/dbstrux.prg was compiled
* with the HB_CLP_UNDOC flag.
* $PLATFORMS$
* All
* $FILES$
* Header file is dbstruct.ch
* Library is rdd
* $SEEALSO$
* DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__dbStructFilter()
* $END$
*/
/* $DOC$
* $TEMPLATE$
* Function
* $NAME$
* __dbStructFilter()
* $CATEGORY$
* API
* $SUBCATEGORY$
* Database
* $ONELINER$
* Filter a database structure array
* $SYNTAX$
* __dbStructFilter( <aStruct>, [<aFieldList>] ) --> aStructFiltered
* $ARGUMENTS$
* <aStruct> is a multidimensional array with database fields
* structure, which is usually the output from DBSTRUCT(), where each
* array element has the following structure:
*
* <table>
* Position Description dbstruct.ch
*
* 1 cFieldName DBS_NAME
* 2 cFieldType DBS_TYPE
* 3 nFieldLength DBS_LEN
* 4 nDecimals DBS_DEC
* </table>
*
* <aFieldList> is an array where each element is a field name.
* Names could be specified as uppercase or lowercase.
* $RETURNS$
* __dbStructFilter() return a new multidimensional array where each
* element is in the same structure as the original <aStruct>, but the
* array is built according to the list of fields in <aFieldList>. If
* <aFieldList> is empty, __dbStructFilter() return reference to the
* original <aStruct> array.
* $DESCRIPTION$
* __dbStructFilter() can be use to create a sub-set of a database
* structure, based on a given field list.
*
* Note that field names in <aStruct> MUST be specified in uppercase
* or else no match would be found.
*
* SET EXACT has no effect on the return value.
* $EXAMPLES$
* LOCAL aStruct, aList, aRet
* aStruct := { { "CODE", "N", 4, 0 }, ;
* { "NAME", "C", 10, 0 }, ;
* { "PHONE", "C", 13, 0 }, ;
* { "IQ", "N", 3, 0 } }
* aList := { "IQ", "NAME" }
* aRet := __dbStructFilter( aStruct, aList )
* // { { "IQ", "N", 3, 0 }, { "NAME", "C", 10, 0 } }
*
* aRet := __dbStructFilter( aStruct, {} )
* ? aRet == aStruct // .T.
*
* aList := { "iq", "NOTEXIST" }
* aRet := __dbStructFilter( aStruct, aList )
* // { { "IQ", "N", 3, 0 } }
*
* aList := { "NOTEXIST" }
* aRet := __dbStructFilter( aStruct, aList ) // {}
*
*
* // Create a new file that contain part of the original structure
* LOCAL aStruct, aList, aRet
* USE TEST
* aStruct := DBSTRUCT()
* aList := { "NAME" }
* DBCREATE( "onlyname.dbf", __dbStructFilter( aStruct, aList ) )
* $STATUS$
* R
* $COMPLIANCE$
* __dbStructFilter() is a Harbour extension. CA-Cl*pper has an internal
* undocumented function named __FLEDIT() that does exactly the same
* thing. The new name gives a better description of what this function does.
* $PLATFORMS$
* All
* $FILES$
* Header file is dbstruct.ch
* Library is rdd
* $SEEALSO$
* DBCREATE(),DBSTRUCT(),__dbCopyStruct(),__FLEDIT()*
* $END$
*/