Plateforme Level Extreme
Abonnement
Profil corporatif
Produits & Services
Support
Légal
English
Understanding CursorAdapter methods
Message
Information générale
Forum:
Visual FoxPro
Catégorie:
Autre
Versions des environnements
Visual FoxPro:
VFP 9 SP1
Divers
Thread ID:
01475311
Message ID:
01475417
Vues:
27
>>>>I should have noticed it way earlier but I just did. When I check your code in the BeforeInsert the variable cInsertCmd has both the "INSERT INTO ....." expression and the "DECLARE..." expression, as they should be.
>>>>
>>>>When I review the value in my variable (in my program) cInsertCmd the "INSERT INTO... " expression is missing. The only thing I see in my code is the "DECLARE..." part. And my code in the BeforeInsert is identical to yours. Can you think of anything that makes my CA code not passing the INSERT INTO value in the method BeforeInsert()?
>>>
>>>
>>>Could you script the class with Class Browser and post it here?
>>
>>Keep in mind that I am using ADO and you used ODBC in your example. I don't know if it makes a difference or not though.
>
>You should start with that :-))))
>
>   oCA=CREATEOBJECT("CA_SCOPE_IDENTITY")    
>   BROWSE NORMAL
>   IF TABLEUPDATE(1, .t.)
>       BROWSE NORMAL
>   ELSE
>      AERROR(aaa)
>      MessageBox(aaa[2])
>   ENDIF
>
>
>DEFINE CLASS CA_SCOPE_IDENTITY AS CursorAdapter 
>     DataSourceType = [ADO]
>     Alias = "cTest"
>     BufferModeOverride = 5
>     SelectCmd = "select * from TestTable"
>     CursorSchema="Id I, name Varchar(20)"
>     UseCursorSchema= .T.    
>     Tables = "Dostav"
>     UpdatableFieldList="name, BulStat, Address"
>     UpdateNameList="Id TestTable.Id, name TestTable.Name"
>     KeyFieldList="Id"  
>     AutoUpdate = "Id"
> 
>     PROCEDURE Init
>        LOCAL nAutoRefreshConn AS ADODB.Connection
>        nAutoRefreshConn=CREATEOBJECT([ADODB.Connection])
>        nAutoRefreshConn.ConnectionString = [Provider=SQLNCLI;Server=(local);Database=TestDB;Trusted_Connection=yes;]
>        nAutoRefreshConn.Open()
>
>        nCommand =CREATEOBJECT([ADODB.Command])
>        nCommand.ActiveConnection = nAutoRefreshConn
>        nRS =CREATEOBJECT([ADODB.RecordSet])
>        nRS.ActiveConnection = nAutoRefreshConn
>        this.DataSource = nRS
>
>        this.UpdateCmdDataSourceType = [ADO]
>        this.InsertCmdDataSourceType = [ADO]
>        this.DeleteCmdDataSourceType = [ADO]
>        
>        this.UpdateCmdDataSource = nCommand
>        this.InsertCmdDataSource = nCommand
>        this.DeleteCmdDataSource = nCommand
>        
>        IF NOT this.CursorFill(.t.,.f.,0, nCommand)
>           AERROR(aaa)
>           MessageBox(aaa[2])
>        ENDIF
>     ENDPROC
> 
> 
>    PROCEDURE BeforeInsert(cFldState, lForce, cInsertCmd)
>
>            IF LEN(ALLTRIM(this.AutoUpdate))>0  
>                cInsertCmd = cInsertCmd + ;  
>                    "; DECLARE @id int; SELECT @id = SCOPE_IDENTITY()" + ;  
>                    "; EXEC Get_ValHelper @id, ?@" + ;  
>                    this.Alias + "." + ALLTRIM(this.AutoUpdate)+ " OUTPUT" && In ADO the OUTPUT here is mandatory.
>            ENDIF  
>    ENDPROC     
>ENDDEFINE
>
>
One thing that I would like is NOT to have to populate the CursorSchema property. Is it possible? What would I need to change in your example to make it work without CursorSchema?
"The creative process is nothing but a series of crises." Isaac Bashevis Singer
"My experience is that as soon as people are old enough to know better, they don't know anything at all." Oscar Wilde
"If a nation values anything more than freedom, it will lose its freedom; and the irony of it is that if it is comfort or money that it values more, it will lose that too." W.Somerset Maugham
Précédent
Suivant
Répondre
Fil
Voir

Click here to load this message in the networking platform