As requested, below are the methods necessary to create a cursor adapter 
on the fly

use thus:

thisform.makeadapter('customers','curCustomers',[select * from customers])

As for authentication, I use SQL Server authentication

Connect through ODBC

local cConnString

cConnString=[DRIVER=SQL Server Native Client 
10.0;SERVER=MAINSERVER\SQLEXPRESS;UID=sa;PWD=12345;APP=Microsoft Visual 
FoxPro;WSID=INVOICINGPC;DATABASE=TESTDATABASE;LANGUAGE=English;]

thisform.nHandle = SQLStringConnect(cConnString )

BTW don't ever use the master data, you could screw things up badly. 
Just create a test database, put some tables in it, fill them with data 
and go on.

I strongly advise you to read the books from Hentzenwerke, Megafox...., 
Internet Applications..... etc. That's where you get all the information 
you need

Rafael Copquin

** makeadapter method
Lparameters tcTable,tcAlias,tcCmd

Local cSCH,cUFL,cUNL,cCmd

thisform.lOK = .T.

thisform.structure(tcTable)

cUFL = Thisform.cUFL && updatable field list
cUNL = Thisform.cUNL && update name list
cSCH = Thisform.cSCH && table schema
cCmd = tcCmd

thisform.lOK = .T.

Try

     Use in Select(tcAlias)

     If PemStatus(this,'oCA',5) = .T.
         Removeproperty(Thisform,"oCA")
     Endif

     This.AddProperty("oCA")
     This.oCA = Createobject("cursoradapter")

Catch To oErrors

     Messagebox(" CursorAdapter object generation failed"+;
         Chr(13)+oErrors.Message,16,"Attention",2000)

     thisform.lOK = .F.

Finally
Endtry

If thisform.lOK = .F.
     Return
Endif


If thisform.lOK = .T.
     Try

         With Thisform.oCA
             .DataSourceType     = "ODBC"
             .DataSource             = thisform.nHandle
             .Alias                        = tcAlias
             .Tables                      = tcTabla
             .BufferModeOverride = 5
             .KeyFieldList            = thisform.cKeyField
             .SendUpdates         = .t.
             .usetransactions    = .f. && when set to .F., the CA does 
not use transactions so you must set transactions to manual in the SQL 
Server
             .SelectCmd             = cCmd
             .UpdatableFieldList = cUFL
             .UpdateNameList    = cUNL
             .CursorSchema        = cSCH
             .CursorFill()
         Endwith

        Select (thisform.oCA.alias)

     Catch To oErrors

        messagebox("Cursor generation 
failed"+Chr(13)+oErrors.Message,16,'Attention')

         thisform.lOK = .F.

     Endtry
Endif

return

**************************************************
**structure method

lparameter cTable

Local cSch,cUNL,cUFL,cField,N

Store '' to cSch,cUNL,cUFL
Store 0 to nResult

thisform.cKeyField = thisform.getkeyfield(cTable)

** this is the VFP cursor structure generated when data from SQL Server 
brought back

SQLColumns(thisform.nHandle,cTable,[FOXPRO],'curStructure')


Select curStructure

Scan all

        cUNL = cUNL + field_name+[ ]+JustStem(cTable)+[.]+field_name+[,]
        cUFL = cUFL + field_name+[,]

        cSCH = cSCH + field_name+[ ]+field_type

        Do case
           Case InList(field_type,[C],[D],[I],[T])
                cSCH = cSCH + [(] +Transform(field_len) +[)]
           Case field_type = [N]
                cSCH = cSCH + [(] 
+Transform(field_len)+[,]+Transform(field_dec) +[)]
           Case field_type = [M]
                cSCH = cSCH + [(] +Transform(8000) +[)]
        EndCase
        cSCH = cSCH + [,]


EndScan
Use in Select('curStructure')

** remove comma from end of strings

thisform.cSCH = Substr(cSCH,1,Len(Alltrim(cSCH))-1) && schema
thisform.cUNL = Substr(cUNL,1,Len(Alltrim(cUNL))-1) && updatenamelist
thisform.cUFL  = Substr(cUFL,1,Len(Alltrim(cUFL))-1) && updatablefieldlist

return

***********************************************************
**getkeyfield method

lparameters cTable

Local cField,N,cKeyField

Use in Select('curStructure')

** this allows you to know what is the key field directly from the SQL 
Server data

SQLColumns(thisform.nHandle,cTable,[NATIVE],'curStructure')

Select curStructure


Locate for Lower(Alltrim(type_name)) ='int identity'
If Found()
    cKeyField = Alltrim(column_name)
EndIf

Use in Select('curStructure')

Return cKeyField



El 13/10/2011 1:24, Ajoy Khaund escribió:
> Rafael,
>
> Are you using Windows or SQL Server Authentication?
> How are you connecting to the SQL Server data in the main form?
>
> Currently I am trying out with the master data which seems to be working.
> Can you send me an example of
> building CA in code. Currently I have saved a class for each table that I am
> working with.
>
> Thanks
>
> Ajoy Khaund
> [email protected]
>
>
>

_______________________________________________
Post Messages to: [email protected]
Subscription Maintenance: http://leafe.com/mailman/listinfo/profox
OT-free version of this list: http://leafe.com/mailman/listinfo/profoxtech
Searchable Archive: http://leafe.com/archives/search/profox
This message: 
http://leafe.com/archives/byMID/profox/[email protected]
** All postings, unless explicitly stated otherwise, are the opinions of the 
author, and do not constitute legal or medical advice. This statement is added 
to the messages for those lawyers who are too stupid to see the obvious.

Reply via email to