There are only two types of Database Events for relations: adding and removing. When a relation is modified, it's first removed and then re-added, so both the remove and add events fire.
PROCEDURE DBC_BeforeAddRelation( cRelationID, cTableName,
cRelatedChild, cRelatedTable,
cRelatedTag )
PROCEDURE DBC_AfterAddRelation( cRelationID, cTableName,
cRelatedChild, cRelatedTable,
cRelatedTag )
PROCEDURE DBC_BeforeDropRelation( cRelationID, cTableName,
cRelatedChild, cRelatedTable,
cRelatedTag )
PROCEDURE DBC_AfterDropRelation( cRelationID, cTableName,
cRelatedChild, cRelatedTable,
cRelatedTag )|
Parameter |
Value |
Meaning |
|
cRelationID |
Character |
The name of the relation (which is often something like "Relation 1"). |
|
cTableName |
Character |
The name of the child table. |
|
cRelatedChild |
Character |
Although you can't tell from the dumb name for this parameter, it's the tag for the child table. |
|
cRelatedTable |
Character |
The name of the parent table. |
|
cRelatedTag |
Character |
The tag for the parent table. |
As is the case with other before-and-after pairs of events, you can prevent a relation from being added or removed by returning .F. in the BeforeAddRelation and BeforeDropRelation events, while the AfterAddRelation and AfterDropRelation events simply receive notification that something happened.
* This goes in the stored procedures of the database.
PROCEDURE DBC_AfterDropRelation(cRelationID, cTableName, ;
cRelatedChild, cRelatedTable, cRelatedTag)
WAIT WINDOW PROGRAM() + CHR(13) + ;
"Child: " + cTableName + "." + cRelatedChild + CHR(13) + ;
"Parent: " + cRelatedTable + "." + cRelatedTag
PROCEDURE DBC_BeforeDropRelation(cRelationID, cTableName, ;
cRelatedChild, cRelatedTable ,cRelatedTag)
WAIT WINDOW PROGRAM() + CHR(13) + ;
"Child: " + cTableName + "." + cRelatedChild + CHR(13) + ;
"Parent: " + cRelatedTable + "." + cRelatedTag
PROCEDURE DBC_AfterAddRelation(cRelationID, cTableName, ;
cRelatedChild, cRelatedTable ,cRelatedTag)
WAIT WINDOW PROGRAM() + CHR(13) + ;
"Child: " + cTableName + "." + cRelatedChild + CHR(13) + ;
"Parent: " + cRelatedTable + "." + cRelatedTag
PROCEDURE DBC_BeforeAddRelation(cRelationID, cTableName, ;
cRelatedChild, cRelatedTable ,cRelatedTag)
WAIT WINDOW PROGRAM() + CHR(13) + ;
"Child: " + cTableName + "." + cRelatedChild + CHR(13) + ;
"Parent: " + cRelatedTable + "." + cRelatedTag
* End of stored procedures.
* Open the database and turn on DBC events.
OPEN DATABASE TestData
DBSetProp('TestData', 'Database', 'DBCEvents', .T.)
* Change an existing relation to see events fire.
ALTER TABLE Orders ALTER COLUMN Cust_ID C(6) REFERENCES Customer