PUBLIC goForm
goForm = NEWOBJECT("form1")
goForm.Show
Read Events
Close all
DELETE DATABASE mydata1 DELETETABLES
Clear All
RETURN
**************************************************
DEFINE CLASS form1 AS form
DataSession = 2
AutoCenter = .T.
Caption = "Referential Integrity"
Height = 480
MinHeight = This.Height
Width = 600
MinWidth = This.Width
MaxWidth = This.Width
ADD OBJECT lblSalesman as label WITH ;
Left = 12, Top = 12, Caption = "Salesmen", FontBold = .T., Anchor = 3
ADD OBJECT lblCustomer as label WITH ;
Left = 12, Top = 168, Caption = "Customers", FontBold = .T., Anchor = 26
ADD OBJECT lblOrder as label WITH ;
Left = 12, Top = 324, Caption = "Orders", FontBold = .T., Anchor = 26
ADD OBJECT cmdRefresh as CommandButton WITH ;
Left = 336, Top = 12, Height = 18, Width = 120, Caption = "Refresh Form", BackColor = RGB(180, 180, 0)
PROCEDURE cmdRefresh.Click()
ThisForm.Refresh()
ENDPROC
ADD OBJECT cmdDelete as CommandButton WITH ;
Left = 468, Top = 12, Height = 18, Width = 120, Caption = "Set Deleted ...", BackColor = RGB(0, 180, 180)
PROCEDURE cmdDelete.Click()
IF SET("Deleted") = "ON"
SET DELETED OFF
This.Caption = "Set Deleted on"
ELSE
SET DELETED ON
This.Caption = "Set Deleted off"
ENDIF
ThisForm.Refresh()
ENDPROC
ADD OBJECT grid1 AS grid WITH ;
ColumnCount = -1, ;
Left = 12, ;
Top = 36, ;
Width = ThisForm.Width - 24, ;
Height = 120, ;
RecordSource = "Salesman", ;
ReadOnly = .T., ;
Anchor = 75
PROCEDURE grid1.Init()
This.Column1.ReadOnly = .F.
ENDPROC
ADD OBJECT grid2 AS grid WITH ;
ColumnCount = -1, ;
Left = 12, ;
Top = 192, ;
Width = ThisForm.Width - 24, ;
Height = 120, ;
RecordSource = "Customer", ;
ReadOnly = .T., ;
Anchor = 90
PROCEDURE grid2.Init()
This.Column2.ReadOnly = .F.
ENDPROC
ADD OBJECT grid3 AS grid WITH ;
ColumnCount = -1, ;
Left = 12, ;
Top = 348, ;
Width = ThisForm.Width - 24, ;
Height = 120, ;
RecordSource = "Orders", ;
ReadOnly = .T., ;
Anchor = 90
PROCEDURE grid3.Init()
WITH This
.Column4.ReadOnly = .F.
.Column5.ReadOnly = .F.
.AddColumn(6)
.Column6.Header1.Alignment = 2
.Column6.Header1.Caption = "2bPaid"
.Column6.Name = "col2bpaid"
.col2bpaid.ControlSource = "Orders.OrderAmt * Orders.OrderQty * ((100 - DiscPercent)/100)"
.AddColumn(6)
.Column6.Header1.Alignment = 2
.Column6.Header1.Caption = "Total"
.Column6.Name = "colTotal"
.colTotal.ControlSource = "Orders.OrderAmt * Orders.OrderQty"
ENDWITH
ENDPROC
PROCEDURE Destroy
Thisform.Release()
CLOSE ALL
Clear Events
ENDPROC
PROCEDURE Load
SET DELETED ON
CLOSE DATABASES
CREATE DATABASE mydata1
*!* Create a Salesman table with a primary key.
CREATE TABLE Salesman ;
(SalesID C(6) PRIMARY KEY, SaleName Character(20))
INSERT INTO Salesman VALUES ("ID1234", "Jeff")
INSERT INTO Salesman VALUES ("ID1235", "Simone")
*!* Create a Customer table and relate it to the Salesman table.
CREATE TABLE Customer ;
(SalesID c(6), ;
CustId i PRIMARY KEY, ;
CustName c(20) UNIQUE, ;
SalesBranch c(3), ;
FOREIGN KEY SalesId TAG SalesId REFERENCES Salesman)
INSERT INTO Customer VALUES ("ID1234", 9210, "Mandy", "ABM")
INSERT INTO Customer VALUES ("ID1235", 9211, "Greta", "ABa")
INSERT INTO Customer VALUES ("ID1235", 9212, "Jeremy", "ABc")
*!* Create an Orders table related to Customer with its own primary
*!* key and some business rules such as defaults and checks.
CREATE TABLE Orders ;
(OrderId i PRIMARY KEY, ;
CustId i, ;
OrderAmt y(4), CHECK (OrderAmt > 0) ERROR "Order Amount must be > 0", ;
OrderQty i DEFAULT 10 CHECK (OrderQty > 9) ERROR "Order Quantity must be at least 10", ;
DiscPercent n(6,2) DEFAULT 0, ;
FOREIGN KEY CustId TAG CustId REFERENCES Customer)
INSERT INTO Orders VALUES (20230034, 9210, 35, 25, 12.5)
INSERT INTO Orders VALUES (20230035, 9211, 25, 10, 2.5)
INSERT INTO Orders VALUES (20230036, 9211, 45, 12, 1.5)
INSERT INTO Orders VALUES (20230037, 9212, 65, 15, 10.5)
INSERT INTO Orders VALUES (20230038, 9212, 75, 19, 12.0)
INSERT INTO Orders VALUES (20230039, 9212, 85, 29, 13.0)
*!* Display database, tables, and relationships.
MODIFY DATABASE
IF !USED("Salesman")
USE Salesman IN 0
ENDIF
IF !USED("Customer")
USE Customer IN 0
ENDIF
IF !USED("orders")
USE orders IN 0
ENDIF
ENDPROC
ENDDEFINE
*********************************************