Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Modifying a data tier
Message
 
To
30/10/2005 14:32:39
General information
Forum:
Visual FoxPro
Category:
Coding, syntax & commands
Miscellaneous
Thread ID:
01063382
Message ID:
01063393
Views:
9
>Hello
>I am modifying a data tier class which its code is the following:
>
>PRE
>#INCLUDE foxpro.h
>
>DEFINE CLASS CapaDatos as Session OlePublic
>
> PROTECTED miConeccion
> miConeccion = ""
> > Procedure Conectar
>
> oConeccion = CREATEOBJECT("adodb.connection")
> * VFP Source
> *oConeccion.Open("Provider=VFPOLEDB.1;Data Source=D:\Universal Thread\Ejemplo\Ejemplo.dbc;Password='';Collating Sequence=MACHINE")
> * Access Source
> oConeccion.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\Universal Thread\Ejemplo\Access.mdb;Persist Security Info=False")
>
> This.miConeccion = oConeccion
>
> EndProc
> > > Procedure CargaLista() 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
> > oRecordCta=CREATEOBJECT("adodb.recordset")
> oRecordCta.Open("SELECT Cliente.idcliente, Cliente.apnombre,;
> Cliente.limcredito, EstadoCuenta.saldocuenta;
> from Cliente, EstadoCuenta;
> Where Cliente.idCliente = '"+micliente+"';
> and Cliente.idCliente = EstadoCuenta.idCliente",;
> This.miConeccion)
>
> RETURN oRecordCta
> > EndProc
>ENDDEFINE
>
>PRE
>
>
>I WAN TO ADD A PROCEDURE TO APPEND, A PROC. TO MODIFYING AND a PROC TO DELETE , HOW I CAN DO THIS?
>Thank you
>Luis Martin


Based on the logic of your code, here my suggestion. I am not sure that this is the most effective way:
#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
ENDDEFINE
Something 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.

O, BTW put your code in < pre > and < /pre > tags (w/o spaces). I saw you tried but you forgot <> :-)
Against Stupidity the Gods themselves Contend in Vain - Johann Christoph Friedrich von Schiller
The only thing normal about database guys is their tables.
Previous
Reply
Map
View

Click here to load this message in the networking platform