*open connection to access database * oConnection is the connection object * and it will be used to open an access recordset * cDir is default directory were mdb resides * cDatabase is the name of the mdb * cId - user id (if there is one) or empty string * cPwd - user password (if there is one) or empty string cConnString = "Driver={Microsoft Access Driver (*.mdb)};DefaultDir=" + cDir + ; ";DBQ=" + cDatabase + ; ";User Id=" + cID + ; ";Password=" + cPwd oConnection = CreateObject('ADODB.Connection') oConnection.Open(cConnString) *open recordset using above connection * oConnection is the connection previously opened * cTable is name of table in the database * oRst is the recordset object * cOpenString - select string to bring back a recordset * nWhere - where cursor will be opened - either server (adUseServer) or client (adUseClient) * nHow - how opened - adLockOptimistic,adLockPessimistic,adLockBatchOptimistic,adLockReadOnly * the adXXXX definitions come from adovfp.h include file If Type('oConnection') = 'O' and !IsNull(oConnection) && exists and is not null If oConnection.State = adStateOpen && it's open cOpenString = 'Select * from ' + Alltrim(cTable)) oRst = CreateObject('ADODB.RecordSet') oRst.CursorLocation = nWhere oRst.Open(cOpenString, oConnection, adOpenStatic, nHow, adFetchAsync + adCmdText) Endif Endif * loop through the recordset fields with Do While !(oRst.EOF) For nLoop = 0 to oRst.Fields.Count - 1 FldVal = oRst.Fields(nLoop).Value * Other useful field info FldName = oRst.Fields(nLoop).Name FldType = oRst.Fields(nLoop).Type FldSize = oRst.Fields(nLoop).DefinedSize FldPrecision = oRst.Fields(nLoop).Precision FldScale = oRst.Fields(nLoop).NumericScale EndFor oRst.MoveNext() && next record EndDo * note that you can also refer to the field by name * ie - oRst.Fields("Fieldname").Value * so you wouldn't have to do a loop through the fields as above * Don't forget to close them oRst.Close() oConnection.Close()>>I think your idea below would require the least amount of code. On the other hand, using ADO, you could, if you wanted to, grab the data directly from access into vfp.