Set Step On LOCAL llOK, lcErrorMessage llOK = .T. lcErrorMessage = "" LOCAL lcMDB IF m.llOK lcMDB = GETFILE('mdb') llOK = FILE(m.lcMDB,1) lcErrorMessage = "" ENDIF LOCAL lcConnectionString, h IF m.llOK lcConnectionString = ; "DRIVER=Microsoft Access Driver (*.mdb);" + ; "DBQ=" + JUSTFNAME(m.lcMDB) + ";" + ; "DefaultDir=" + JUSTPATH(m.lcMDB) + ";" + ; "DriverId=25;FIL=MSAccess;MaxBufferSize=2048;PageTimeout=5" h = SQLSTRINGCONNECT(m.lcConnectionString) llOK = ( h > 0 ) IF !m.llOK lcErrorMessage = GetLastError() ENDIF ENDIF * Get all available Access Tables if you want LOCAL n *!* IF m.llOK *!* n = SQLTABLES(h,'','temp') *!* llOK = ( n > 0 ) *!* IF !m.llOK *!* lcErrorMessage = GetLastError() *!* ENDIF *!* ENDIF *!* IF m.llOK *!* BROWSE *!* ENDIF LOCAL lcTable IF m.llOK lcTable = 'testTable' && whatever your specs say n = SQLEXEC(h,[Select * From ] + m.lcTable,'temp') llOK = ( n > 0 ) IF !m.llOK lcErrorMessage = GetLastError() ENDIF ENDIF IF m.llOK BROWSE ENDIF LOCAL p1 IF m.llOK && this fails n = SQLEXEC(h,[Insert Into ] + m.lcTable + [ (lTest) Values (.T.)]) llOK = ( n > 0 ) IF !m.llOK lcErrorMessage = GetLastError() ENDIF && backend syntax works n = SQLEXEC(h,[Insert Into ] + m.lcTable + [ (lTest) Values (true)]) llOK = ( n > 0 ) IF !m.llOK lcErrorMessage = GetLastError() ENDIF && ODBC mapping is easier p1 = .T. n = SQLEXEC(h,[Insert Into ] + m.lcTable + [ (lTest) Values (?p1)]) llOK = ( n > 0 ) IF !m.llOK lcErrorMessage = GetLastError() ENDIF ENDIF TRY SQLDISCONNECT(h) CATCH ENDTRY IF !m.llOK AND !EMPTY(m.lcErrorMessage) MESSAGEBOX(m.lcErrorMessage,48) ENDIF RETURN FUNCTION GetLastError() LOCAL lcMessage, laError[1] lcMessage = "" AERROR(laError) IF TYPE('laError[2]') = 'C' lcMessage = laError[2] ENDIF RETURN m.lcMessage ENDFUNC