PWCT 1.9 Art Documentation ( http://doublesvsoop.sourceforge.net ) 2006-2019, Mahmoud Fayed ( msfclipper@users.sourceforge.net ) _____________________________________________________________________________________ Table of contents 1 - Introduction 2 - Implementation steps 3 - Final Steps Tree 4 - Application during the runtime 1 - Introduction In this lesson we are going to learn how to do arithmetic operations on records. 2 - Implementation Steps Open database sysdata.mdb Add column balance to customers table Fig. 1 Fig. 2 Fig. 3 Fig. 4 Fig. 5 Fig. 6 Fig. 7 Fig. 8 Fig. 9 Fig. 10 Fig. 11 Fig. 12 Fig. 13 Fig. 14 Fig. 15 Fig. 16 Fig. 17 Fig. 18 Fig. 19 Fig. 20 Fig. 21 Fig. 22 Fig. 23 Fig. 24 Fig. 25 Fig. 26 Fig. 27 Fig. 28 Fig. 29 Fig. 30 Fig. 31 Fig. 32 Fig. 33 Fig. 34 Fig. 35 Fig. 36 Fig. 37 Fig. 38 Fig. 39 Fig. 40 Fig. 41 Fig. 42 Fig. 43 Fig. 44 Fig. 45 Fig. 46 Open customers.SSF Add balance to customers data Fig. 47 Fig. 48 Fig. 49 Fig. 50 Fig. 51 Fig. 52 Fig. 53 Fig. 54 Fig. 55 Fig. 56 Fig. 57 Fig. 58 Fig. 59 Fig. 60 Fig. 61 Fig. 62 Fig. 63 Fig. 64 Fig. 65 Fig. 66 Fig. 67 Fig. 68 Fig. 69 Fig. 70 Fig. 71 Fig. 72 Fig. 73 Fig. 74 Fig. 75 Fig. 76 Fig. 77 Fig. 78 Fig. 79 Fig. 80 Fig. 81 Fig. 82 Fig. 83 Fig. 84 Fig. 85 Fig. 86 Fig. 87 Fig. 88 Fig. 89 Fig. 90 Fig. 91 Fig. 92 Fig. 93 Fig. 94 Fig. 95 Fig. 96 Fig. 97 Declare and define the method GetTotalBalance Fig. 98 Fig. 99 Fig. 100 Fig. 101 Fig. 102 Fig. 103 Fig. 104 Fig. 105 Fig. 106 Fig. 107 Fig. 108 Fig. 109 Fig. 110 Fig. 111 Fig. 112 Fig. 113 Fig. 114 Fig. 115 Fig. 116 Fig. 117 Fig. 118 Fig. 119 Fig. 120 Fig. 121 Fig. 122 Fig. 123 Fig. 124 Fig. 125 Fig. 126 Fig. 127 Fig. 128 Fig. 129 Fig. 130 Fig. 131 Fig. 132 Fig. 133 Fig. 134 Fig. 135 Fig. 136 Fig. 137 Fig. 138 Fig. 139 Fig. 140 Fig. 141 Fig. 142 Fig. 143 Fig. 144 Fig. 145 Fig. 146 Fig. 147 Fig. 148 Fig. 149 Fig. 150 Fig. 151 Fig. 152 Fig. 153 Fig. 154 Fig. 155 Fig. 156 Fig. 157 Fig. 158 Fig. 159 Fig. 160 Fig. 161 Fig. 162 Fig. 163 Fig. 164 Fig. 165 Fig. 166 Fig. 167 Fig. 168 Fig. 169 Fig. 170 Fig. 171 Fig. 172 Fig. 173 Fig. 174 Fig. 175 Fig. 176 Fig. 177 Fig. 178 Fig. 179 Fig. 180 Fig. 181 3 - Final Steps Tree ==================== Customers.SSF ==================== Set Class Name & Window Name PWCT-Code Generator: Replace String (MyClassName) with (CustomersDataClass) PWCT-Code Generator: Replace String (MyWindowName) with (&(self:cWindowName)) Class Define Class MyClassName From SystemDatabase Declare Class Data Data cWindowName Init Value "CustomersDataWindow" ************************** Record Data Here ************************** Data TableName Init Value "Customers" Data cCustName Init Value "" Data cCustAddress Init Value "" Data cCustPhone Init Value "" Country Data nCountry Init Value 0 Data CountryItems Init Value {} Data CountryItemsIDs Init Value {} Data dDateOfBirth Init Value date() Data nBalance Init Value 0 Declare Class Methods Method showwindow Method closewindow Method SetMode Method UserInterface2Class Method Class2ADO Method ADO2Class Method Class2UserInterface Method ClearRecord Method AutoGotoRecord Method CheckData Method GetTotalBalance End of Class ******************************* Methods to Customize ***************************** Define Method showwindow Class MyClassName Start Here Check Permission IF ( UsersObject:CheckPermission(1) = False ) Start Here Show Message "You don't have permission to access this window" Title "Sorry" Type: Message Info Return 0 END OF IF STATEMENT myout = self.connect() myout = self.AutoGotoRecord() Define New Window ( MyWindowName ) , Title : "Customers Data" Window Events Window Properties Window Controls Define New Image ( image1 ) , Image : "image\Back.jpg" Events Properties Window Title Define Label ( lblTitle ) , Caption : "Customers Data Window" Label Events Label Properties Data Buttons Define New Button ( btnFirst ) , Caption : "First" Button Events Event: ON CLICK : Action self:firstrecord() Button Properties Define New Button ( btnNext ) , Caption : "Next" Button Events Event: ON CLICK : Action self:nextrecord() Button Properties Define New Button ( btnLast ) , Caption : "Last" Button Events Event: ON CLICK : Action self:lastrecord() Button Properties Define New Button ( btnClose ) , Caption : "Close" Button Events Event: ON CLICK : Action self:closewindow() Button Properties Define New Button ( btnPrev ) , Caption : "Prev " Button Events Event: ON CLICK : Action self:prevrecord() Button Properties Define New Button ( btnDel ) , Caption : "Delete" Button Events Event: ON CLICK : Action self:delrecord() Button Properties Define New Button ( btnsave ) , Caption : "Save" Button Events Event: ON CLICK : Action self:saverecord() Button Properties Define New Button ( btncancel ) , Caption : "Cancel" Button Events Event: ON CLICK : Action self:cancelrecord() Button Properties Define New Button ( btnedit ) , Caption : "Edit" Button Events Event: ON CLICK : Action self:editrecord() Button Properties Define New Button ( btnadd ) , Caption : "Add" Button Events Event: ON CLICK : Action self:addrecord() Button Properties Define Label ( lbl1 ) , Caption : "Name" Label Events Label Properties Define Label ( lbl2 ) , Caption : "Address" Label Events Label Properties Define Label ( lbl3 ) , Caption : "Phone" Label Events Label Properties Define TextBox ( textName ) TextBox EVENTS TextBox Properties Define TextBox ( textAddress ) TextBox EVENTS TextBox Properties Define TextBox ( textPhone ) TextBox EVENTS TextBox Properties Country myout = Self.LoadLookupTable("country","country",@self:countryitems,"id",@self:countryitemsids) Define Label ( lblCountry ) , Caption : "Country" Label Events Label Properties Define Combobox ( comboCountry ) , Items : self:CountryItems Combobox Events Combobox Properties Define Label ( lbl5 ) , Caption : "Date of Birth" Label Events Label Properties Define New DatePicker ( DateOfBirth ) Events Properties Define Label ( lblBalance ) , Caption : "Balance" Label Events Label Properties Define TextBox ( textBalance ) TextBox EVENTS TextBox Properties Define New Button ( btnTotalBalance ) , Caption : "Get Total Balance" Button Events Event: ON CLICK : Action self:GetTotalBalance() Button Properties End Of Window MyWindowName.Center ( ) myout = self.showrecord() myout = self.setmode(2) Activate window End of Method (Return 0) Define Method UserInterface2Class Class MyClassName Start Here self:cCustName = MyWindowName.textName.Value self:cCustAddress = MyWindowName.textAddress.Value self:cCustPhone = MyWindowName.textPhone.Value Country self:nCountry = MyWindowName.ComboCountry.Value self:nCountry = self:CountryItemsIDs[self:nCountry] self:dDateOfBirth = MyWindowName.DateofBirth.Value self:nBalance = MyWindowName.textBalance.Value self:nBalance = CONVERT self:nBalance TO Numeric End of Method (Return 0) Define Method Class2ADO Class MyClassName Start Here ADODB RecordSet (self:oRS) Set Field ("CustName") Value To (self:cCustName) ADODB RecordSet (self:oRS) Set Field ("CustAddress") Value To (self:cCustAddress) ADODB RecordSet (self:oRS) Set Field ("CustPhone") Value To (self:cCustPhone) ADODB RecordSet (self:oRS) Set Field ("CountryID") Value To (self:nCountry) ADODB RecordSet (self:oRS) Set Field ("DateOfBirth") Value To (self:dDateOfBirth) ADODB RecordSet (self:oRS) Set Field ("Balance") Value To (self:nBalance) End of Method (Return 0) Define Method ADO2Class Class MyClassName Start Here self:cCustName = ADODB RecordSet (self:oRS) Get Field ("CustName") Value self:cCustAddress = ADODB RecordSet (self:oRS) Get Field ("CustAddress") Value self:cCustPhone = ADODB RecordSet (self:oRS) Get Field ("CustPhone") Value self:nCountry = ADODB RecordSet (Self:oRS) Get Field ("CountryID") Value self:dDateOfBirth = ADODB RecordSet (self:oRS) Get Field ("DateOfBirth") Value self:nBalance = ADODB RecordSet (self:oRS) Get Field ("Balance") Value End of Method (Return 0) Define Method Class2UserInterface Class MyClassName Start Here MyWindowName.textName.Value := self:cCustName MyWindowName.textAddress.Value := self:cCustAddress MyWindowName.textPhone.Value := self:cCustPhone Country self:nCountry = self.LookupIDToIndex(self:nCountry,@self:CountryItemsIDs) MyWindowName.ComboCountry.Value := self:nCountry MyWindowName.DateOfBirth.Value := self:dDateofBirth cBalance = CONVERT self:nBalance TO STRING cBalance = All Trim cBalance MyWindowName.textBalance.Value := cBalance End of Method (Return 0) Define Method ClearRecord Class MyClassName Start Here self.cCustName = "" self.cCustAddress = "" self.cCustPhone = "" self.nCountry = 0 self.dDateOfBirth = Date() self.nBalance = 0 End of Method (Return 0) Define Method setmode(p1) Class MyClassName Start Here IF ( p1 = 1 ) Start Here MyWindowName.btnfirst.Enabled := false MyWindowName.btnnext.Enabled := false MyWindowName.btnprev.Enabled := false MyWindowName.btnlast.Enabled := false MyWindowName.btndel.Enabled := false MyWindowName.btnclose.Enabled := false MyWindowName.btnsave.Enabled := true MyWindowName.btncancel.Enabled := true MyWindowName.btnedit.Enabled := false MyWindowName.btnadd.Enabled := false MyWindowName.textName.Enabled := true MyWindowName.textAddress.Enabled := true MyWindowName.textPhone.Enabled := true MyWindowName.ComboCountry.Enabled := True MyWindowName.DateOfBirth.Enabled := True MyWindowName.textBalance.Enabled := True END OF IF STATEMENT IF ( p1 = 2 ) Start Here MyWindowName.btnfirst.Enabled := true MyWindowName.btnnext.Enabled := true MyWindowName.btnprev.Enabled := true MyWindowName.btnlast.Enabled := true MyWindowName.btndel.Enabled := true MyWindowName.btnclose.Enabled := true MyWindowName.btnsave.Enabled := false MyWindowName.btncancel.Enabled := false MyWindowName.btnedit.Enabled := true MyWindowName.btnadd.Enabled := true MyWindowName.textName.Enabled := False MyWindowName.textAddress.Enabled := False MyWindowName.textPhone.Enabled := False MyWindowName.ComboCountry.Enabled := False MyWindowName.DateOfBirth.Enabled := False MyWindowName.textBalance.Enabled := False END OF IF STATEMENT self:OperationMode = p1 End of Method (Return 0) Define Method CheckData Class MyClassName Start Here Local myret,cName,nCountry myret = True Check Name cName = MyWindowName.textName.Value cName = All Trim cName IF ( cName == "" ) Start Here Show Message "Enter Customer Name" Title "Sorry" Type: Message Info myret = False END OF IF STATEMENT Check Country nCountry = MyWindowName.ComboCountry.Value IF ( nCountry = 0 ) Start Here Show Message "Please select the country" Title "Sorry" Type: Message Info Check Permission END OF IF STATEMENT End of Method (Return myret) Define Method GetTotalBalance Class MyClassName Start Here The First Method myoRS = Create New ADODB RecordSet Object Open Recordset myoRS , Connection self:oCon , CursorType 1 , SQL Statement "Select * from TotalBalance" nBalance = ADODB RecordSet (myoRS) Get Field ("SumOfBalance") Value cBalance = CONVERT nBalance TO STRING Show Message cBalance Title "Total Balance" Type: Message Box Close ADODB RecordSet myoRS The Second Method myoRS = Create New ADODB RecordSet Object Open Recordset myoRS , Connection self:oCon , CursorType 1 , SQL Statement "SELECT Sum(Customers.balance) AS SumOfbalance from Customers" nBalance = ADODB RecordSet (myoRS) Get Field ("SumOfBalance") Value cBalance = CONVERT nBalance TO STRING Show Message cBalance Title "Total Balance" Type: Message Box Close ADODB RecordSet myoRS The Third Method myoRS = Create New ADODB RecordSet Object Open Recordset myoRS , Connection self:oCon , CursorType 1 , SQL Statement "Select * from Customers" nBalance = 0 nMax := ADODB RecordSet (myoRS) , Get Records Count IF ( nMax > 0 ) Start Here FOR LOOP ( From x = 1 To nMax Step 1) Start Here custBalance = ADODB RecordSet (myoRS) Get Field ("Balance") Value nBalance = nBalance + custBalance ADODB RecordSet myoRS - Goto Next Record End of For Loop END OF IF STATEMENT cBalance = CONVERT nBalance TO STRING Show Message cBalance Title "Total Balance" Type: Message Box Close ADODB RecordSet myoRS End of Method (Return 0) Class Methods Define Method closewindow Class MyClassName Start Here myout = self.disconnect() MyWindowName.Release ( ) End of Method (Return 0) Define Method AutoGotoRecord Class MyClassName Start Here IF ( self:LFindRecord = true .and. self:OperationMode = 2 ) Start Here ADODB RecordSet (self:oRS) Find , Cirteria self:CFindExpr mycheck = ADODB RecordSet self:oRS , Check EOF IF ( mycheck = true ) Start Here ADODB RecordSet self:oRS - Goto Previous Record END OF IF STATEMENT IF ( iswindowdefined( MyWindowName ) ) Start Here myout = self.showrecord() MyWindowName.SetFocus ( ) END OF IF STATEMENT END OF IF STATEMENT self:LFindRecord = false self:CFindExpr = "" End of Method (Return 0) 4 - Application during the runtime Fig. 182 Fig. 183 Fig. 184
|