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: