cSqlSt = "SELECT IN_ItemSupplier.ID, IN_ItemSupplier.cCode,IN_ItemSupplier.cDesc "+; "AP_Supplier.cDesc AS cDescSupplier FROM IN_ItemSupplier "+; "LEFT JOIN AP_Supplier ON IN_ItemSupplier.Fk_Supplier = AP_Supplier.ID" csql = SQLEXEC(sqlh, cSqlSt,"cCursor") IF cSql > 0 SELECT cCursor CursorSetProp('KeyFieldList','IN_ItemSupplier.ID','cCursor') CursorSetProp('WhereType' , 2,'cCursor') CursorSetProp('Tables' ,'IN_ItemSupplier' ,'cCursor') CursorSetProp("UpdateNameList", ; "cCode IN_ItemSupplier.cCode,"+; "cDesc IN_ItemSupplier.cDesc,"IN_ItemSupplier") CursorSetProp('UpdatableFieldList','cCode,cDesc','IN_ItemSupplier') CursorSetProp('SendUpdates',.T.,'IN_ItemSupplier') CursorSetProp('Buffering', 5,'IN_ItemSupplier') **** Do whatever changes in that cursor TableUpdate(1, .t., "cCursor") ENDIF>I'm in a rich client environment using VFP front end and SQL server as back end. All data coming from SQL server is stored in updatable cursor using SQL pass-through.
>SELECT IN_ItemSupplier.ID, IN_ItemSupplier.cCode,IN_ItemSupplier.cDesc, AP_Supplier.cDesc AS cDescSupplier FROM IN_ItemSupplier >LEFT JOIN AP_Supplier ON IN_ItemSupplier.Fk_Supplier = AP_Supplier.ID >>