if !dbc()=cursorgetprop("Database",cMyTable) && First open dbc open database (cursorgetprop("Database",cMyTable)) endif cPath_Name = dbc()Third and fourth : AFAIK to get them you could only use dbgetprop() (ie:DBGETPROP(cTableName, "Table", "DeleteTrigger")) to learn what the ri_delete function is and then open dbc as a table (use myDBC.dbc), locate for objectNAme = "StoredProceduresSource" and parse the "code" field (memo field storing all stored procs and ri code) for that procedure section. For just RI there is a shorter access though. Locate for !empty(ricode), ricode is stored in short format as ie: CCR for Cascade,Cascade,Restrict for Update,Delete,Insert respectively. But you should reverse engineer it to find parents via parentid. Now this comes last : You could use home()+"tools\gendbc\gendbc" to generate programmatic creation of dbc and tables and place the stored procs and ri data in a custom object for later usage (better if you use gendbcx it generates them as class code and doesn't have bugs and limitations of gendbc).