Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Trying to come up with a view/CA model
Message
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Environment versions
Visual FoxPro:
VFP 9 SP1
OS:
Windows XP
Network:
Windows 2003 Server
Database:
MS SQL Server
Miscellaneous
Thread ID:
01410693
Message ID:
01410929
Views:
46
This message has been marked as a message which has helped to the initial question of the thread.
>>No, the problem is that you have RECORD in the CA and it execute UPDATE not INSERT:
>>That works for me (w/o very hard testing):
>>
>>CLEAR
>>CLOSE DATABASES ALL
>>SET ASSERTS ON
>>
>>getOptionID = 1
>>getMakeID   = 22
>>getModelIDs = [_1_2_3]
>>oCa = CREATEOBJECT([cadealeropts])
>>IF oCa.CursorFill()
>>   BROWSE NORMAL
>>   IF NOT TABLEUPDATE(1, .t., oCa.Alias)
>>      AERROR(aaaa)
>>      CLEAR
>>      DISPLAY MEMORY LIKE aaaa
>>   ENDIF
>>
>>ELSE
>>   AERROR(aaaa)
>>   CLEAR
>>   DISPLAY MEMORY LIKE aaaa
>>ENDIF
>>
>>
>>
>>
>>DEFINE CLASS cadealeropts AS cursoradapter
>>       SelectCmd = "select DealerOpts.OptsID, NVL(DealerOpts.OptionID,?getOptionID) as OptionID,  NVL(DealerOpts.MakeID, ?getMakeID) as MakeID, "+;
>>                           "Models.ModelID as ModelID, Models.MfgName, Models.Name as ModelName, "+;
>>                           "Models.ModelNmbr as ModelNmbr,  Models.ModelYear as ModelYear, DealerOpts.Retail, DealerOpts.Cost, "+;
>>                           "DealerOpts.Costline, DealerOpts.Type as cType, DealerOpts.StdOption "+;
>>                           "from DealerOpts "+;
>>                           "RIGHT JOIN Models ON DealerOpts.ModelID = Models.ModelID and DealerOpts.OptionID = ?getOptionID and "+;
>>                                                "DealerOpts.MakeID = ?getMakeID where cast(Models.ModelID as varchar(12)) $ (?getModelIDs)"
>>       CursorSchema = "OptsID I, OptionID I, MakeID I, ModelID I, MfgName C(40), ModelName C(65), "+;
>>                      "ModelNmbr C(20), ModelYear C(40), Retail N(10, 2), Cost N(10, 2), Costline N(10, 2),"+;
>>                      "cType C(12), StdOption L(1)"
>>       Alias              = "curdealeropts"
>>       DataSourceType     = "Native"
>>       Flags              = 0
>>       CompareMemo        = .T.
>>       FetchMemo          = .F.
>>       SendUpdates        = .T.
>>       KeyFieldList       = "OPTSID"
>>       Tables             = "DealerOpts"
>>       UpdatableFieldList = "OPTIONID, MAKEID, MODELID, RETAIL, COST, COSTLINE, CTYPE, STDOPTION"
>>       UpdateNameList     = "OPTSID DealerOpts.OPTSID,OPTIONID DealerOpts.OPTIONID, MAKEID DealerOpts.MAKEID,"+;
>>                             "MODELID DealerOpts.MODELID, RETAIL DealerOpts.RETAIL, COST DealerOpts.COST, "+;
>>                            "COSTLINE DealerOpts.COSTLINE, CTYPE DealerOpts.Type, STDOPTION DealerOpts.STDOPTION"
>>       BreakOnError       = .T.
>>       UseCursorSchema    = .T.
>>       UseTransactions    = .T.
>>       Name               = "cadealeropts"
>>
>>    PROCEDURE Init
>>        set multilocks on
>>        llReturn = dodefault()
>>    ENDPROC
>>    
>>    PROCEDURE BeforeUpdate(cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd)
>>        IF ISNULL(EVALUATE(this.Alias +[.OPTSID]))
>>           TEXT TO cUpdateInsertCmd NOSHOW TEXTMERGE PRETEXT 15
>>                INSERT INTO DealerOpts (OptionID, MakeID, Retail, Cost, Costline, cType, StdOption, ModelID)
>>                VALUES
>>                (<<EVALUATE(this.Alias+[.OptionID])>>,
>>                 <<EVALUATE(this.Alias+[.MakeID])>>,
>>                 <<EVALUATE(this.Alias+[.Retail])>>,
>>                 <<EVALUATE(this.Alias+[.Cost])>>,
>>                 <<EVALUATE(this.Alias+[.Costline])>>,
>>                 <<EVALUATE(this.Alias+[.cType])>>,
>>                 <<EVALUATE(this.Alias+[.StdOption])>>,
>>                 <<EVALUATE(this.Alias+[.ModelID])>>)
>>           ENDTEXT
>>        ENDIF
>>    ENDPROC
>>ENDDEFINE
>>
>>
>>Just changed BeforeUpdate event.
>
>It almost works, except that it gives the 'Syntax error' (probably because of cType and StdOption) fields. I'm wondering if we can use parameters approach constructing this and if there are some problems with it?

Syntax Error?
That WORKS for me:
cd\
md TestNaomi
cd TestNaomi
CREATE DATABASE Naomi
CREATE TABLE DealerOpts (OptsID I AUTOINC NEXTVALUE 1, OptionID I, MakeID I, Retail N(10, 2), Cost N(10, 2), Costline N(10, 2), cType C(12), StdOption L, ModelID I)
CREATE TABLE Models     (ModelID I, MfgName C(40), ModelName C(65), ModelNmbr C(20), ModelYear C(40))

CLEAR
CLOSE DATABASES ALL
SET ASSERTS ON

getOptionID = 2
getMakeID   = 22
getModelIDs = [_1_2_3]
oCa = CREATEOBJECT([cadealeropts])
IF oCa.CursorFill()
   BROWSE NORMAL
   IF NOT TABLEUPDATE(1, .t., oCa.Alias)
      AERROR(aaaa)
      CLEAR
      DISPLAY MEMORY LIKE aaaa
   ENDIF

ELSE
   AERROR(aaaa)
   CLEAR
   DISPLAY MEMORY LIKE aaaa
ENDIF




DEFINE CLASS cadealeropts AS cursoradapter
       SelectCmd = "select DealerOpts.OptsID, NVL(DealerOpts.OptionID,?getOptionID) as OptionID,  NVL(DealerOpts.MakeID, ?getMakeID) as MakeID, "+;
                           "Models.ModelID as ModelID, Models.MfgName, Models.Name as ModelName, "+;
                           "Models.ModelNmbr as ModelNmbr,  Models.ModelYear as ModelYear, DealerOpts.Retail, DealerOpts.Cost, "+;
                           "DealerOpts.Costline, DealerOpts.Type as cType, DealerOpts.StdOption "+;
                           "from DealerOpts "+;
                           "RIGHT JOIN Models ON DealerOpts.ModelID = Models.ModelID  and DealerOpts.OptionID = ?getOptionID and "+;
                                                "DealerOpts.MakeID = ?getMakeID " +;
                           "where cast(Models.ModelID as varchar(12)) $ (?getModelIDs)"

       CursorSchema = "OptsID I, OptionID I, MakeID I, ModelID I, MfgName C(40), ModelName C(65), "+;
                      "ModelNmbr C(20), ModelYear C(40), Retail N(10, 2), Cost N(10, 2), Costline N(10, 2),"+;
                      "cType C(12), StdOption L(1)"
       Alias              = "curdealeropts"
       DataSourceType     = "Native"
       Flags              = 0
       CompareMemo        = .T.
       FetchMemo          = .F.
       SendUpdates        = .T.
       KeyFieldList       = "OPTSID"
       Tables             = "DealerOpts"
       UpdatableFieldList = "OPTIONID, MAKEID, MODELID, RETAIL, COST, COSTLINE, CTYPE, STDOPTION"
       UpdateNameList     = "OPTSID DealerOpts.OPTSID,OPTIONID DealerOpts.OPTIONID, MAKEID DealerOpts.MAKEID,"+;
                             "MODELID DealerOpts.MODELID, RETAIL DealerOpts.RETAIL, COST DealerOpts.COST, "+;
                            "COSTLINE DealerOpts.COSTLINE, CTYPE DealerOpts.Type, STDOPTION DealerOpts.STDOPTION"
       BreakOnError       = .T.
       UseCursorSchema    = .T.
       UseTransactions    = .T.
       Name               = "cadealeropts"

    PROCEDURE Init
        set multilocks on
        llReturn = dodefault()
    ENDPROC
    
    PROCEDURE BeforeUpdate(cFldState, lForce, nUpdateType, cUpdateInsertCmd, cDeleteCmd)
        IF ISNULL(EVALUATE(this.Alias +[.OPTSID]))
           TEXT TO cUpdateInsertCmd NOSHOW TEXTMERGE PRETEXT 15
                INSERT INTO DealerOpts (OptionID, MakeID, Retail, Cost, Costline, cType, StdOption, ModelID)
                VALUES
                (<<EVALUATE(this.Alias+[.OptionID])>>,
                 <<EVALUATE(this.Alias+[.MakeID])>>,
                 <<EVALUATE(this.Alias+[.Retail])>>,
                 <<EVALUATE(this.Alias+[.Cost])>>,
                 <<EVALUATE(this.Alias+[.Costline])>>,
                 <<EVALUATE(this.Alias+[.cType])>>,
                 <<EVALUATE(this.Alias+[.StdOption])>>,
                 <<EVALUATE(this.Alias+[.ModelID])>>)
           ENDTEXT
        ENDIF
    ENDPROC
ENDDEFINE
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