#INCLUDE foxpro.h DEFINE CLASS CapaDatos as Session OlePublic PROTECTED miConeccion miConeccion = "" Procedure Conectar This.miConeccion = CREATEOBJECT("adodb.connection") This.miConeccion.Open([Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Universal Thread\Ejemplo\Access.mdb;]+; [Persist Security Info=False]) EndProc Procedure CargaLista() as ADODB.Recordset LOCAL oRecordset AS adodb.recordset oRecordset = CREATEOBJECT("adodb.recordset") oRecordset.Open([SELECT idCliente, Apnombre from Cliente], This.miConeccion) RETURN oRecordset EndProc Procedure EstadoCuenta( miCliente as String ) as ADODB.Recordset LOCAL oRecordset AS adodb.recordset oRecordset = CREATEOBJECT("adodb.recordset") oRecordset.Open([SELECT Cliente.idcliente, Cliente.apnombre,]+; [Cliente.limcredito, EstadoCuenta.saldocuenta ]+; [from Cliente, EstadoCuenta ]+; [Where Cliente.idCliente = '] + m.micliente+[' ]+; [and Cliente.idCliente = EstadoCuenta.idCliente],; This.miConeccion) RETURN oRecordset EndProc PROCEDURE InsertRecord(lcTableName as String, lcXML as String) ** lcXML contains XML presentation of the record you want to insert LOCAL oCommand AS adodb.Command LOCAL lcSQLInsert AS String, lcValues AS String LOCAL lnFieldCount STORE "" TO m.lcSQLInsert, m.lcValues oCommand = CREATEOBJECT("adodb.Command") oCommand.ActiveConnection = this.miConeccion XMLTOCURSOR(lcXML, "crsInsert",0) m.lcSQLInsert = [INSERT INTO ]+m.lcTableName+[(] FOR lnFieldCount = 1 TO FCOUNT() m.lcSQLInsert = m.lcSQLInsert + IIF(m.lnFieldCount==1,[],[,]) + FIELDS(m.lnFieldCount) m.lcValues = m.lcValues + IIF(m.lnFieldCount==1,[?],[,?]) + m.lcTableName+[.]+FIELDS(m.lnFieldCount) NEXT m.lcSQLInsert = m.lcSQLInsert + [) VALUES (] + m.lcValues + [)] oCommand.CommandText = m.lcSQLInsert oCommand.Execute() ENDPROC PROCEDURE DeleteRecord(lcTableName as String, lcWhereClause AS String) LOCAL oCommand AS adodb.Command oCommand = CREATEOBJECT("adodb.Command") oCommand.ActiveConnection = this.miConeccion oCommand.CommandText = [DELETE FROM ]+m.lcTableName+[ WHERE ]+ m.lcWhereClause oCommand.Execute() ENDPROC PROCEDURE UpdateRecord(lcTableName as String, lcXML AS String, lcWhereClause AS String) ** lcXML contains XML presentation of just that fields you want to update LOCAL oCommand AS adodb.Command LOCAL lcSQLUpdate AS String LOCAL lnFieldCount STORE "" TO m.lcSQLUpdate oCommand = CREATEOBJECT("adodb.Command") oCommand.ActiveConnection = this.miConeccion XMLTOCURSOR(lcXML, "crsInsert",0) m.lcSQLUpdate = [UPDATE ]+m.lcTableName+[ SET ] FOR lnFieldCount = 1 TO FCOUNT() m.lcSQLUpdate = m.lcSQLUpdate + IIF(m.lnFieldCount==1,[],[,]) +; FIELDS(m.lnFieldCount)+ [ = ?]+; m.lcTableName + [.] + FIELDS(m.lnFieldCount) NEXT m.lcSQLUpdate = m.lcSQLUpdate + [ WHERE ]+m.lcWhereClause oCommand.CommandText = m.lcSQLUpdate oCommand.Execute() ENDPROC ENDDEFINESomething like that, of cource here no error handlind, you must put some, no parameters check and no guarantee that this will work :-) It is not tested.