>this.oCa = createobject([CursorAdapter]) > >text TO this.oCa.SelectCmd PRETEXT 15 NOSHOW > SELECT test_financing.keyID, Test_financing.tip_id, Test_financing.amount, > Test_financing.source, Test_financing._year, test_phases.phasename, > test_phases.keyID as key2 > FROM \\tpdfiles\data\dfreeman\tip\data\TEST_phases.DBF > left join test_financing on test_phases.tip_id = test_financing.tip_id and test_phases._year = test_financing._year > WHERE Test_phases._year = ( ?m.lnYear ) > ORDER BY Test_phases.tip_id >endtext > >this.oCa.allowinsert = .t. >this.oCa.insertcmd = "" >this.oCa.buffermodeoverride = 3 && 3 = row buffering, 5 = table buffering >this.oCa.datasourcetype = [NATIVE] && native fox datasource >this.oCa.sendupdates = .t. && unnecessary except with ODBC or ADO >this.oCa.wheretype = 1 && >this.oCa.tables = [test_phases,test_financing] && >this.oCa.fetchsize = -1 && primarily for remote views >this.oCa.keyfieldlist = [keyid, key2] && the primary key for the table >this.oCa.updatenamelist = "keyid test_financing.keyid," + ; > "tip_id test_financing.tip_id," + ; > "amount test_financing.Amount," + ; > "source test_financing.Source," + ; > "_year test_financing._year," + ; > "key2 test_phases.keyID," + ; > "phasename test_phases.phasename" >this.oCa.updatablefieldlist = "keyid, tip_id, amount, source, _year, phasename, key2 " >this.oCa.alias = this.sourcetable > >m.lnYear = this._year >this.oCa.cursorfill() >>My next step will be to write code to provide INSERT and DELETE capabilities. What I am not sure of is this: