Mini Kabibi Habibi

Current Path : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/samples/northwind/
Upload File :
Current File : C:/Users/ITO/Desktop/VF9/program files/microsoft visual foxpro 9/samples/northwind/northwind.dct

�@#VW2
productidProductsproductid@1A picture representing the food category.8Picture8DescriptionK8Number automatically assigned to a new category.8Category ID5
employeeidEmployeesemployeeid4
reportstoEmployeesemployeeid0Employee's supervisor.8Reports ToE8General information about employee's background.
8Notes)Picture of employee.
8Photo=,Internal telephone extension number.8ExtensionJ8Phone number includes country code or area code.8Home Phone8Country8Postal Code(State or province.8Region8City1"Street or post-office box.8Address8Hire Date_	birthdate<DATE(),
"Birth date can't be in the future."8Birth Date	6D&Employee's title.
8Title,
orderidOrdersorderid2
shipperidShippersshipperid(State or province.8Region1"Street or post-office box.8Address8First Name5!Name of shipping company.8Company Name0&-#productname
MC(40)-State or province.8Ship RegionN:Street address only -- no post-office box allowed.8Ship AddressK:Name of person or company to receive the shipment.8Ship Name3#Shippers table foreign key.8Ship Via3#Employee table foreign key.8Employee,Unique order number.8Order IDm	0"	discount=>0.AND.discount<12
"You must enter a value  between 0 and 1."8Discount8Last Name8Country8%Categories table foreign key.8Category ID7$Suppliers table foreign key.8Supplier ID@/Supplier's home page on World Wide Web.8Home Page;"Title used in salutations.8Title Of CourtesyI6Number automatically assigned to new employee.8Employee IDC8Phone number includes country code or area code.8Fax(State or province.8Region1"Street or post-office box.8Addressd:Unique five-character code based on customer name.
6XXXXX
7!A8Customer ID8Postal Code8City8Contact Namemsuppliers.dbf__ri_delete_suppliers()__ri_update_suppliers()supplieridE8Phone number includes country code or area code.
8Phone8Company Nameishippers.dbfshipperid__ri_delete_shippers()__ri_update_shippers()5
supplieridSupplierssupplierid6
categoryidCategoriescategoryid3Name of food category.8Category Name'8Company Name&
"Please enter a company name.5
customeridCustomerscustomerid8Contact Name8Contact Title8City8Postal Code8CountryE8Phone number includes country code or area code.
8PhoneC8Phone number includes country code or area code.8Fax!	08Freight	7$8Product Name&
"Please enter a product name.J#Customer table foreign key.8Customer
6XXXXX
7!A8Order Date	7D8Required Date	7D8Shipped Date	7D8Ship City8Ship Postal Code8Ship CountryI6Number automatically assigned to new supplier.8Supplier IDU	1	quantity>0*
"Quantity must be greater than 0."8Quantityc	0	unitprice=>0+
"You must enter a positive number."8Unit Price	7$5#Products table foreign key.8Product ID1!Orders table foreign key.8Order ID2orderdetails.dbfprimarykeyZ	unitprice=>0+
"You must enter a positive number."8Unit Price	7$E8Phone number includes country code or area code.
8Phonea	0	unitsinstock=>0+
"You must enter a positive number."8Units in StockX	unitsonorder=>0+
"You must enter a positive number."8Units On Orderaorders.dbf__ri_delete_orders()__ri_update_orders()orderid__ri_insert_ordeG5Number automatically assigned to new product.8Product IDG5Number automatically assigned to new shipper.8Shipper IDG.(e.g., 24-count case, 1-liter bottle).8Quantity Per Unit�+Minimum units to maintain in stock.	0	reorderlevel=>0+
"You must enter a positive number."8Reorder LevelS4Yes (.T.) means item is no longer available..F.8Discontinuedpcategories.dbf __ri_delete_categories() __ri_update_categories()categoryidmcustomers.dbfcustomerid__ri_delete_customers()__ri_update_customers()memployees.dbf__ri_delete_employees()__ri_update_employees()employeeid8Contact Title*&-#productid	MIiproducts.dbf__ri_delete_products()__ri_update_products()productid)&-#subtotal	MY5&-#OrderDetails.orderid	MIH.0$(,PQR/�%d'����+OrderDetails�*SELECT OrderDetails.OrderID, Sum( (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100) AS Subtotal FROM OrderDetails GROUP BY OrderDetails.OrderID).&-#extendedprice	MY<&-#OrderDetails.discountMN(20,5)6&-#OrderDetails.quantity	MI7&-#OrderDetails.unitprice	MY9&-#Products.productname
MC(40)7&-#OrderDetails.productid	MI5&-#OrderDetails.orderid	MI�.0$(,PQR/�%d'����+OrderDetails,ProductsS*SELECT OrderDetails.OrderID, OrderDetails.ProductID, Products.ProductName,  OrderDetails.UnitPrice, OrderDetails.Quantity, OrderDetails.Discount,  ((OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100)*100) AS ExtendedPrice FROM Products INNER JOIN OrderDetails ON Products.ProductID = OrderDetails.ProductID)0&-#relationshipMC(9):&-#Customers.contactname
MC(30):&-#Customers.companyname
MC(40)3&-#Customers.city
MC(15)0.0$(,PQR/�%d'����+Customers�*SELECT City, CompanyName, ContactName, 'Customers' AS Relationship  FROM Customers  UNION SELECT City, CompanyName, ContactName, 'Suppliers' FROM Suppliers).&-#categorysales	MYH&-+#Product_Sales_For_1997.categoryname
MC(15)-&-#productsales	MY0&-#productname
MC(40)3&-#Products.unitprice	MY=&- #tenmostexpensiveproducts
MC(40).0$(,PQR/�%d'����+Products�*SELECT TOP 10 Products.ProductName AS TenMostExpensiveProducts, Products.UnitPrice FROM Products ORDER BY Products.UnitPrice DESC)-&-#productsales	MY9&-#Products.productname
MC(40)<&-#Categories.categoryname
MC(15)6&-#Categories.categoryid	MI�.0$(,PQR/�%d'����+Categories,Products4*SELECT Categories.CategoryID, Categories.CategoryName, Products.ProductName,  Sum(Order_Details_Extended.ExtendedPrice) AS ProductSales FROM 	Categories INNER JOIN  (Products INNER JOIN  (Orders INNER JOIN Order_Details_Extended ON Orders.OrderID = Order_Details_Extended.OrderID)  ON Products.ProductID = Order_Details_Extended.ProductID)  ON Categories.CategoryID = Products.CategoryID WHERE BETWEEN(Orders.OrderDate, {^1997/01/01},{^1997/12/31}) GROUP BY Categories.CategoryID, Categories.CategoryName, Products.ProductName ORDER BY Products.ProductName)3&-#Orders.shippeddate	MD:&-#Customers.companyname
MC(40)/&-#Orders.orderid	MI+&-#saleamount	MY.0$(,PQR/�%d'����+Orders,Customersm*SELECT Order_Subtotals.Subtotal AS SaleAmount, Orders.OrderID, Customers.CompanyName, Orders.ShippedDate FROM 	Customers INNER JOIN  (Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID)  ON Customers.CustomerID = Orders.CustomerID WHERE (Order_Subtotals.Subtotal >2500) AND BETWEEN(Orders.ShippedDate, {^1997/01/01},{^1997/12/31}))6&-#Customers.country
MC(15)3&-#Customers.city
MC(15):&-#Customers.companyname
MC(40)8&-#Customers.customeridMC(5)}.0$(,PQR/�%d'����+Customers�*SELECT DISTINCT Customers.CustomerID, Customers.CompanyName, Customers.City, Customers.Country FROM Customers RIGHT JOIN Orders ON Customers.CustomerID = Orders.CustomerID WHERE BETWEEN(Orders.OrderDate, {^1997/01/01},{^1997/12/31}))6&-#Products.discontinued	ML6&-#Products.unitsinstock	MI=&- #Products.quantityperunit
MC(20)9&-#Products.productname
MC(40)<&-#Categories.categoryname
MC(15)�.0$(,PQR/�%d'����+Categories,Products0*SELECT Categories.CategoryName, Products.ProductName, Products.QuantityPerUnit, Products.UnitsInStock, Products.Discontinued FROM Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID WHERE Products.Discontinued = .F. ORDER BY Categories.CategoryName, Products.ProductName)3&-#Products.unitprice	MY9&-#Products.productname
MC(40).0$(,PQR/�%d'����+Products�*SELECT Products.ProductName, Products.UnitPrice FROM Products WHERE Products.UnitPrice>(SELECT AVG(UnitPrice) From Products))6&-#Customers.country
MC(15)9&-#Customers.postalcode
MC(10)5&-#Customers.region
MC(15)3&-#Customers.city
MC(15)6&-#Customers.address
MC(60):&-#Customers.companyname
MC(40)7&-#Orders.shipcountry
MC(15):&-#Orders.shippostalcode
MC(10)6&-#Orders.shipregion
MC(15)4&-#Orders.shipcity
MC(15)7&-#Orders.shipaddress
MC(60)4&-#Orders.shipname
MC(40)/&-#Orders.freight	MY/&-#Orders.shipvia	MI3&-#Orders.shippeddate	MD4&-#Orders.requireddate	MD1&-#Orders.orderdate	MD2&-#Orders.employeeid	MI5&-#Orders.customeridMC(5)/&-#Orders.orderid	MIk.0$(,PQR/�%d'����+Orders,Customers�*SELECT Orders.OrderID, Orders.CustomerID, Orders.EmployeeID, Orders.OrderDate, Orders.RequiredDate,  Orders.ShippedDate, Orders.ShipVia, Orders.Freight, Orders.ShipName, Orders.ShipAddress, Orders.ShipCity,  Orders.ShipRegion, Orders.ShipPostalCode, Orders.ShipCountry,  Customers.CompanyName, Customers.Address, Customers.City, Customers.Region, Customers.PostalCode, Customers.Country FROM Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID)).0$(,PQR/�%d'�����*SELECT Product_List.ProductID, Product_List.ProductName  FROM Products AS Product_List  WHERE (((Product_List.Discontinued)=.F.))  ORDER BY Product_List.ProductName )�.0$(,PQR/�%d'����/+northwind!Products,northwind!Categories�*SELECT Products.*, Categories.categoryname FROM  northwind!Categories  INNER JOIN northwind!Products  ON  Categories.categoryid = Products.categoryid WHERE  Products.discontinued = .F. ORDER BY Products.productname)=&-$#northwind!Products.productid	MIC&-&#northwind!Products.productname
MC(40)>&-%#northwind!Products.supplierid	MI+&-#categoryid	MIG&-*#northwind!Products.quantityperunit
MC(20)=&-$#northwind!Products.unitprice	MY@&-'#northwind!Products.unitsinstock	MI@&-'#northwind!Products.unitsonorder	MI@&-'#northwind!Products.reorderlevel	MI@&-'#northwind!Products.discontinued	MLF&-)#northwind!Categories.categoryname
MC(15)u.0$(,PQR/�%d'�����*SELECT Categories.CategoryName, Products.ProductName,  Sum( (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100) AS ProductSales  FROM (Categories INNER JOIN Products ON Categories.CategoryID = Products.CategoryID)  INNER JOIN (Orders INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID)  ON Products.ProductID = OrderDetails.ProductID  WHERE BETWEEN(Orders.ShippedDate, {^1997/01/01},{^1997/12/31}) GROUP BY Categories.CategoryName, Products.ProductName)1&-#categoryname
MC(15)P.0$(,PQR/�%d'����+Product_Sales_For_1997�*SELECT Product_Sales_For_1997.CategoryName, Sum(Product_Sales_For_1997.ProductSales) AS CategorySales FROM Product_Sales_For_1997 GROUP BY Product_Sales_For_1997.CategoryName)8Region ID8Region Description.
regionidRegionregionidbregion.dbfregionid__ri_delete_region()__ri_update_region()(&-#yearMN(5)&&-
#total	MYsterritories.dbfterritoryi!__ri_delete_territories()!__ri_update_territories()� customerdemographics.dbfcusttypeid*__ri_delete_customerdemographics()*__ri_update_customerdemographics()5
employeeidEmployeesemployeeid7
territoryiTerritoriesterritoryi8Territory ID8Employee ID&&-
#total	MY+&-#quarterMN(9)(&-#yearMN(5)�.0$(,PQR/�%d'����H*SELECT     YEAR(Orders.ShippedDate) as Year, INT(MONTH(Orders.ShippedDate)/4)+1 as Quarter,   SUM(Order_Subtotals.Subtotal) as Total FROM         Orders INNER JOIN  Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID  WHERE     NOT EMPTY(NVL(Orders.ShippedDate,"")) GROUP BY Year, Quarter  ORDER BY Year, Quarter)w.0$(,PQR/�%d'�����*SELECT	 YEAR(Orders.ShippedDate) as Year, SUM(Order_Subtotals.Subtotal) as Total  FROM 	Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID  WHERE     NOT EMPTY(NVL(Orders.ShippedDate,"")) GROUP BY Year  ORDER BY Year)(&-#freight	MY.&-#extendedprice	MY/&-#discountMN(20,5))&-#quantity	MI*&-#unitprice	MY0&-#productname
MC(40)*&-#productid	MI0&-#shippername
MC(40),&-#shippeddate	MD-&-#requireddate	MD*&-#orderdate	MD(&-#orderid	MI0&-#salesperson
MC(31),&-#country
MC(15)/&-#postalcode
MC(10)+&-#region
MC(15))&-#city
MC(15),&-#address
MC(60)1&-#customername
MC(40).&-#customeridMC(5)0&-#shipcountry
MC(15)3&-#shippostalcode
MC(10)�.0$(,PQR/�%d'����H*SELECT Orders.ShipName, Orders.ShipAddress, Orders.ShipCity, Orders.ShipRegion, Orders.ShipPostalCode,  Orders.ShipCountry, Orders.CustomerID, Customers.CompanyName AS CustomerName, Customers.Address, Customers.City,  Customers.Region, Customers.PostalCode, Customers.Country,  (ALLTRIM(FirstName) + ' ' + ALLTRIM(LastName)) AS Salesperson,  Orders.OrderID, Orders.OrderDate, Orders.RequiredDate, Orders.ShippedDate, Shippers.CompanyName As ShipperName,  OrderDetails.ProductID, Products.ProductName, OrderDetails.UnitPrice, OrderDetails.Quantity,  OrderDetails.Discount,  (OrderDetails.UnitPrice*OrderDetails.Quantity*(1-OrderDetails.Discount)/100) *100 AS ExtendedPrice, Orders.Freight FROM Shippers INNER JOIN  (Products INNER JOIN (  (Employees INNER JOIN  (Customers INNER JOIN Orders ON Customers.CustomerID = Orders.CustomerID)  ON Employees.EmployeeID = Orders.EmployeeID)  INNER JOIN OrderDetails ON Orders.OrderID = OrderDetails.OrderID)  ON Products.ProductID = OrderDetails.ProductID)  ON Shippers.ShipperID = Orders.ShipVia ORDER BY Orders.CustomerID, Orders.ShippedDate DESC)-&-#shipname
MC(40)0&-#shipaddress
MC(60)-&-#shipcity
MC(15)/&-#shipregion
MC(15)8Customer Description8Customer Type@
custtypeidCustomerDemographicscusttypeid8Customer Type ID8Customer ID5
customeridCustomerscustomerid( customercustomerdemo.dbf8Territory ID8Territory Description8Region ID'employeeterritories.dbf�O�� 6�6���%�
�Lu��U����T��a��%�C���C'
	�CS
��9�T��-�����
%�C'
��|��%�C�	BUFFERING���x�	��C�����
Z#�CO��T������	B����ULLRETVALPNERROR���������T��a��%�C���CS
��@�T��-�����%�C������5��3T��CCC�tcCascadeParentb�C����6f��>�������%�C�	BUFFERING�����	��C�����
Z#�CO��T������	B����UTCFIELDNAME
TCNEWVALUETCCASCADEPARENTLLRETVALPCCASCADEPARENTPNERROR'4���������T��C����+%�C�gaErrors[lnErrorRows,1]b�L����������C����T�������T�����������T�����������T�����������T�����������
T�����+�CC�t�
��O�,T��������C����,C�t��T�������T�����������T�����������T���������	��T���������
��T������	�����T������
�����T���������
��T�����������	B����UTNERRNO	TCMESSAGETCCODE	TCPROGRAMLNERRORROWSLNXXGAERRORSPCPARENTDBFPNPARENTREC
PCPARENTIDPCPARENTEXPR
PCCHILDDBF
PNCHILDREC	PCCHILDIDPCCHILDEXPRV4����������
T�����T��CC�f�*C�f��������(������T��C��*�����0%�CC����\��CC����\�����!��
T�������%�������T��CW��F��T��CW��%�C��
��*�%Q������__riCCCWZA������P�Q������__riCCCWZA���%������� T���C�f�?CCW�Z�����
T�������E�!T��CC��C�>��\g��5T��C�C�f�*C��ZC�f�?C��Z���%�C��
���G(���(�����%�����A�
T�������
B����U	TCTABLETCORDERLCCURWKAREALCNEWWKAREALNINUSESPOTLNOCCURSLNOCCURANCEPCRICURSORSPNERROR�4�������
%����(�����@�G���G ��%�C����[�{���~�ON ERROR &pcRIolderror.
������(�C�*������T��C�*������Q�CC���\g����%���ON����GA ��%���OFF��	�G��%���ON��&�G ��%��	�ON��C�G2 ��
H�T����C�
���i�G(���
C�����G(��
���B�a��U	TLSUCCESSLNXXLNSPOT
LCWORKAREAPCRIOLDERRORPCRICURSORSPCOLDCOMPAT	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDDBCJ4���5T��C�C�f�?C��ZC�f�*C��Z���B�a��UTCTABLENAMETCWKAREAPCRICURSORS���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
CATEGORYID��&T��C�Products�
categoryid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
CATEGORYID��%��
����9T��C����Delete restrict rule violated.��������C�Products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
CATEGORYIDRIOPENRIENDRIERRORRIREUSEo���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
CATEGORYID�_��
T�����T���
CATEGORYID��
T�����%�����6�T��C�Products���%������%��=���	���-���
F����B�-���T��C�&��G(���(�
categoryid�T��C���
��T��CO��
T�����T���
CATEGORYID��%��
����9T��C����Update restrict rule violated.��������C�Products����%��
��2�%��=��������
F����	B������%��=���U�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
CATEGORYIDRIOPENRIENDRIERRORRIREUSEd���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J�CC�f��(���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��2T��C�CustomerCustomerDemo�
custtypeid���%������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��T��CC�f���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��%��
����9T��C����Delete restrict rule violated.������%��C�CustomerCustomerDemo����%��
��+�%��=��������
F����	B�����%��=���J�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREACUSTOMERTYPEIDRIOPENRIENDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��.T��C�ALLTRIM(UPPER(CUSTOMERTYPEID))�_��
T�����+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��T��CC�f���%�������%T��C�CustomerCustomerDemo���%�����V�%��=���A���-���
F����B�-���T��C�&��G(���(�
custtypeid�T��C���
��T��CO��T��CC�f���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��%��
��%�9T��C����Update restrict rule violated.������%��C�CustomerCustomerDemo����%��
����%��=���w�����
F����	B������%��=���������
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREACUSTOMERTYPEIDRIOPENRIEND
CUSTTYPEIDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
CUSTOMERID��$T��C�Orders�
customerid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
CUSTOMERID��%��
����9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���������
F����	B�����
F����T��C&��T��CO��J���(���T���
CUSTOMERID��2T��C�CustomerCustomerDemo�
customerid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��T��CC�f���'T���ALLTRIM(UPPER(CUSTOMERID))��%��
��Q�9T��C����Delete restrict rule violated.������%��C�CustomerCustomerDemo����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
CUSTOMERIDRIOPENRIENDRIERRORRIREUSEt���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
CUSTOMERID�_��
T�����T���
CUSTOMERID��
T�����%������T��C�Orders���%������%��=������-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���
CUSTOMERID��%��
����!��+T��C�
CUSTOMERID��	CUSTOMERS������C�Orders����%��
���%��=��������
F����	B������
F����T��C&��T��CO��T��C�
CUSTOMERID�_��
T�����T���
CUSTOMERID��
T�����%�����;�%T��C�CustomerCustomerDemo���%������%��=�������-���
F����B�-���T��C�&��G(���(�
customerid�T��C���
��T��CO��T��CC�f���'T���ALLTRIM(UPPER(CUSTOMERID))��%��
����9T��C����Update restrict rule violated.������%��C�CustomerCustomerDemo����%��
��7�%��=��� �����
F����	B������%��=���Z�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
CUSTOMERIDRIOPENRIENDRIUPDATERIREUSERIERRORb���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��&T��C�	Employees�	reportsto���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���	REPORTSTO��%��
����9T��C����Delete restrict rule violated.��������C�	Employees����%��
����%��=���������
F����	B�����
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��$T��C�Orders�
employeeid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
EMPLOYEEID��%��
��3�9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���w�����
F����	B�����
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��1T��C�EmployeeTerritories�
employeeid���%�����D�%��=���9���-���B�-���T��C�&��
F����	E����~+�����	����T��CO��
T�����T���
EMPLOYEEID��T��C����$��C�EmployeeTerritories����%��
��)�%��=��������
F����	B�����%��=���H�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
EMPLOYEEIDRIOPENRIEND	REPORTSTORIERRORRIREUSERIDELETEi���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����6�T��C�	Employees���%������%��=���
���-���
F����B�-���T��C�&��G(���(�	reportsto�T��C���
��T��CO��
T�����T���	REPORTSTO��%��
����9T��C����Update restrict rule violated.��������C�	Employees����%��
��2�%��=��������
F����	B������
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����&�T��C�Orders���%������%��=�������-���
F����B�-���T��C�&��G(���(�
employeeid�T��C���
��T��CO��
T�����T���
EMPLOYEEID��%��
����9T��C����Update restrict rule violated.��������C�Orders����%��
��"�%��=��������
F����	B������
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����0�$T��C�EmployeeTerritories���%�����
�%��=�������-���
F����B�-���T��C�&��G(���(�
employeeid�T��C���
��T��CO��
T�����T���
EMPLOYEEID��%��
����9T��C����Update restrict rule violated.������$��C�EmployeeTerritories����%��
��,�%��=��������
F����	B������%��=���O�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
EMPLOYEEIDRIOPENRIEND	REPORTSTORIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���ORDERID��'T��C�OrderDetails�orderid���%�������%��=�������-���B�-���T��C�&��
F����	E����~+�����	��W�T��CO��
T�����T���ORDERID��T��C������C�OrderDetails����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAORDERIDRIOPENRIENDRIDELETERIREUSEk���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�ORDERID�_��
T�����T���ORDERID��
T�����%�����2�T��C�OrderDetails���%������%��=������-���
F����B�-���T��C�&��G(���(�orderid�T��C���
��T��CO��
T�����T���ORDERID��%��
����9T��C����Update restrict rule violated.��������C�OrderDetails����%��
��.�%��=��������
F����	B������%��=���Q�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAORDERIDRIOPENRIENDRIERRORRIREUSE!���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���	PRODUCTID��)T��C�OrderDetails�	productid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���	PRODUCTID��%��
����9T��C����Delete restrict rule violated.��������C�OrderDetails����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA	PRODUCTIDRIOPENRIENDRIERRORRIREUSEs���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�	PRODUCTID�_��
T�����T���	PRODUCTID��
T�����%�����:�T��C�OrderDetails���%����� �%��=������-���
F����B�-���T��C�&��G(���(�	productid�T��C���
��T��CO��
T�����T���	PRODUCTID��%��
����9T��C����Update restrict rule violated.��������C�OrderDetails����%��
��6�%��=��������
F����	B������%��=���Y�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA	PRODUCTIDRIOPENRIENDRIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���REGIONID��'T��C�Territories�regionid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���REGIONID��%��
����9T��C����Delete restrict rule violated.��������C�Territories����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSEm���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�REGIONID�_��
T�����T���REGIONID��
T�����%�����4�T��C�Territories���%������%��=������-���
F����B�-���T��C�&��G(���(�regionid�T��C���
��T��CO��
T�����T���REGIONID��%��
����9T��C����Update restrict rule violated.��������C�Territories����%��
��0�%��=��������
F����	B������%��=���S�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���	SHIPPERID��#T��C�Orders�	shipperid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���SHIPVIA��%��
���9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA	SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSEe���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�	SHIPPERID�_��
T�����T���	SHIPPERID��
T�����%�����,�T��C�Orders���%������%��=������-���
F����B�-���T��C�&��G(���(�	shipperid�T��C���
��T��CO��
T�����T���SHIPVIA��%��
����9T��C����Update restrict rule violated.��������C�Orders����%��
��(�%��=��������
F����	B������%��=���K�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA	SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
SUPPLIERID��&T��C�Products�
supplierid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
SUPPLIERID��%��
����9T��C����Delete restrict rule violated.��������C�Products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
SUPPLIERIDRIOPENRIENDRIERRORRIREUSEo���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
SUPPLIERID�_��
T�����T���
SUPPLIERID��
T�����%�����6�T��C�Products���%������%��=���	���-���
F����B�-���T��C�&��G(���(�
supplierid�T��C���
��T��CO��
T�����T���
SUPPLIERID��%��
����9T��C����Update restrict rule violated.��������C�Products����%��
��2�%��=��������
F����	B������%��=���U�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
SUPPLIERIDRIOPENRIENDRIERRORRIREUSEH���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J�CC�f��(���(T���ALLTRIM(UPPER(TERRITORYID))��1T��C�EmployeeTerritories�
territoryi���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���TERRITORYID��%��
����9T��C����Delete restrict rule violated.������$��C�EmployeeTerritories����%��
���%��=���������
F����	B�����%��=���.�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREATERRITORYIDRIOPENRIENDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��+T��C�ALLTRIM(UPPER(TERRITORYID))�_��
T�����(T���ALLTRIM(UPPER(TERRITORYID))��T��CC�f���%�����s�$T��C�EmployeeTerritories���%�����O�%��=���:���-���
F����B�-���T��C�&��G(���(�
territoryi�T��C���
��T��CO��
T�����T���TERRITORYID��%��
���9T��C����Update restrict rule violated.������$��C�EmployeeTerritories����%��
��o�%��=���X�����
F����	B������%��=���������
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREATERRITORYIDRIOPENRIEND
TERRITORYIRIERRORRIREUSE���Q�STRING���Q�STRING�#T��CC����C����6���o�ProductsQ��OrderDetailsQ��OrdersQ�
�	CustomersQ�����C��Q����
��
��
�
�
	��
���	�����	������UTCCUSTOMERIDLCCUSTOMERIDPRODUCTNAMEQUANTITYTOTALPRODUCTSPORDERDETAILSODORDERSO	CUSTOMERSC
CUSTOMERIDORDERID	PRODUCTID���Q�INTEGER���Q�INTEGER�#T��CC����N����6���o�ProductsQ�	�OrderDetailsQ�����C���T�Q�������d�Q��C������T�Q�����	�����	��U
	TIORDERID	LIORDERIDPRODUCTNAMEOD	UNITPRICEQUANTITYDISCOUNT
EXTENDEDPRICEPRODUCTSPORDERDETAILS	PRODUCTIDORDERID}��Q�STRING���Q�STRING�#T��CC����C����6��5o�Orders��������������������UTCCUSTOMERIDLCCUSTOMERIDORDERID	ORDERDATEREQUIREDDATESHIPPEDDATEORDERS
CUSTOMERID���Q�DATE�Q�DATE�)T��CC����D���mBA��6��)T��CC����D���9�BA��6��io�Orders��Order_Subtotals �������������������C�i�Q�	�C�������U
TDBEGINNING_DATE
TDENDING_DATELDBEGINNING_DATE
LDENDING_DATEORDERSSHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTALYEAR%��Q�DATE�Q�DATE���Q�DATE�Q�DATE�)T��CC����D���mBA��6��)T��CC����D���9�BA��6���o�	Employees��Orders��Order_Subtotals ���
��
� ���������������������	����
�����Q�
�C��	�����UTDBEGINNING_DATE
TDENDING_DATELDBEGINNING_DATE
LDENDING_DATE	EMPLOYEESCOUNTRYLASTNAME	FIRSTNAMEORDERSSHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTAL
SALEAMOUNT
EMPLOYEEIDRIDELETE,��RIUPDATE���rierror>��riopen��riend���rireuse�	��__RI_DELETE_CategoriesT
��__RI_UPDATE_Categories��� __RI_DELETE_CustomerDemographics��� __RI_UPDATE_CustomerDemographicsr��__RI_DELETE_Customers�!��__RI_UPDATE_Customers)��__RI_DELETE_Employees1��__RI_UPDATE_Employees�9��__RI_DELETE_Orders�C��__RI_UPDATE_OrdersI��__RI_DELETE_Products�N��__RI_UPDATE_Products\T��__RI_DELETE_RegionAZ��__RI_UPDATE_Region�_��__RI_DELETE_Shippers�e��__RI_UPDATE_Shippersk��__RI_DELETE_Suppliers�p��__RI_UPDATE_Suppliersdv��__RI_DELETE_TerritoriesF|��__RI_UPDATE_Territories���
CustOrderHist���CustOrdersDetail����CustOrdersOrders����SalesByYearՋ��EmployeeSalesbyCountry3���3q�����A��AAA��2�q�A��1q1��AAA��21�1��A�����1�A���������3�r��q�AA�A���R��A��A�R1A�AA�3q��Q�aAaA����A��QA1aAAaA1aA1aA��a�Aq3�Rq4q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Q�!�AqA�1�����AQ��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq���������Q�A�qA��1����AQ��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qA�AqA�1���q��Aq��A��A���q!�AqA�1��q��AQ��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q�q�A�qA��!��q�AA�Aq��A��AA�����q�Q�A�qA��1�q��AQ��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���a��A���A��A���qA�AqA�1���q��Aq��A��A���q�AqA������q�AA��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��a��A���A��AA�����q�q�A�qA��1��q��Aq��A��AA�����q�A�A�qA��1��q��AA��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Aq�AqA������A�A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq������q�A���A�qA�q1��A��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������a��AqA�1���a��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������a���A�qA��1��a��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Qq�AqA�1���Q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������Q���A�qA��1��Q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������a1�AqA�1���A��Aq��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������a�q�A�qA��1��A��Aq��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Q��AqA�1������AA��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq���������A�A�qA��1�����AA��A��AA�A��61�	5!"1	51X5����5�����	3]���$)(>='Ec:�q��!��EQ��uc$�$�$.El=.�9���99F� \F�UR��Ue�Be�wS�x���<��:?.�;���]�;���[�_�3�S��mu�r�����e�#����yL����������*�I�i2K���7R�/��<o����A�]��F����)6���
**__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER**
procedure RIDELETE
local llRetVal
llRetVal=.t.
 IF (ISRLOCKED() and !deleted()) OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF !deleted()
      DELETE
      IF CURSORGETPROP('BUFFERING') > 1
      	=TABLEUPDATE()
      ENDIF
    ENDIF not already deleted
  ENDIF
  UNLOCK RECORD (RECNO())
  llRetVal=pnerror=0
RETURN llRetVal

procedure RIUPDATE
lparameters tcFieldName,tcNewValue,tcCascadeParent
local llRetVal
llRetVal=.t.
 IF ISRLOCKED() OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF EVAL(tcFieldName)<>tcNewValue
      PRIVATE pcCascadeParent
      pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent))
      REPLACE (tcFieldName) WITH tcNewValue
      IF CURSORGETPROP('BUFFERING') > 1
      	=TABLEUPDATE()
      ENDIF
    ENDIF values don't already match
  ENDIF it's locked already, or I was able to lock it
  UNLOCK RECORD (RECNO())
  llRetVal=pnerror=0
return llRetVal

procedure rierror
parameters tnErrNo,tcMessage,tcCode,tcProgram
local lnErrorRows,lnXX
lnErrorRows=alen(gaErrors,1)
if type('gaErrors[lnErrorRows,1]')<>"L"
  dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)]
  lnErrorRows=lnErrorRows+1
endif
gaErrors[lnErrorRows,1]=tnErrNo
gaErrors[lnErrorRows,2]=tcMessage
gaErrors[lnErrorRows,3]=tcCode
gaErrors[lnErrorRows,4]=""
lnXX=1
do while !empty(program(lnXX))
  gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;
  program(lnXX)
  lnXX=lnXX+1
enddo
gaErrors[lnErrorRows,5]=pcParentDBF
gaErrors[lnErrorRows,6]=pnParentRec
gaErrors[lnErrorRows,7]=pcParentID
gaErrors[lnErrorRows,8]=pcParentExpr
gaErrors[lnErrorRows,9]=pcChildDBF
gaErrors[lnErrorRows,10]=pnChildRec
gaErrors[lnErrorRows,11]=pcChildID
gaErrors[lnErrorRows,12]=pcChildExpr
return tnErrNo


PROCEDURE riopen
PARAMETERS tcTable,tcOrder

LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance
lnInUseSpot=0
lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors))
FOR lnOccurance = 1 TO lnOccurs
	lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance)
	IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR;
		 EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1))
		EXIT
	ENDIF
	lnInUseSpot=0
ENDFOR

IF lnInUseSpot=0
  lcCurWkArea=select()
  SELECT 0
  lcNewWkArea=select()
  IF NOT EMPTY(tcOrder)
    USE (tcTable) AGAIN ORDER (tcOrder) ;
      ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ELSE
    USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ENDIF
  if pnerror=0
    pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5)
  else
    lcNewWkArea=0
  endif something bad happened while attempting to open the file
ELSE
  lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5))
  pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),;
    upper(tcTable)+"?"+str(lcNewWkArea,5))
  IF NOT EMPTY(tcOrder)
    SET ORDER TO (tcOrder) IN (lcNewWkArea)
  ENDIF sent an order
  if pnerror<>0
    lcNewWkArea=0
  endif something bad happened while setting order
ENDIF
RETURN (lcNewWkArea)


PROCEDURE riend
PARAMETERS tlSuccess
local lnXX,lnSpot,lcWorkArea
IF tlSuccess
  END TRANSACTION
ELSE
  SET DELETED OFF
  ROLLBACK
  SET DELETED ON
ENDIF
IF EMPTY(pcRIolderror)
  ON ERROR
ELSE
  ON ERROR &pcRIolderror.
ENDIF
FOR lnXX=1 TO occurs("*",pcRIcursors)
  lnSpot=atc("*",pcRIcursors,lnXX)+1
  USE IN (VAL(substr(pcRIcursors,lnSpot,5)))
ENDFOR
IF pcOldCompat = "ON"
	SET COMPATIBLE ON
ENDIF
IF pcOldDele="OFF"
  SET DELETED OFF
ENDIF
IF pcOldExact="ON"
  SET EXACT ON
ENDIF
IF pcOldTalk="ON"
  SET TALK ON
ENDIF
do case
  case empty(pcOldDBC)
    set data to
  case pcOldDBC<>DBC()
    set data to (pcOldDBC)
endcase
RETURN .T.


PROCEDURE rireuse
* rireuse.prg
PARAMETERS tcTableName,tcWkArea
pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),;
  upper(tcTableName)+"*"+str(tcWkArea,5))
RETURN .t.

********************************************************************************
** "Referential integrity delete trigger for" Categories
PROCEDURE __RI_DELETE_Categories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CATEGORYID TO lcParentID,pcParentID
pcParentExpr="CATEGORYID"
lcChildWkArea=riopen("Products","categoryid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CATEGORYID
pcChildExpr="CATEGORYID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Categories
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Categories
** "Referential integrity update trigger for" Categories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CATEGORYID")
pcParentID=lcOldParentID
pcParentExpr="CATEGORYID"
lcParentID=CATEGORYID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO categoryid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=CATEGORYID
  pcChildExpr="CATEGORYID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Categories
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" CustomerDemographics
PROCEDURE __RI_DELETE_CustomerDemographics
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ALLTRIM(UPPER(CUSTOMERTYPEID)) TO lcParentID,pcParentID
pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
lcChildWkArea=riopen("CustomerCustomerDemo","custtypeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID))
pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("CustomerCustomerDemo",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" CustomerDemographics
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_CustomerDemographics
** "Referential integrity update trigger for" CustomerDemographics
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ALLTRIM(UPPER(CUSTOMERTYPEID))")
pcParentID=lcOldParentID
pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
lcParentID=ALLTRIM(UPPER(CUSTOMERTYPEID))
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("CustomerCustomerDemo")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO custtypeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID))
  pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("CustomerCustomerDemo",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" CustomerDemographics
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Customers
PROCEDURE __RI_DELETE_Customers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CUSTOMERID TO lcParentID,pcParentID
pcParentExpr="CUSTOMERID"
lcChildWkArea=riopen("Orders","customerid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CUSTOMERID
pcChildExpr="CUSTOMERID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CUSTOMERID TO lcParentID,pcParentID
pcParentExpr="CUSTOMERID"
lcChildWkArea=riopen("CustomerCustomerDemo","customerid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=ALLTRIM(UPPER(CUSTOMERID))
pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("CustomerCustomerDemo",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Customers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Customers
** "Referential integrity update trigger for" Customers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CUSTOMERID")
pcParentID=lcOldParentID
pcParentExpr="CUSTOMERID"
lcParentID=CUSTOMERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR CUSTOMERID=lcOldParentID
    pnChildRec=recno()
    pcChildID=CUSTOMERID
    pcChildExpr="CUSTOMERID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("CUSTOMERID",lcParentID,"CUSTOMERS")
  ENDSCAN get all of the Orders records
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CUSTOMERID")
pcParentID=lcOldParentID
pcParentExpr="CUSTOMERID"
lcParentID=CUSTOMERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("CustomerCustomerDemo")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO customerid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ALLTRIM(UPPER(CUSTOMERID))
  pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("CustomerCustomerDemo",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Customers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Employees
PROCEDURE __RI_DELETE_Employees
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("Employees","reportsto")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=REPORTSTO
pcChildExpr="REPORTSTO"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Employees",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("Orders","employeeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=EMPLOYEEID
pcChildExpr="EMPLOYEEID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("EmployeeTerritories","employeeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
SELECT (lcChildWkArea)
SEEK lcParentID
SCAN WHILE EMPLOYEEID=lcParentID AND llRetVal
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  llRetVal=ridelete()
ENDSCAN get all of the EmployeeTerritories records
=rireuse("EmployeeTerritories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Employees
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Employees
** "Referential integrity update trigger for" Employees
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Employees")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO reportsto IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=REPORTSTO
  pcChildExpr="REPORTSTO"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Employees",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO employeeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("EmployeeTerritories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO employeeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("EmployeeTerritories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Employees
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Orders
PROCEDURE __RI_DELETE_Orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ORDERID TO lcParentID,pcParentID
pcParentExpr="ORDERID"
lcChildWkArea=riopen("OrderDetails","orderid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
SELECT (lcChildWkArea)
SEEK lcParentID
SCAN WHILE ORDERID=lcParentID AND llRetVal
  pnChildRec=recno()
  pcChildID=ORDERID
  pcChildExpr="ORDERID"
  llRetVal=ridelete()
ENDSCAN get all of the OrderDetails records
=rireuse("OrderDetails",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Orders
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Orders
** "Referential integrity update trigger for" Orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ORDERID")
pcParentID=lcOldParentID
pcParentExpr="ORDERID"
lcParentID=ORDERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("OrderDetails")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO orderid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ORDERID
  pcChildExpr="ORDERID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("OrderDetails",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Orders
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Products
PROCEDURE __RI_DELETE_Products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE PRODUCTID TO lcParentID,pcParentID
pcParentExpr="PRODUCTID"
lcChildWkArea=riopen("OrderDetails","productid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=PRODUCTID
pcChildExpr="PRODUCTID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("OrderDetails",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Products
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Products
** "Referential integrity update trigger for" Products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("PRODUCTID")
pcParentID=lcOldParentID
pcParentExpr="PRODUCTID"
lcParentID=PRODUCTID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("OrderDetails")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO productid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=PRODUCTID
  pcChildExpr="PRODUCTID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("OrderDetails",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Products
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Region
PROCEDURE __RI_DELETE_Region
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE REGIONID TO lcParentID,pcParentID
pcParentExpr="REGIONID"
lcChildWkArea=riopen("Territories","regionid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=REGIONID
pcChildExpr="REGIONID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Territories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Region
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Region
** "Referential integrity update trigger for" Region
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("REGIONID")
pcParentID=lcOldParentID
pcParentExpr="REGIONID"
lcParentID=REGIONID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Territories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO regionid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=REGIONID
  pcChildExpr="REGIONID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Territories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Region
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Shippers
PROCEDURE __RI_DELETE_Shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SHIPPERID TO lcParentID,pcParentID
pcParentExpr="SHIPPERID"
lcChildWkArea=riopen("Orders","shipperid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SHIPVIA
pcChildExpr="SHIPVIA"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Shippers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Shippers
** "Referential integrity update trigger for" Shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SHIPPERID")
pcParentID=lcOldParentID
pcParentExpr="SHIPPERID"
lcParentID=SHIPPERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO shipperid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=SHIPVIA
  pcChildExpr="SHIPVIA"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Shippers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Suppliers
PROCEDURE __RI_DELETE_Suppliers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SUPPLIERID TO lcParentID,pcParentID
pcParentExpr="SUPPLIERID"
lcChildWkArea=riopen("Products","supplierid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SUPPLIERID
pcChildExpr="SUPPLIERID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Suppliers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Suppliers
** "Referential integrity update trigger for" Suppliers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SUPPLIERID")
pcParentID=lcOldParentID
pcParentExpr="SUPPLIERID"
lcParentID=SUPPLIERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO supplierid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=SUPPLIERID
  pcChildExpr="SUPPLIERID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Suppliers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Territories
PROCEDURE __RI_DELETE_Territories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ALLTRIM(UPPER(TERRITORYID)) TO lcParentID,pcParentID
pcParentExpr="ALLTRIM(UPPER(TERRITORYID))"
lcChildWkArea=riopen("EmployeeTerritories","territoryi")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=TERRITORYID
pcChildExpr="TERRITORYID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("EmployeeTerritories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Territories
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Territories
** "Referential integrity update trigger for" Territories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ALLTRIM(UPPER(TERRITORYID))")
pcParentID=lcOldParentID
pcParentExpr="ALLTRIM(UPPER(TERRITORYID))"
lcParentID=ALLTRIM(UPPER(TERRITORYID))
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("EmployeeTerritories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO territoryi IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=TERRITORYID
  pcChildExpr="TERRITORYID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("EmployeeTerritories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Territories
********************************************************************************
**__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER**

*------------------------------------------------
PROCEDURE CustOrderHist(tcCustomerID as String )
*------------------------------------------------
LOCAL lcCustomerID as String 
lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID)

SELECT ProductName, SUM(Quantity) AS Total ;
FROM Products P, OrderDetails OD, Orders O, Customers C ;
WHERE C.CustomerID = lcCustomerID ;
AND C.CustomerID = O.CustomerID AND O.OrderID = OD.OrderID AND OD.ProductID = P.ProductID ;
GROUP BY ProductName

ENDPROC

*------------------------------------------------
PROCEDURE CustOrdersDetail(tiOrderID as Integer )
*------------------------------------------------ 
LOCAL liOrderID as Integer 
liOrderID = IIF(VARTYPE(tiOrderID)!="N",0,tiOrderID)

SELECT ProductName, ;
    ROUND(Od.UnitPrice, 2) AS UnitPrice,;
    Quantity, ; 
    (Discount*100) AS Discount, ;
    ROUND(Quantity * (1 - Discount) * Od.UnitPrice, 2) AS ExtendedPrice;
FROM Products P, OrderDetails Od;
WHERE Od.ProductID = P.ProductID and Od.OrderID = liOrderID

ENDPROC

*------------------------------------------------
PROCEDURE CustOrdersOrders(tcCustomerID as String)
*------------------------------------------------
LOCAL lcCustomerID as String 
lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID)

SELECT OrderID, ;
	OrderDate,;
	RequiredDate,;
	ShippedDate;
FROM Orders;
WHERE CustomerID = lcCustomerID;
ORDER BY OrderID

ENDPROC

*---------------------------------------------------------------------------------
PROCEDURE SalesByYear(tdBeginning_Date as Date, tdEnding_Date as Date)
*---------------------------------------------------------------------------------
ldBeginning_Date= IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date)
ldEnding_Date 	= IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date)

SELECT Orders.ShippedDate, Orders.OrderID, Order_Subtotals.Subtotal, YEAR(ShippedDate) AS Year ;
FROM Orders ;
INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID ;
WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date)

ENDPROC

*---------------------------------------------------------------------------------
PROCEDURE EmployeeSalesbyCountry(tdBeginning_Date as Date, tdEnding_Date as Date)
*---------------------------------------------------------------------------------
LOCAL ldBeginning_Date as Date, ldEnding_Date as Date
ldBeginning_Date= IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date)
ldEnding_Date 	= IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date)

SELECT Employees.Country, Employees.LastName, ;
	Employees.FirstName, Orders.ShippedDate, ;
	Orders.OrderID, Order_Subtotals.Subtotal AS SaleAmount ;
FROM Employees INNER JOIN ;
	(Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID) ;
	ON Employees.EmployeeID = Orders.EmployeeID ;
WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date) 

ENDPROC

��
**__RI_HEADER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_HEADER**
procedure RIDELETE
local llRetVal
llRetVal=.t.
 IF (ISRLOCKED() and !deleted()) OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF !deleted()
      DELETE
      IF CURSORGETPROP('BUFFERING') > 1
      	=TABLEUPDATE()
      ENDIF
    ENDIF not already deleted
  ENDIF
  UNLOCK RECORD (RECNO())
  llRetVal=pnerror=0
RETURN llRetVal

procedure RIUPDATE
lparameters tcFieldName,tcNewValue,tcCascadeParent
local llRetVal
llRetVal=.t.
 IF ISRLOCKED() OR !RLOCK()
    llRetVal=.F.
  ELSE
    IF EVAL(tcFieldName)<>tcNewValue
      PRIVATE pcCascadeParent
      pcCascadeParent=upper(iif(type("tcCascadeParent")<>"C","",tcCascadeParent))
      REPLACE (tcFieldName) WITH tcNewValue
      IF CURSORGETPROP('BUFFERING') > 1
      	=TABLEUPDATE()
      ENDIF
    ENDIF values don't already match
  ENDIF it's locked already, or I was able to lock it
  UNLOCK RECORD (RECNO())
  llRetVal=pnerror=0
return llRetVal

procedure rierror
parameters tnErrNo,tcMessage,tcCode,tcProgram
local lnErrorRows,lnXX
lnErrorRows=alen(gaErrors,1)
if type('gaErrors[lnErrorRows,1]')<>"L"
  dimension gaErrors[lnErrorRows+1,alen(gaErrors,2)]
  lnErrorRows=lnErrorRows+1
endif
gaErrors[lnErrorRows,1]=tnErrNo
gaErrors[lnErrorRows,2]=tcMessage
gaErrors[lnErrorRows,3]=tcCode
gaErrors[lnErrorRows,4]=""
lnXX=1
do while !empty(program(lnXX))
  gaErrors[lnErrorRows,4]=gaErrors[lnErrorRows,4]+","+;
  program(lnXX)
  lnXX=lnXX+1
enddo
gaErrors[lnErrorRows,5]=pcParentDBF
gaErrors[lnErrorRows,6]=pnParentRec
gaErrors[lnErrorRows,7]=pcParentID
gaErrors[lnErrorRows,8]=pcParentExpr
gaErrors[lnErrorRows,9]=pcChildDBF
gaErrors[lnErrorRows,10]=pnChildRec
gaErrors[lnErrorRows,11]=pcChildID
gaErrors[lnErrorRows,12]=pcChildExpr
return tnErrNo


PROCEDURE riopen
PARAMETERS tcTable,tcOrder

LOCAL lcCurWkArea,lcNewWkArea,lnInUseSpot,lnOccurs,lnOccurance
lnInUseSpot=0
lnOccurs = OCCURS(UPPER(tcTable)+"*",UPPER(pcRIcursors))
FOR lnOccurance = 1 TO lnOccurs
	lnInUseSpot=ATC(tcTable+"*",pcRIcursors,lnOccurance)
	IF ISDIGIT(SUBSTR(pcRIcursors,lnInUseSpot-1,1)) OR;
		 EMPTY(SUBSTR(pcRIcursors,lnInUseSpot-1,1))
		EXIT
	ENDIF
	lnInUseSpot=0
ENDFOR

IF lnInUseSpot=0
  lcCurWkArea=select()
  SELECT 0
  lcNewWkArea=select()
  IF NOT EMPTY(tcOrder)
    USE (tcTable) AGAIN ORDER (tcOrder) ;
      ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ELSE
    USE (tcTable) AGAIN ALIAS ("__ri"+LTRIM(STR(SELECT()))) share
  ENDIF
  if pnerror=0
    pcRIcursors=pcRIcursors+upper(tcTable)+"?"+STR(SELECT(),5)
  else
    lcNewWkArea=0
  endif something bad happened while attempting to open the file
ELSE
  lcNewWkArea=val(substr(pcRIcursors,lnInUseSpot+len(tcTable)+1,5))
  pcRIcursors = strtran(pcRIcursors,upper(tcTable)+"*"+str(lcNewWkArea,5),;
    upper(tcTable)+"?"+str(lcNewWkArea,5))
  IF NOT EMPTY(tcOrder)
    SET ORDER TO (tcOrder) IN (lcNewWkArea)
  ENDIF sent an order
  if pnerror<>0
    lcNewWkArea=0
  endif something bad happened while setting order
ENDIF
RETURN (lcNewWkArea)


PROCEDURE riend
PARAMETERS tlSuccess
local lnXX,lnSpot,lcWorkArea
IF tlSuccess
  END TRANSACTION
ELSE
  SET DELETED OFF
  ROLLBACK
  SET DELETED ON
ENDIF
IF EMPTY(pcRIolderror)
  ON ERROR
ELSE
  ON ERROR &pcRIolderror.
ENDIF
FOR lnXX=1 TO occurs("*",pcRIcursors)
  lnSpot=atc("*",pcRIcursors,lnXX)+1
  USE IN (VAL(substr(pcRIcursors,lnSpot,5)))
ENDFOR
IF pcOldCompat = "ON"
	SET COMPATIBLE ON
ENDIF
IF pcOldDele="OFF"
  SET DELETED OFF
ENDIF
IF pcOldExact="ON"
  SET EXACT ON
ENDIF
IF pcOldTalk="ON"
  SET TALK ON
ENDIF
do case
  case empty(pcOldDBC)
    set data to
  case pcOldDBC<>DBC()
    set data to (pcOldDBC)
endcase
RETURN .T.


PROCEDURE rireuse
* rireuse.prg
PARAMETERS tcTableName,tcWkArea
pcRIcursors = strtran(pcRIcursors,upper(tcTableName)+"?"+str(tcWkArea,5),;
  upper(tcTableName)+"*"+str(tcWkArea,5))
RETURN .t.

********************************************************************************
** "Referential integrity delete trigger for" Categories
PROCEDURE __RI_DELETE_Categories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CATEGORYID TO lcParentID,pcParentID
pcParentExpr="CATEGORYID"
lcChildWkArea=riopen("Products","categoryid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CATEGORYID
pcChildExpr="CATEGORYID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Categories
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Categories
** "Referential integrity update trigger for" Categories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CATEGORYID")
pcParentID=lcOldParentID
pcParentExpr="CATEGORYID"
lcParentID=CATEGORYID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO categoryid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=CATEGORYID
  pcChildExpr="CATEGORYID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Categories
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" CustomerDemographics
PROCEDURE __RI_DELETE_CustomerDemographics
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ALLTRIM(UPPER(CUSTOMERTYPEID)) TO lcParentID,pcParentID
pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
lcChildWkArea=riopen("CustomerCustomerDemo","custtypeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID))
pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("CustomerCustomerDemo",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" CustomerDemographics
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_CustomerDemographics
** "Referential integrity update trigger for" CustomerDemographics
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ALLTRIM(UPPER(CUSTOMERTYPEID))")
pcParentID=lcOldParentID
pcParentExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
lcParentID=ALLTRIM(UPPER(CUSTOMERTYPEID))
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("CustomerCustomerDemo")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO custtypeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ALLTRIM(UPPER(CUSTOMERTYPEID))
  pcChildExpr="ALLTRIM(UPPER(CUSTOMERTYPEID))"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("CustomerCustomerDemo",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" CustomerDemographics
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Customers
PROCEDURE __RI_DELETE_Customers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CUSTOMERID TO lcParentID,pcParentID
pcParentExpr="CUSTOMERID"
lcChildWkArea=riopen("Orders","customerid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=CUSTOMERID
pcChildExpr="CUSTOMERID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE CUSTOMERID TO lcParentID,pcParentID
pcParentExpr="CUSTOMERID"
lcChildWkArea=riopen("CustomerCustomerDemo","customerid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=ALLTRIM(UPPER(CUSTOMERID))
pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("CustomerCustomerDemo",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Customers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Customers
** "Referential integrity update trigger for" Customers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CUSTOMERID")
pcParentID=lcOldParentID
pcParentExpr="CUSTOMERID"
lcParentID=CUSTOMERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SELECT (lcChildWkArea)
  SCAN FOR CUSTOMERID=lcOldParentID
    pnChildRec=recno()
    pcChildID=CUSTOMERID
    pcChildExpr="CUSTOMERID"
    IF NOT llRetVal
      EXIT
    ENDIF && not llretval
    llRetVal=riupdate("CUSTOMERID",lcParentID,"CUSTOMERS")
  ENDSCAN get all of the Orders records
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("CUSTOMERID")
pcParentID=lcOldParentID
pcParentExpr="CUSTOMERID"
lcParentID=CUSTOMERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("CustomerCustomerDemo")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO customerid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ALLTRIM(UPPER(CUSTOMERID))
  pcChildExpr="ALLTRIM(UPPER(CUSTOMERID))"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("CustomerCustomerDemo",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Customers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Employees
PROCEDURE __RI_DELETE_Employees
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("Employees","reportsto")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=REPORTSTO
pcChildExpr="REPORTSTO"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Employees",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("Orders","employeeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=EMPLOYEEID
pcChildExpr="EMPLOYEEID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE EMPLOYEEID TO lcParentID,pcParentID
pcParentExpr="EMPLOYEEID"
lcChildWkArea=riopen("EmployeeTerritories","employeeid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
SELECT (lcChildWkArea)
SEEK lcParentID
SCAN WHILE EMPLOYEEID=lcParentID AND llRetVal
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  llRetVal=ridelete()
ENDSCAN get all of the EmployeeTerritories records
=rireuse("EmployeeTerritories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Employees
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Employees
** "Referential integrity update trigger for" Employees
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Employees")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO reportsto IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=REPORTSTO
  pcChildExpr="REPORTSTO"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Employees",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO employeeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("EMPLOYEEID")
pcParentID=lcOldParentID
pcParentExpr="EMPLOYEEID"
lcParentID=EMPLOYEEID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("EmployeeTerritories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO employeeid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=EMPLOYEEID
  pcChildExpr="EMPLOYEEID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("EmployeeTerritories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Employees
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Orders
PROCEDURE __RI_DELETE_Orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ORDERID TO lcParentID,pcParentID
pcParentExpr="ORDERID"
lcChildWkArea=riopen("OrderDetails","orderid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
SELECT (lcChildWkArea)
SEEK lcParentID
SCAN WHILE ORDERID=lcParentID AND llRetVal
  pnChildRec=recno()
  pcChildID=ORDERID
  pcChildExpr="ORDERID"
  llRetVal=ridelete()
ENDSCAN get all of the OrderDetails records
=rireuse("OrderDetails",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Orders
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Orders
** "Referential integrity update trigger for" Orders
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ORDERID")
pcParentID=lcOldParentID
pcParentExpr="ORDERID"
lcParentID=ORDERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("OrderDetails")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO orderid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=ORDERID
  pcChildExpr="ORDERID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("OrderDetails",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Orders
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Products
PROCEDURE __RI_DELETE_Products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE PRODUCTID TO lcParentID,pcParentID
pcParentExpr="PRODUCTID"
lcChildWkArea=riopen("OrderDetails","productid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=PRODUCTID
pcChildExpr="PRODUCTID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("OrderDetails",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Products
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Products
** "Referential integrity update trigger for" Products
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("PRODUCTID")
pcParentID=lcOldParentID
pcParentExpr="PRODUCTID"
lcParentID=PRODUCTID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("OrderDetails")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO productid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=PRODUCTID
  pcChildExpr="PRODUCTID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("OrderDetails",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Products
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Region
PROCEDURE __RI_DELETE_Region
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE REGIONID TO lcParentID,pcParentID
pcParentExpr="REGIONID"
lcChildWkArea=riopen("Territories","regionid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=REGIONID
pcChildExpr="REGIONID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Territories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Region
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Region
** "Referential integrity update trigger for" Region
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("REGIONID")
pcParentID=lcOldParentID
pcParentExpr="REGIONID"
lcParentID=REGIONID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Territories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO regionid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=REGIONID
  pcChildExpr="REGIONID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Territories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Region
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Shippers
PROCEDURE __RI_DELETE_Shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SHIPPERID TO lcParentID,pcParentID
pcParentExpr="SHIPPERID"
lcChildWkArea=riopen("Orders","shipperid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SHIPVIA
pcChildExpr="SHIPVIA"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Orders",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Shippers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Shippers
** "Referential integrity update trigger for" Shippers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SHIPPERID")
pcParentID=lcOldParentID
pcParentExpr="SHIPPERID"
lcParentID=SHIPPERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Orders")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO shipperid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=SHIPVIA
  pcChildExpr="SHIPVIA"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Orders",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Shippers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Suppliers
PROCEDURE __RI_DELETE_Suppliers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE SUPPLIERID TO lcParentID,pcParentID
pcParentExpr="SUPPLIERID"
lcChildWkArea=riopen("Products","supplierid")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=SUPPLIERID
pcChildExpr="SUPPLIERID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("Products",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Suppliers
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Suppliers
** "Referential integrity update trigger for" Suppliers
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("SUPPLIERID")
pcParentID=lcOldParentID
pcParentExpr="SUPPLIERID"
lcParentID=SUPPLIERID
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("Products")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO supplierid IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=SUPPLIERID
  pcChildExpr="SUPPLIERID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("Products",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Suppliers
********************************************************************************

********************************************************************************
** "Referential integrity delete trigger for" Territories
PROCEDURE __RI_DELETE_Territories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcParentWkArea
LOCAL llDelHeaderarea
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
STORE ALLTRIM(UPPER(TERRITORYID)) TO lcParentID,pcParentID
pcParentExpr="ALLTRIM(UPPER(TERRITORYID))"
lcChildWkArea=riopen("EmployeeTerritories","territoryi")
IF lcChildWkArea<=0
  IF _triggerlevel=1
    DO riend WITH .F.
  ENDIF at the end of the highest trigger level
  RETURN .F.
ENDIF not able to open the child work area
pcChildDBF=dbf(lcChildWkArea)
llRetVal=!SEEK(lcParentID,lcChildWkArea)
SELECT (lcChildWkArea)
pnChildRec=recno()
pcChildID=TERRITORYID
pcChildExpr="TERRITORYID"
IF !llRetVal
  pnError = rierror(-1,"Delete restrict rule violated.","","")
ENDIF
=rireuse("EmployeeTerritories",lcChildWkArea)
IF NOT llRetVal
  IF _triggerlevel=1
    DO riend WITH llRetVal
  ENDIF at the end of the highest trigger level
  SELECT (lcStartArea)
  RETURN llRetVal
ENDIF
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Delete trigger for" Territories
********************************************************************************

********************************************************************************
procedure __RI_UPDATE_Territories
** "Referential integrity update trigger for" Territories
LOCAL llRetVal
llRetVal = .t.
PRIVATE pcParentDBF,pnParentRec,pcChildDBF,pnChildRec,pcParentID,pcChildID
PRIVATE pcParentExpr,pcChildExpr
STORE "" TO pcParentDBF,pcChildDBF,pcParentID,pcChildID,pcParentExpr,pcChildExpr
STORE 0 TO pnParentRec,pnChildRec
IF _triggerlevel=1
  BEGIN TRANSACTION
  PRIVATE pcRIcursors,pcRIwkareas,pcRIolderror,pnerror,;
  pcOldDele,pcOldExact,pcOldTalk,pcOldCompat,PcOldDBC
  pcOldTalk=SET("TALK")
  SET TALK OFF
  pcOldDele=SET("DELETED")
  pcOldExact=SET("EXACT")
  pcOldCompat=SET("COMPATIBLE")
  SET COMPATIBLE OFF
  SET DELETED ON
  SET EXACT OFF
  pcRIcursors=""
  pcRIwkareas=""
  pcRIolderror=ON("error")
  pnerror=0
  ON ERROR pnerror=rierror(ERROR(),message(),message(1),program())
  IF TYPE('gaErrors(1)')<>"U"
    release gaErrors
  ENDIF
  PUBLIC gaErrors(1,12)
  pcOldDBC=DBC()
  SET DATA TO ("NORTHWIND")
ENDIF first trigger
LOCAL lcParentID && parent's value to be sought in child
LOCAL lcOldParentID && previous parent id value
LOCAL lcChildWkArea && child work area handle returned by riopen
LOCAL lcChildID && child's value to be sought in parent
LOCAL lcOldChildID && old child id value
LOCAL lcParentWkArea && parentwork area handle returned by riopen
LOCAL lcStartArea
lcStartArea=select()
llRetVal=.t.
lcParentWkArea=select()
SELECT (lcParentWkArea)
pcParentDBF=dbf()
pnParentRec=recno()
lcOldParentID=OLDVAL("ALLTRIM(UPPER(TERRITORYID))")
pcParentID=lcOldParentID
pcParentExpr="ALLTRIM(UPPER(TERRITORYID))"
lcParentID=ALLTRIM(UPPER(TERRITORYID))
IF lcParentID<>lcOldParentID
  lcChildWkArea=riopen("EmployeeTerritories")
  IF lcChildWkArea<=0
    IF _triggerlevel=1
      DO riend WITH .F.
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN .F.
  ENDIF not able to open the child work area
  pcChildDBF=dbf(lcChildWkArea)
  SET ORDER TO territoryi IN (lcChildWkArea)
  llRetVal=!SEEK(lcOldParentID,lcChildWkArea)
  pnChildRec=recno()
  pcChildID=TERRITORYID
  pcChildExpr="TERRITORYID"
  IF !llRetVal
    pnError = rierror(-1,"Update restrict rule violated.","","")
  ENDIF
  =rireuse("EmployeeTerritories",lcChildWkArea)
  IF NOT llRetVal
    IF _triggerlevel=1
      DO riend WITH llRetVal
    ENDIF at the end of the highest trigger level
    SELECT (lcStartArea)
    RETURN llRetVal
  ENDIF
ENDIF this parent id changed
IF _triggerlevel=1
  do riend with llRetVal
ENDIF at the end of the highest trigger level
SELECT (lcStartArea)
RETURN llRetVal
** "End of Referential integrity Update trigger for" Territories
********************************************************************************
**__RI_FOOTER!@ Do NOT REMOVE or MODIFY this line!!!! @!__RI_FOOTER**

*------------------------------------------------
PROCEDURE CustOrderHist(tcCustomerID as String )
*------------------------------------------------
LOCAL lcCustomerID as String 
lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID)

SELECT ProductName, SUM(Quantity) AS Total ;
  FROM Products P, OrderDetails OD, Orders O, Customers C ;
  WHERE C.CustomerID = lcCustomerID ;
    AND C.CustomerID = O.CustomerID ;
    AND O.OrderID = OD.OrderID ;
    AND OD.ProductID = P.ProductID ;
  GROUP BY ProductName ;
  INTO CURSOR CustOrderHist

SETRESULTSET('CustOrderHist')
RETURN RECCOUNT('CustOrderHist')

ENDPROC

*------------------------------------------------
PROCEDURE CustOrdersDetail(tiOrderID as Integer )
*------------------------------------------------ 
LOCAL liOrderID as Integer 
liOrderID = IIF(VARTYPE(tiOrderID)!="N",0,tiOrderID)

SELECT ProductName, ;
  ROUND(Od.UnitPrice, 2) AS UnitPrice, ;
  Quantity, ; 
  (Discount*100) AS Discount, ;
  ROUND(Quantity * (1 - Discount) * Od.UnitPrice, 2) AS ExtendedPrice ;
  FROM Products P, OrderDetails Od ;
  WHERE Od.ProductID = P.ProductID and Od.OrderID = liOrderID ;
  INTO CURSOR CustOrdersDetail

SETRESULTSET('CustOrdersDetail')
RETURN RECCOUNT('CustOrdersDetail')

ENDPROC

*------------------------------------------------
PROCEDURE CustOrdersOrders(tcCustomerID as String)
*------------------------------------------------
LOCAL lcCustomerID as String 
lcCustomerID = IIF(VARTYPE(tcCustomerID)!="C","",tcCustomerID)

SELECT OrderID, OrderDate, RequiredDate, ShippedDate ;
  FROM Orders ;
  WHERE CustomerID = lcCustomerID ;
  ORDER BY OrderID ;
  INTO CURSOR CustOrdersOrders

SETRESULTSET('CustOrdersOrders')
RETURN RECCOUNT('CustOrdersOrders')

ENDPROC

*---------------------------------------------------------------------------------
PROCEDURE SalesByYear(tdBeginning_Date as Date, tdEnding_Date as Date)
*---------------------------------------------------------------------------------
ldBeginning_Date= IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date)
ldEnding_Date 	= IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date)

SELECT Orders.ShippedDate, Orders.OrderID, Order_Subtotals.Subtotal, YEAR(ShippedDate) AS Year ;
  FROM Orders ;
  INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID ;
  WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date) ;
  INTO CURSOR SalesByYear

SETRESULTSET('SalesByYear')
RETURN RECCOUNT('SalesByYear')

ENDPROC

*---------------------------------------------------------------------------------
PROCEDURE EmployeeSalesbyCountry(tdBeginning_Date as Date, tdEnding_Date as Date)
*---------------------------------------------------------------------------------
LOCAL ldBeginning_Date as Date, ldEnding_Date as Date
ldBeginning_Date = IIF(VARTYPE(tdBeginning_Date)!="D",{^1901/01/01},tdBeginning_Date)
ldEnding_Date 	 = IIF(VARTYPE(tdEnding_Date)!="D",{^2101/01/01},tdEnding_Date)

SELECT Employees.Country, Employees.LastName, ;
  Employees.FirstName, Orders.ShippedDate, ;
  Orders.OrderID, Order_Subtotals.Subtotal AS SaleAmount ;
  FROM Employees INNER JOIN ;
	(Orders INNER JOIN Order_Subtotals ON Orders.OrderID = Order_Subtotals.OrderID) ;
	ON Employees.EmployeeID = Orders.EmployeeID ;
  WHERE BETWEEN(Orders.ShippedDate, ldBeginning_Date, ldEnding_Date) ;
  INTO CURSOR SalesbyCountry

SETRESULTSET('SalesbyCountry')
RETURN RECCOUNT('SalesbyCountry')

ENDPROC

��� ������%ƐϢV#��U����T��a��%�C���C'
	�CS
��9�T��-�����
%�C'
��|��%�C�	BUFFERING���x�	��C�����
Z#�CO��T������	B����ULLRETVALPNERROR���������T��a��%�C���CS
��@�T��-�����%�C������5��3T��CCC�tcCascadeParentb�C����6f��>�������%�C�	BUFFERING�����	��C�����
Z#�CO��T������	B����UTCFIELDNAME
TCNEWVALUETCCASCADEPARENTLLRETVALPCCASCADEPARENTPNERROR'4���������T��C����+%�C�gaErrors[lnErrorRows,1]b�L����������C����T�������T�����������T�����������T�����������T�����������
T�����+�CC�t�
��O�,T��������C����,C�t��T�������T�����������T�����������T���������	��T���������
��T������	�����T������
�����T���������
��T�����������	B����UTNERRNO	TCMESSAGETCCODE	TCPROGRAMLNERRORROWSLNXXGAERRORSPCPARENTDBFPNPARENTREC
PCPARENTIDPCPARENTEXPR
PCCHILDDBF
PNCHILDREC	PCCHILDIDPCCHILDEXPRV4����������
T�����T��CC�f�*C�f��������(������T��C��*�����0%�CC����\��CC����\�����!��
T�������%�������T��CW��F��T��CW��%�C��
��*�%Q������__riCCCWZA������P�Q������__riCCCWZA���%������� T���C�f�?CCW�Z�����
T�������E�!T��CC��C�>��\g��5T��C�C�f�*C��ZC�f�?C��Z���%�C��
���G(���(�����%�����A�
T�������
B����U	TCTABLETCORDERLCCURWKAREALCNEWWKAREALNINUSESPOTLNOCCURSLNOCCURANCEPCRICURSORSPNERROR�4�������
%����(�����@�G���G ��%�C����[�{���~�ON ERROR &pcRIolderror.
������(�C�*������T��C�*������Q�CC���\g����%���ON����GA ��%���OFF��	�G��%���ON��&�G ��%��	�ON��C�G2 ��
H�T����C�
���i�G(���
C�����G(��
���B�a��U	TLSUCCESSLNXXLNSPOT
LCWORKAREAPCRIOLDERRORPCRICURSORSPCOLDCOMPAT	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDDBCJ4���5T��C�C�f�?C��ZC�f�*C��Z���B�a��UTCTABLENAMETCWKAREAPCRICURSORS���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
CATEGORYID��&T��C�Products�
categoryid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
CATEGORYID��%��
����9T��C����Delete restrict rule violated.��������C�Products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
CATEGORYIDRIOPENRIENDRIERRORRIREUSEo���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
CATEGORYID�_��
T�����T���
CATEGORYID��
T�����%�����6�T��C�Products���%������%��=���	���-���
F����B�-���T��C�&��G(���(�
categoryid�T��C���
��T��CO��
T�����T���
CATEGORYID��%��
����9T��C����Update restrict rule violated.��������C�Products����%��
��2�%��=��������
F����	B������%��=���U�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
CATEGORYIDRIOPENRIENDRIERRORRIREUSEd���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J�CC�f��(���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��2T��C�CustomerCustomerDemo�
custtypeid���%������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��T��CC�f���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��%��
����9T��C����Delete restrict rule violated.������%��C�CustomerCustomerDemo����%��
��+�%��=��������
F����	B�����%��=���J�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREACUSTOMERTYPEIDRIOPENRIENDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��.T��C�ALLTRIM(UPPER(CUSTOMERTYPEID))�_��
T�����+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��T��CC�f���%�������%T��C�CustomerCustomerDemo���%�����V�%��=���A���-���
F����B�-���T��C�&��G(���(�
custtypeid�T��C���
��T��CO��T��CC�f���+T���ALLTRIM(UPPER(CUSTOMERTYPEID))��%��
��%�9T��C����Update restrict rule violated.������%��C�CustomerCustomerDemo����%��
����%��=���w�����
F����	B������%��=���������
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREACUSTOMERTYPEIDRIOPENRIEND
CUSTTYPEIDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
CUSTOMERID��$T��C�Orders�
customerid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
CUSTOMERID��%��
����9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���������
F����	B�����
F����T��C&��T��CO��J���(���T���
CUSTOMERID��2T��C�CustomerCustomerDemo�
customerid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��T��CC�f���'T���ALLTRIM(UPPER(CUSTOMERID))��%��
��Q�9T��C����Delete restrict rule violated.������%��C�CustomerCustomerDemo����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
CUSTOMERIDRIOPENRIENDRIERRORRIREUSEt���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
CUSTOMERID�_��
T�����T���
CUSTOMERID��
T�����%������T��C�Orders���%������%��=������-���
F����B�-���T��C�&��
F����~�������T��CO��
T�����T���
CUSTOMERID��%��
����!��+T��C�
CUSTOMERID��	CUSTOMERS������C�Orders����%��
���%��=��������
F����	B������
F����T��C&��T��CO��T��C�
CUSTOMERID�_��
T�����T���
CUSTOMERID��
T�����%�����;�%T��C�CustomerCustomerDemo���%������%��=�������-���
F����B�-���T��C�&��G(���(�
customerid�T��C���
��T��CO��T��CC�f���'T���ALLTRIM(UPPER(CUSTOMERID))��%��
����9T��C����Update restrict rule violated.������%��C�CustomerCustomerDemo����%��
��7�%��=��� �����
F����	B������%��=���Z�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
CUSTOMERIDRIOPENRIENDRIUPDATERIREUSERIERRORb���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��&T��C�	Employees�	reportsto���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���	REPORTSTO��%��
����9T��C����Delete restrict rule violated.��������C�	Employees����%��
����%��=���������
F����	B�����
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��$T��C�Orders�
employeeid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
EMPLOYEEID��%��
��3�9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���w�����
F����	B�����
F����T��C&��T��CO��J���(���T���
EMPLOYEEID��1T��C�EmployeeTerritories�
employeeid���%�����D�%��=���9���-���B�-���T��C�&��
F����	E����~+�����	����T��CO��
T�����T���
EMPLOYEEID��T��C����$��C�EmployeeTerritories����%��
��)�%��=��������
F����	B�����%��=���H�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
EMPLOYEEIDRIOPENRIEND	REPORTSTORIERRORRIREUSERIDELETEi���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����6�T��C�	Employees���%������%��=���
���-���
F����B�-���T��C�&��G(���(�	reportsto�T��C���
��T��CO��
T�����T���	REPORTSTO��%��
����9T��C����Update restrict rule violated.��������C�	Employees����%��
��2�%��=��������
F����	B������
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����&�T��C�Orders���%������%��=�������-���
F����B�-���T��C�&��G(���(�
employeeid�T��C���
��T��CO��
T�����T���
EMPLOYEEID��%��
����9T��C����Update restrict rule violated.��������C�Orders����%��
��"�%��=��������
F����	B������
F����T��C&��T��CO��T��C�
EMPLOYEEID�_��
T�����T���
EMPLOYEEID��
T�����%�����0�$T��C�EmployeeTerritories���%�����
�%��=�������-���
F����B�-���T��C�&��G(���(�
employeeid�T��C���
��T��CO��
T�����T���
EMPLOYEEID��%��
����9T��C����Update restrict rule violated.������$��C�EmployeeTerritories����%��
��,�%��=��������
F����	B������%��=���O�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
EMPLOYEEIDRIOPENRIEND	REPORTSTORIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���ORDERID��'T��C�OrderDetails�orderid���%�������%��=�������-���B�-���T��C�&��
F����	E����~+�����	��W�T��CO��
T�����T���ORDERID��T��C������C�OrderDetails����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAORDERIDRIOPENRIENDRIDELETERIREUSEk���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�ORDERID�_��
T�����T���ORDERID��
T�����%�����2�T��C�OrderDetails���%������%��=������-���
F����B�-���T��C�&��G(���(�orderid�T��C���
��T��CO��
T�����T���ORDERID��%��
����9T��C����Update restrict rule violated.��������C�OrderDetails����%��
��.�%��=��������
F����	B������%��=���Q�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAORDERIDRIOPENRIENDRIERRORRIREUSE!���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���	PRODUCTID��)T��C�OrderDetails�	productid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���	PRODUCTID��%��
����9T��C����Delete restrict rule violated.��������C�OrderDetails����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA	PRODUCTIDRIOPENRIENDRIERRORRIREUSEs���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�	PRODUCTID�_��
T�����T���	PRODUCTID��
T�����%�����:�T��C�OrderDetails���%����� �%��=������-���
F����B�-���T��C�&��G(���(�	productid�T��C���
��T��CO��
T�����T���	PRODUCTID��%��
����9T��C����Update restrict rule violated.��������C�OrderDetails����%��
��6�%��=��������
F����	B������%��=���Y�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA	PRODUCTIDRIOPENRIENDRIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���REGIONID��'T��C�Territories�regionid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���REGIONID��%��
����9T��C����Delete restrict rule violated.��������C�Territories����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSEm���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�REGIONID�_��
T�����T���REGIONID��
T�����%�����4�T��C�Territories���%������%��=������-���
F����B�-���T��C�&��G(���(�regionid�T��C���
��T��CO��
T�����T���REGIONID��%��
����9T��C����Update restrict rule violated.��������C�Territories����%��
��0�%��=��������
F����	B������%��=���S�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREAREGIONIDRIOPENRIENDRIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���	SHIPPERID��#T��C�Orders�	shipperid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���SHIPVIA��%��
���9T��C����Delete restrict rule violated.��������C�Orders����%��
����%��=���������
F����	B�����%��=���������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA	SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSEe���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�	SHIPPERID�_��
T�����T���	SHIPPERID��
T�����%�����,�T��C�Orders���%������%��=������-���
F����B�-���T��C�&��G(���(�	shipperid�T��C���
��T��CO��
T�����T���SHIPVIA��%��
����9T��C����Update restrict rule violated.��������C�Orders����%��
��(�%��=��������
F����	B������%��=���K�����
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA	SHIPPERIDRIOPENRIENDSHIPVIARIERRORRIREUSE���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J���(���T���
SUPPLIERID��&T��C�Products�
supplierid���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���
SUPPLIERID��%��
����9T��C����Delete restrict rule violated.��������C�Products����%��
����%��=���������
F����	B�����%��=��������
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREA
SUPPLIERIDRIOPENRIENDRIERRORRIREUSEo���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��T��C�
SUPPLIERID�_��
T�����T���
SUPPLIERID��
T�����%�����6�T��C�Products���%������%��=���	���-���
F����B�-���T��C�&��G(���(�
supplierid�T��C���
��T��CO��
T�����T���
SUPPLIERID��%��
����9T��C����Update restrict rule violated.��������C�Products����%��
��2�%��=��������
F����	B������%��=���U�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREA
SUPPLIERIDRIOPENRIENDRIERRORRIREUSEH���T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��J�CC�f��(���(T���ALLTRIM(UPPER(TERRITORYID))��1T��C�EmployeeTerritories�
territoryi���%�������%��=�������-���B�-���T��C�&��T��C���
��
F����T��CO��
T�����T���TERRITORYID��%��
����9T��C����Delete restrict rule violated.������$��C�EmployeeTerritories����%��
���%��=���������
F����	B�����%��=���.�����
F����	B����ULLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCCHILDWKAREALCPARENTWKAREALLDELHEADERAREALCSTARTAREATERRITORYIDRIOPENRIENDRIERRORRIREUSE����T��a��5�������5���!J���(�������J���(���%��=��������'5�	�
���
�����T��C�TALKv��G2�T�
�C�DELETEDv��T��C�EXACTv��T��C�
COMPATIBLEv��GA�G �G�
T�	����
T�
����T��C�error���
T�����?1�7pnerror=rierror(ERROR(),message(),message(1),program())�%�C�gaErrors(1)b�U����<���7��������
T��C��G(��	NORTHWIND������������������������T��CW��T��a��T��CW��
F����T��C&��T��CO��+T��C�ALLTRIM(UPPER(TERRITORYID))�_��
T�����(T���ALLTRIM(UPPER(TERRITORYID))��T��CC�f���%�����s�$T��C�EmployeeTerritories���%�����O�%��=���:���-���
F����B�-���T��C�&��G(���(�
territoryi�T��C���
��T��CO��
T�����T���TERRITORYID��%��
���9T��C����Update restrict rule violated.������$��C�EmployeeTerritories����%��
��o�%��=���X�����
F����	B������%��=���������
F����	B����U LLRETVALPCPARENTDBFPNPARENTREC
PCCHILDDBF
PNCHILDREC
PCPARENTID	PCCHILDIDPCPARENTEXPRPCCHILDEXPRPCRICURSORSPCRIWKAREASPCRIOLDERRORPNERROR	PCOLDDELE
PCOLDEXACT	PCOLDTALKPCOLDCOMPATPCOLDDBCGAERRORS
LCPARENTID
LCOLDPARENTID
LCCHILDWKAREA	LCCHILDIDLCOLDCHILDIDLCPARENTWKAREALCSTARTAREATERRITORYIDRIOPENRIEND
TERRITORYIRIERRORRIREUSE(��Q�STRING���Q�STRING�#T��CC����C����6���o�ProductsQ��OrderDetailsQ��OrdersQ�
�	CustomersQ�����C��Q����
��
��
�
�
	��
���	�����	��������
CustOrderHist���C�
CustOrderHist��B�C�
CustOrderHistN��UTCCUSTOMERIDLCCUSTOMERIDPRODUCTNAMEQUANTITYTOTALPRODUCTSPORDERDETAILSODORDERSO	CUSTOMERSC
CUSTOMERIDORDERID	PRODUCTID
CUSTORDERHIST'��Q�INTEGER���Q�INTEGER�#T��CC����N����6���o�ProductsQ�	�OrderDetailsQ�����C���T�Q�������d�Q��C������T�Q�����	�����	����CustOrdersDetail���C�CustOrdersDetail��B�C�CustOrdersDetailN��U	TIORDERID	LIORDERIDPRODUCTNAMEOD	UNITPRICEQUANTITYDISCOUNT
EXTENDEDPRICEPRODUCTSPORDERDETAILS	PRODUCTIDORDERIDCUSTORDERSDETAIL���Q�STRING���Q�STRING�#T��CC����C����6��Jo�Orders����������������������CustOrdersOrders���C�CustOrdersOrders��B�C�CustOrdersOrdersN��U	TCCUSTOMERIDLCCUSTOMERIDORDERID	ORDERDATEREQUIREDDATESHIPPEDDATEORDERS
CUSTOMERIDCUSTORDERSORDERS��Q�DATE�Q�DATE�)T��CC����D���mBA��6��)T��CC����D���9�BA��6��yo�Orders��Order_Subtotals �������������������C�i�Q�	�C���������SalesByYear���C�SalesByYear��B�C�SalesByYearN��UTDBEGINNING_DATE
TDENDING_DATELDBEGINNING_DATE
LDENDING_DATEORDERSSHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTALYEARSALESBYYEARk��Q�DATE�Q�DATE���Q�DATE�Q�DATE�)T��CC����D���mBA��6��)T��CC����D���9�BA��6���o�	Employees��Orders��Order_Subtotals ���
��
� ���������������������	����
�����Q�
�C��	�������SalesbyCountry���C�SalesbyCountry��B�C�SalesbyCountryN��UTDBEGINNING_DATE
TDENDING_DATELDBEGINNING_DATE
LDENDING_DATE	EMPLOYEESCOUNTRYLASTNAME	FIRSTNAMEORDERSSHIPPEDDATEORDERIDORDER_SUBTOTALSSUBTOTAL
SALEAMOUNT
EMPLOYEEIDSALESBYCOUNTRYRIDELETE,��RIUPDATE���rierror>��riopen��riend���rireuse�	��__RI_DELETE_CategoriesT
��__RI_UPDATE_Categories��� __RI_DELETE_CustomerDemographics��� __RI_UPDATE_CustomerDemographicsr��__RI_DELETE_Customers�!��__RI_UPDATE_Customers)��__RI_DELETE_Employees1��__RI_UPDATE_Employees�9��__RI_DELETE_Orders�C��__RI_UPDATE_OrdersI��__RI_DELETE_Products�N��__RI_UPDATE_Products\T��__RI_DELETE_RegionAZ��__RI_UPDATE_Region�_��__RI_DELETE_Shippers�e��__RI_UPDATE_Shippersk��__RI_DELETE_Suppliers�p��__RI_UPDATE_Suppliersdv��__RI_DELETE_TerritoriesF|��__RI_UPDATE_Territories���
CustOrderHist���CustOrdersDetail���CustOrdersOrders����SalesByYear���EmployeeSalesbyCountry����3q�����A��AAA��2�q�A��1q1��AAA��21�1��A�����1�A���������3�r��q�AA�A���R��A��A�R1A�AA�3q��Q�aAaA����A��QA1aAAaA1aA1aA��a�Aq3�Rq4q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Q�!�AqA�1�����AQ��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq���������Q�A�qA��1����AQ��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qA�AqA�1���q��Aq��A��A���q!�AqA�1��q��AQ��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q�q�A�qA��!��q�AA�Aq��A��AA�����q�Q�A�qA��1�q��AQ��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���a��A���A��A���qA�AqA�1���q��Aq��A��A���q�AqA������q�AA��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��a��A���A��AA�����q�q�A�qA��1��q��Aq��A��AA�����q�A�A�qA��1��q��AA��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Aq�AqA������A�A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq������q�A���A�qA�q1��A��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������a��AqA�1���a��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������a���A�qA��1��a��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Qq�AqA�1���Q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������Q���A�qA��1��Q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������a1�AqA�1���A��Aq��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������a�q�A�qA��1��A��Aq��A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������qa�AqA�1���q��A���A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq��������q���A�qA��1��q��A���A��AA�A��6q���Qr1aaA�aaa��Q���qA1�QAqqqqq������Q��AqA�1������AA��A��A�A��5r���Qr1aaA�aaa��Q���qA1�QAqqqqqqq���������A�A�qA��1�����AA��A��AA�A��61�
��5!"1i
��51���5����ra5�����
��3]���$)(>='Ec:�q��!��EQ��uc$�$�$.El=.�9���99F� \F�UR��Ue�Be�wS�x���<��:?.�;���]�;���[�_�3�S��mu�r�����e�#����yL����������*�I�i2K����9����@S���Gi�
��Nn��)��