loAdapter.DataSourceType = "ODBC" lcConnString = "Driver=Sql Server;server=MYDESKTOP\SqlExpress;Integrated Security=True" lnHandle = SQLSTRINGCONNECT( lcConnString ) SQLEXEC( lnHandle, 'use pcs' ) loAdapter.DataSource = lnHandle lcSelect = "SELECT sys.syscode , com.compipe, fac.facpoint, " + ; "fin.finispdate, tpn.tpnps, tpn.tpncaseps, fin.finremarks, sys.sysid, com.comid, fac.facid, fin.finid, tpn.tpnid " + ; "FROM systems AS sys " + ; "INNER JOIN component AS com ON com.comsysid = sys.sysid INNER JOIN facility AS fac ON fac.faccomid = com.comid " + ; "INNER JOIN facinsp AS fin ON fin.finfacid = fac.facid " + ; "INNER JOIN tpinsp AS tpn ON tpn.tpnfinid = fin.finid " loAdapter.SelectCmd = lcSelect loAdapter.AllowInsert = .t. loAdapter.AllowUpdate = .t. loAdapter.AllowDelete = .t. loAdapter.BufferModeOverride = 5 && buffering loAdapter.FetchMemo = .t. loAdapter.FetchAsNeeded = .t. loAdapter.FetchSize = 200 loAdapter.SendUpdates = .t. loAdapter.Tables = "systems, component, facility, facinsp, tpinsp" loAdapter.KeyFieldList = "sysid, comid, facid, finid, tpnid" loAdapter.UpdateNameList = "syscode systems.syscode, compipe component.compipe, facpoint facility.facpoint, finispdate " + ; "facinsp.finispdate, tpnps tpinsp.tpnps, tpncaseps tpinsp.tpncaseps, finremarks facinsp.finremarks, tpnid tpinsp.tpnid" loAdapter.UpdatableFieldList = "syscode , compipe , facpoint, finispdate, tpnps, tpncaseps, finremarks, tpnid" IF lnHandle < 0 AERROR( laError ) ELSE * remove when in production lcError = ON( "ERROR" ) ON ERROR llError = .t. USE IN SELECT( loAdapter.Alias ) llFill = loAdapter.CursorFill( .f., .f. )... more code but here is where the types are changing