LOCAL lcTest AS crsNch lcTest = CREATEOBJECT([crsNch]) IF NOT lcTest.FillCursor() MESSAGEBOX(lcTest.SQLError) RETURN ENDIF BROWSE NORMAL ** Do Some changes IF NOT lcTest.UpdateCursor() MESSAGEBOX(lcTest.SQLError) RETURN ENDIF USE DEFINE CLASS crsNch AS CursorAdapter Alias = "crsTest" BufferModeOverride = 5 DataSourceType = "ODBC" ConnectionString = "Driver={SQL Server};Server=ServerNameHere;Trusted_Connection=yes;DataBase=DataBaseNameHere;" DataSource = 0 SQLError = [] KeyFieldList = "Key Field Name hare" SendUpdates = .t. WhereType = 1 Tables = "TableNameHer" PROCEDURE Init TEXT TO this.UpdatableFieldList NOSHOW PRETEXT 15 KOD, NAME ENDTEXT TEXT TO this.UpdateNameList NOSHOW PRETEXT 15 KOD TableNameHere.KOD, NAME TableNameHere.NAME ENDTEXT this.SelectCmd = [SELECT Kod, Name FROM TableNameHere] ENDPROC PROCEDURE FillCursor LOCAL laError[1] this.DataSource = SQLSTRINGCONNECT(this.ConnectionString) IF this.DataSource < 0 AERROR(laError) this.SQLError = laError[1,2] RETURN .f. ENDIF IF NOT this.CursorFill() AERROR(laError) this.SQLError = laError[1,2] RETURN .f. ENDIF SQLDISCONNECT(this.DataSource) ENDPROC PROCEDURE UpdateCursor LOCAL laError[1] this.DataSource = SQLSTRINGCONNECT(this.ConnectionString) IF this.DataSource < 0 AERROR(laError) this.SQLError = laError[1,2] RETURN .f. ENDIF IF NOT TABLEUPDATE(1,.t.,this.Alias) AERROR(laError) this.SQLError = laError[1,2] RETURN .f. ENDIF SQLDISCONNECT(this.DataSource) ENDPROC ENDDEFINEBTW with CAs you can use not only ODBC but ADO too.