**************************************************************************** ---------------------------------------------------------------------------- | IMPORTANT - PLEASE READ ---------------------------------------------------------------------------- | | You have a royalty-free right to use, modify, reproduce and distribute | the software found in these sample files provided, however, that: (a) | you agree that the MS software is PROVIDED "AS IS" WITHOUT | WARRANTY OF ANY KIND and in no event shall MS be liable for | any damages whatsoever in connection with your use of the software; | and (b) the utilities are redististributed solely in conjunction with and | as part of your software application. | | Copyright 1993 Microsoft Corporation. All Rights Reserved. | Microsoft and MS-DOS are registered trademarks and Microsoft Access and | Windows are trademarks of Microsoft Corporation. **************************************************************************** OVERVIEW -------- The Microsoft Access Data Definition Language Dynamic Link Library (MSADDL11.DLL) provides data definition support beyond that provided by standard Microsoft Access. GOALS ----- To enable the Access Basic programmer to create and alter tables, fields, indexes, and relationships, and then use those tables in Microsoft Access and Access Basic. CAUTIONS -------- This Utility is provided specifically as an aid to developers who need additional data definition information not provided in the Microsoft Access retail documentation. As with any DLL, passing an incorrect argument type or value could result in General Protection Fault (GPF) errors. If this happens, carefully check your arguments. This Utility includes an include file (MSA_DDL.TXT) that you can use to declare these functions. This Utility is not supported by Microsoft; as such, you should save your work-in-progress frequently to avoid loss of data. **************************************************************************** DESCRIPTION OF THE DATA DEFINITION DDL -------------------------------------- The Data Definition interface is a Dynamic Link Library (DLL) you can call from Access Basic. Its purpose is to allow Access Basic programmers to programatically manipulate table definitions and data relationships. For example, this DLL lets you create tables via Access Basic code. (Note: You can use these functions only with Microsoft Access databases and tables, and not with any other databases or tables.) Table 1 lists the functions provided by MSADDL11.DLL. Each function is fully described later in this document. Table 1. MSADDL11.DLL Functions ---------------------------------------------------------------------- Function Name Purpose ------------------------- -------------------------------------------- AccessDDLStartEngine Initializes Microsoft Access database engine AccessDDLStopEngine Stops the database engine AccessDDLOpenDatabase Opens a specified Microsoft Access database AccessDDLCloseDatabase Closes the database AccessDDLOpenTable Opens an existing table AccessDDLCloseTable Closes an open table AccessDDLCreateTable Creates a new table AccessDDLDeleteTable Deletes an existing table AccessDDLRenameTable Renames an existing table AccessDDLAddField Adds a new field to a table AccessDDLDeleteField Deletes an existing field AccessDDLRenameField Renames an existing field AccessDDLCreateIndex Creates a new index in an existing table AccessDDLDeleteIndex Deletes an existing index AccessDDLRenameIndex Renames an existing index AccessDDLCreateReference Creates a new relationship between tables AccessDDLDeleteReference Deletes an existing relationship **************************************************************************** GENERAL DDL PROCEDURE --------------------- Before you can create, alter, or delete a table, field, index, or relationship, you must first use the AccessDDLStartEngine function to initialize the Microsoft Access ISAM database engine. When you are finished with all DDL operations, use the AccessDDLStopEngine function. The following figure illustrates this general procedure. Figure 1. General DDL Procedure ---------------------------------------------------------------------- AccessDDLStartEngine AccessDDLOpenDatabase AccessDDLOpenTable ' Perform field, index, and relationship operations. AccessDDLCloseTable AccessDDLCreateTable ' Perform field, index, and relationship operations. AccessDDLCloseTable AccessDDLCloseDatabase AccessDDLStopEngine **************************************************************************** OTHER CONSIDERATIONS -------------------- The various functions in MSADDL11.DLL don't let you set all of the properties normally available in MS Access table design (such as Description and Validation Rule). To set or change these properties, you must use the regular table design feature of Microsoft Access. **************************************************************************** FUNCTION DESCRIPTIONS --------------------- AccessDDLStartEngine Function Description Performs the initialization required to use the Microsoft Access ISAM database engine. Syntax AccessDDLStartEngine(SysDBName, INIFileName, UserName, Password) Remarks The AccessDDLStartEngine function uses the following arguments. Argument Description -------------- ------------------------------------------ SysDBName String that identifies the path and name of the system database file; must be a valid operating system path; this argument is ignored when AccessDDLStartEngine is called from Access Basic, since the path and name have already been established. INIFileName String that identifies the path and name of the INI file; length may not exceed 14 characters; this argument is ignored when AccessDDLStartEngine is called from Access Basic, since the path and name have already been established. UserName String that is that name of the current user. Password String that is the current user's password. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrAlreadyInitialized AccessDDLStartEngine already called. ACCESSDDL_ErrInvalidAccountName Couldn't find account name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidPassword Incorrect or invalid password. ACCESSDDL_ErrPermissionDenied Invalid DatabaseID argument. ACCESSDDL_ErrTooManyTasks Too many concurrent DDL instances. AccessDDLStopEngine Function Description Stops the Microsoft Access ISAM database engine and closes the current session. Syntax AccessDDLStopEngine() Remarks The AccessDDLStopEngine function accepts no arguments. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLOpenDatabase Function Description Opens an existing Microsoft Access database to allow subsequent DDL operations. Syntax AccessDDLOpenDatabase(DatabaseName, DatabaseID) Remarks The AccessDDLOpenDatabase function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseName String that is name of the database, including the path. DatabaseID Long integer returned by the function that identifies the database. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrDatabaseInvalidName Invalid database name. ACCESSDDL_ErrDatabaseNotFound Couldn't find specified database. ACCESSDDL_ErrFileAccessDenied Couldn't open the specified database. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrPermissionDenied Database file is read-only. ACCESSDDL_ErrTooManyOpenFiles No MS-DOS file handle available. This function may also return various error codes associated with resource failure. AccessDDLCloseDatabase Function Description Closes a database previously opened with the AccessDDLOpenDatabase function. Syntax AccessDDLCloseDatabase(DatabaseID) Remarks The AccessDDLCloseDatabase function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that is the ID of the database to be closed. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrDatabaseCloseError Couldn't close database file. ACCESSDDL_ErrDatabaseNotFound Couldn't find database or database not open. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. This function may also return various error codes associated with resource failure. AccessDDLOpenTable Function Description Opens an existing Microsoft Access table to allow subsequent DDL operations. Syntax AccessDDLOpenTable(DatabaseID, TableName, TableID); Remarks The AccessDDLOpenTable function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that identifies the database that contains the table to be opened. TableName String that is the name of the table to be opened. TableID Long integer returned by the function that identifies the opened table. AccessDDLOpenTable opens the specified table exclusively. When you are finished with all DDL operations on the table, use the AccessDDLCloseTable function to close the table. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrFileAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrInvalidDatabaseID No such database or database not open. ACCESSDDL_ErrInvalidName Invalid table name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrObjectNotFound Couldn't find specified table. ACCESSDDL_ErrTableInUse Couldn't open table exclusively. This function may also return various error codes associated with resource failure. AccessDDLCloseTable Function Description Closes a table previously opened with the AccessDDLOpenTable or AccessDDLCreateTable functions. Syntax AccessDDLCloseTable(TableID) Remarks The AccessDDLCloseTable function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the table to be closed; this is the value returned by AccessDDLOpenTable when the table was opened. Once closed, the table's TableID will be invalid. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrInvalidTableID Invalid TableID. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLCreateTable Function Description Creates a new table in the specified database. Syntax AccessDDLCreateTable(DatabaseID, TableName, TableID) Remarks The AccessDDLCreateTable function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that identifies the database in which the new table will be created. TableName String that is the name of the table to be created; may not exceed 64 characters. TableID Long integer returned by the function that identifies the exclusively opened table. The new table will be opened exclusively. The table will have no fields and no indexes. Use the AccessDDLAddField function to add fields and AccessDDLCreateIndex to add indexes. It is inadvisable to create a table without also defining fields for that table. You must use the AccessDDLCloseTable function to close the table when you are finished with it. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrInvalidDatabaseID Invalid DatabaseID argument. ACCESSDDL_ErrInvalidName Invalid table name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrTableDuplicate Table already exists. This function may also return various error codes associated with resource failure. AccessDDLDeleteTable Function Description Deletes a specified table, its data, and any indexes. Syntax AccessDDLDeleteTable(DatabaseID, TableName) Remarks The AccessDDLDeleteTable function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that identifies the database that contains the table. TableName String that is the name of the table to be deleted; may not exceed 64 characters. The table must not be open by any user, including the current user. The current user must have Modify Definitions permission for the specified table. Once deleted, all queries, forms, reports, or code that reference the table will be invalid. IMPORTANT When you use AccessDDLDeleteTable to delete a table that was created or modified in MS Access table design (as opposed to created or modified using MSADDL11.DLL), MS Access maintains internal information about the table which will remain in the database until the database is compacted. Until this information is discarded, you will encounter unpredictable results if you use the AccessDDLCreateTable function to create another table with the same name, or use the AccessDDLRenameTable function to rename an existing table to the same name without first compacting the database. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrIndexInUse Table contains an index that exists in a reference (relationship) and can't be deleted. ACCESSDDL_ErrInvalidDatabaseID Invalid DatabaseID argument. ACCESSDDL_ErrInvalidName Invalid table name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrObjectNotFound No such table. ACCESSDDL_ErrTableInUse Table is in use by another user. AccessDDLRenameTable Function Description Renames a specified table. Syntax AccessDDLRenameTable(DatabaseID, OldTableName, NewTableName) Remarks The AccessDDLRenameTable function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that identifies the database that contains the table. OldTableName String that is the table to be renamed; may not exceed 64 characters. NewTableName String that is the new table name; may not exceed 64 characters. You can freely rename tables created with MSADDL11.DLL; however, when you rename a table that was created in MS Access table design (as opposed to created using the DLL), Access will maintain outdated internal information about the old table name which will remain in the database until the database is compacted. Until this information is discarded, you will encounter unpredictable results if you use the AccessDDLCreateTable or AccessDDLRenameTable functions to create or rename another table with the old table name. Also note that any properties defined in table design will be lost if the table is renamed using AcccessDDLRenameTable. The table must be closed in order to be renamed. Once renamed, all queries, forms, reports, or code that reference the old table name will be invalid. The current user must have Modify Definitions permission for the table. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrInvalidDatabaseID Invalid DatabaseID argument. ACCESSDDL_ErrInvalidName Invalid table name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrObjectNotFound Couldn't find specified table. ACCESSDDL_ErrTableDuplicate New table name already exists. ACCESSDDL_ErrTableInUse Table is in use by another user. AccessDDLAddField Function Description Adds a new field to a specified table. Syntax AccessDDLAddField(DatabaseID, TableID, FieldName, FieldType, Max, AutoIncr) Remarks The AccessDDLAddField function uses the following arguments. Argument Description -------------- ------------------------------------------ DatabaseID Long integer that identifies the database that contains the table to which the new field will be added. TableId Long integer that identifies the table; this is the value returned by AccessDDLOpenTable when the table was opened. FieldName String that is the name of the new field; may not exceed 64 characters. FieldType Integer that identifies the field type; valid FieldType values are: ACCESSDDL_FIELDTYPEYESNO yes/no ACCESSDDL_FIELDTYPEBYTE byte ACCESSDDL_FIELDTYPEINTEGER integer ACCESSDDL_FIELDTYPELONGINTEGER long integer ACCESSDDL_FIELDTYPECURRENCY currency ACCESSDDL_FIELDTYPESINGLE single ACCESSDDL_FIELDTYPEDOUBLE double ACCESSDDL_FIELDTYPEDATETIME date/time ACCESSDDL_FIELDTYPETEXT text ACCESSDDL_FIELDTYPEOLE OLE object ACCESSDDL_FIELDTYPEMEMO memo Max Long integer that is the maximum length of a text field. AutoIncr Integer that specifies whether the field is an autoincrement field; valid AutoIncr values are: -1 A unique ascending sequence number will be automatically assigned to the field when a new record is added to the table. FieldType must be a long integer. 0 No such number will be assigned. If FieldType identifies a numeric field type, the field's width will be fixed. All other field types will render a variable-width field. The current user must have Modify Definitions permission for the table. Tables can each contain up to 256 fields. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrField2ndSysMaint More than one autoincrement field has been defined. ACCESSDDL_ErrFieldDuplicate Field definition already exists. ACCESSDDL_ErrFieldTooBig Text field width exceeds 255 characters. ACCESSDDL_ErrInvalidFieldType Invalid FieldType argument. ACCESSDDL_ErrInvalidDatabaseID Invalid DatabaseID argument. ACCESSDDL_ErrInvalidName Invalid FieldName argument. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrTooManyFields More than 256 fields defined. AccessDDLDeleteField Function Description Deletes a specified field from a specified table. Syntax AccessDDLDeleteField(TableID, FieldName) Remarks The AccessDDLDeleteField function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the exclusively opened table; this is the value returned by AccessDDLOpenTable when the table was opened. FieldName String that is the name of the field to be deleted; may not exceed 64 characters. You can't delete a field if the table contains an index based on that field. To delete the field, you must first use the AccessDDLDeleteIndex function to delete the index. You also can't delete a field if there is a relationship based on that field. To delete the field, the relationship must first be deleted using AccessDDLDeleteReference. The current user must have both Modify Definitions and Read Data permissions for the table. If the field width is fixed (for example, a text field), the space for the field in existing records won't always be recovered. New records will contain space for the deleted field. If the field width is variable (for example, a memo field), any data in existing records is not deleted and no space is recovered. New records will contain a single byte for the deleted field. To recover the space deleted by AccessDDLDeleteField, compact the database. Once deleted, all queries, forms, reports, or code that reference the deleted field will be invalid. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrFieldIndexed Can't delete field because index using this field exists. ACCESSDDL_ErrFieldNotFound Couldn't find specified field. ACCESSDDL_ErrInvalidName Invalid field name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLRenameField Function Description Renames a specified field. Syntax AccessDDLRenameField(TableID, OldFieldName, NewFieldName) Remarks The AccessDDLRenameField function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the table that contains the field to be renamed; this is the value returned by AccessDDLOpenTable when the table was opened. OldFieldName String that is the name of an existing field; may not exceed 64 characters. NewFieldName String that is the new name; may not exceed 64 characters. Once renamed, all queries, forms, reports, or code that reference the old field name will be invalid. If you rename a field that was created in table design (as opposed to created using MSADDL11.DLL), the field will lose all of its existing properties. You should then set the various properties in table design. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrFieldNotFound Couldn't find the specified field. ACCESSDDL_ErrFieldDuplicate Field name already exists. ACCESSDDL_ErrInvalidName Invalid field name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLCreateIndex Function Description Defines and creates an index in a specified table. Syntax AccessDDLCreateIndex(TableID, IndexName, IndexFlag, Key) Remarks The AccessDDLCreateIndex function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the table for which a new index will be created; this is the value returned by AccessDDLOpenTable when the table was opened. IndexName String that is the name of the index; may not exceed 64 characters. Primary Key ----------- If you are defining the primary key (see description for the IndexFlag argument, below), the IndexName must be the string "PrimaryKey". Single-Field Index ------------------ The IndexName is the same as the name of the field. Multiple-Field Index -------------------- The IndexName is one of "Index1", "Index2", and so on, through "Index5". IndexFlag Long integer as follows: ACCESSDDL_BitIndexPrimary If this is to be the primary index. ACCESSDDL_BitIndexUnique If duplicate index entries are to be disallowed. Key String that is a list of field names, in order of key significance, delimited with an exclamation point ("!"); may not exceed 255 characters, nor contain more than 10 field names. The current user must have both Modify Definitions and Read Data permissions for the table. The new index cannot include a Memo field, an OLE object field, or a Yes/No field. Indexes exceeding the maximum length will be truncated. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrFieldCannotIndex At least one of the specified fields in Key is a Memo or OLE object field. ACCESSDDL_ErrFieldNotFound Couldn't find specified field name. ACCESSDDL_ErrIndexDuplicate Index already exists. ACCESSDDL_ErrIndexHasPrimary Primary index already exists. ACCESSDDL_ErrInvalidName Invalid index or field name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrTooManyKeys Too many fields in Key. AccessDDLDeleteIndex Function Description Deletes a specified index. Syntax AccessDDLDeleteIndex(TableID, IndexName) Remarks The AccessDDLDeleteIndex function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the table that contains the index to be deleted; this is the value returned by AccessDDLOpenTable when the table was opened. IndexName String that is the name of the index; may not exceed 64 characters. Once deleted, all code that references the deleted index will be invalid. You cannot delete an index if it is on the primary (referenced) side of a relationship. The current user must have Modify Definitions permission for the table. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrIndexInUse Specified index exists in a reference (relationship) and can't be deleted. ACCESSDDL_ErrIndexNotFound Couldn't find specified index. ACCESSDDL_ErrInvalidName Invalid index name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLRenameIndex Description Renames a specified index. Syntax AccessDDLRenameIndex(TableID, Index, IndexNew) Remarks The AccessDDLRenameIndex function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Long integer that identifies the exclusively opened table; this is the value returned by AccessDDLOpenTable when the table was opened. OldIndexName String that is the existing name of the index; may not exceed 64 characters. NewIndexName String that is the new index name; may not exceed 64 characters. Once you rename an index, all code that references the old index name will be invalid. The current user must have Modify Definitions permission for the table. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrIndexDuplicate Index already exists. ACCESSDDL_ErrIndexNotFound No such index. ACCESSDDL_ErrInvalidName Invalid index name specified. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. AccessDDLCreateReference Function Description Creates a relationship between two specified tables. Please note: the referenced table is the primary table (the "one" side of a one-to-many relationship or either table in a one-to-one relationship). The referencing table is the related table (the "many" side of a one-to- many relationship). Syntax AccessDDLCreateReference(TableID, ReferenceName, Fields, ReferencedTable, ReferencedFields, MatchFlag) Remarks The AccessDDLCreateReference function uses the following arguments. Argument Description ------------------ -------------------------------------- TableID Long integer that identifies the referencing table; this is the value returned by AccessDDLOpenTable when the table was opened. ReferenceName String that is the name of the reference. Fields String that is a list of field names delimited with an exclamation point ("!"); the data types of the referencing fields must match those of the referenced fields. ReferencedTable String that is the name of the referenced table; this table will be opened exclusively to ensure that the reference definition is seen by other sessions; the referenced table may be the same as the referencing table. ReferencedFields A string that is a list of field names delimited with an exclamation point ("!"); if this argument is Null, the fields that comprise the referenced table's primary index are used; if this argument is non-Null, the fields must match the order of the definition of an existing unique index on the reference table with attributes that are compatible with the match type specified by the MatchFlag argument; the correspondence between referencing and referenced fields is by position within the field list (when specified) or position within the primary index definition (when not specified). MatchFlag Long integer that specifies the match type and referential triggered actions; valid MatchFlag values are: ACCESSDDL_ReferenceUnique Identifies the relationship as one to one; if an index is created, the index will have the unique attribute. ACCESSDDL_ReferenceDontEnforce Allows users to define relationships that are not enforced. You cannot create a relationship with the same referenced table, referenced fields, referencing table, and referencing fields. If the referencing table already has a unique index on the referencing fields, then a unique reference is created, even if the MatchFlag argument is not set to ACCESSDDL_ReferenceUnique. You cannot create a relationship on Memo or OLE object fields. The current user must have Modify Definitions permission for both the referencing and referenced tables. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrFieldCannotIndex At least one of the specified fields is a Memo or OLE object field. ACCESSDDL_ErrFieldNotFound Couldn't find specified field name. ACCESSDDL_ErrIndexDuplicate Specified reference already exists. ACCESSDDL_ErrIndexNotFound Foreign key doesn't match primary key. ACCESSDDL_ErrInvalidName Invalid referenced table name. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrInvalidParameter Number of fields in foreign key doesn't match number of fields in primary key. ACCESSDDL_ErrInvalidTableID Invalid TableID argument. ACCESSDDL_ErrLinkNotSupported Can't create reference on attached table. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called. ACCESSDDL_ErrObjectNotFound Table name can't be an empty string. ACCESSDDL_ErrSelfReference Can't refer to same field when the referenced and reference tables are the same. ACCESSDDL_ErrTableInUse Table is in use by another user. ACCESSDDL_ErrTooManyKeys Too many referenced fields specified or too many fields specified in key. AccessDDLDeleteReference Function Description Deletes relationships between two specified tables. Syntax AccessDDLDeleteReference(TableID, ReferenceName) Remarks The AccessDDLDeleteReference function uses the following arguments. Argument Description -------------- ------------------------------------------ TableID Number that identifies the exclusively open referencing table; this is the value returned by AccessDDLOpenTable when the table was opened. ReferenceName String that is the name of the reference you want to delete. Returns ---------------------------------------------------------------------- ACCESSDDL_ErrSuccess Operation was successful. ACCESSDDL_ErrAccessDenied Current user doesn't have required permissions. ACCESSDDL_ErrIndexNotFound Specified index couldn't be found. ACCESSDDL_ErrInvalidParameter One or more parameters is invalid or Null. ACCESSDDL_ErrNotInitialized AccessDDLStartEngine hasn't been called.