Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Updateable view of updateable view
Message
General information
Forum:
Visual FoxPro
Category:
The Mere Mortals Framework
Environment versions
Visual FoxPro:
VFP 8 SP1
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
Visual FoxPro
Application:
Desktop
Miscellaneous
Thread ID:
01433144
Message ID:
01433219
Views:
48
>>>I've used views of views before without issue, but apparently they were all non-updateable and I didn't realize it. I'm trying to do an updateable view of an updateable view, and the View Designer isn't having it. The view was using v_otherview as an apparent free table, but the DBSETPROP statements use Database!lv_otherview. Manual changes to "v_otherview" were undone when saved.
>>>
>>>Can this be done, or do I need to change lv_otherview to do what I created lv_viewofview for?
>>
>>I've done this before and managed to get it to work just fine (although I always hear people tell me I'm nuts for doing it) - but I've never had a problem using this logic....so....
>>What version of VFP are you using? Are both views local views? Or is this first one a remote view? And are both views in the same DBC?
>
>Version: Look up 12 lines ;) VFP 8 SP 1. Both are local and in the same DBC. The Mere Mortals framework business objects take the lv_ prefix and strip off the first letter to use v_viewname aliases.
>
>SELECT v_viewname.id, v_viewname.date, v_viewname.fullname, v_viewname.amount FROM v_viewname V_viewname ;
>WHERE ?vp_id = 0 or v_viewname.id = ?vp_id ORDER BY v_viewname.fullname, v_viewname.date
>
>DBSetProp(ThisView+".id","Field","DataType","I")
>DBSetProp(ThisView+".id","Field","UpdateName","dbc!lv_viewname.id")
>DBSetProp(ThisView+".id","Field","KeyField",.F.)
>DBSetProp(ThisView+".id","Field","Updatable",.T.)
>
>As shown, I never use DBC.lv_viewname, but View Designer insists that's the updatable table. What do your DBSetProps look like?

Here is an example.
This is the first view (which is a view of the table), and it's updatable....

SELECT Test1.test1_pk, Test1.field1, Test1.field2;
FROM ;
data1!test1

DBSetProp(ThisView,"View","SendUpdates",.T.)
DBSetProp(ThisView,"View","BatchUpdateCount",1)
DBSetProp(ThisView,"View","CompareMemo",.T.)
DBSetProp(ThisView,"View","FetchAsNeeded",.F.)
DBSetProp(ThisView,"View","FetchMemo",.T.)
DBSetProp(ThisView,"View","FetchSize",100)
DBSetProp(ThisView,"View","MaxRecords",-1)
DBSetProp(ThisView,"View","Prepared",.F.)
DBSetProp(ThisView,"View","UpdateType",1)
DBSetProp(ThisView,"View","UseMemoSize",255)
DBSetProp(ThisView,"View","Tables","data1!test1")
DBSetProp(ThisView,"View","WhereType",3)

DBSetProp(ThisView+".test1_pk","Field","DataType","I")
DBSetProp(ThisView+".test1_pk","Field","UpdateName","data1!test1.test1_pk")
DBSetProp(ThisView+".test1_pk","Field","KeyField",.T.)
DBSetProp(ThisView+".test1_pk","Field","Updatable",.F.)

DBSetProp(ThisView+".field1","Field","DataType","C(10)")
DBSetProp(ThisView+".field1","Field","UpdateName","data1!test1.field1")
DBSetProp(ThisView+".field1","Field","KeyField",.F.)
DBSetProp(ThisView+".field1","Field","Updatable",.T.)

DBSetProp(ThisView+".field2","Field","DataType","C(10)")
DBSetProp(ThisView+".field2","Field","UpdateName","data1!test1.field2")
DBSetProp(ThisView+".field2","Field","KeyField",.F.)
DBSetProp(ThisView+".field2","Field","Updatable",.T.)


..........................................then here is the second view, which is a view of the above view, and it's also updateable...

SELECT Lv_test1_toplevel_rvwru.test1_pk,;
Lv_test1_toplevel_rvwru.field1, Lv_test1_toplevel_rvwru.field2;
FROM ;
data1!lv_test1_toplevel_rvwru;
WHERE Lv_test1_toplevel_rvwru.test1_pk = ( ?lnTest1_pk )

DBSetProp(ThisView,"View","SendUpdates",.T.)
DBSetProp(ThisView,"View","BatchUpdateCount",1)
DBSetProp(ThisView,"View","CompareMemo",.T.)
DBSetProp(ThisView,"View","FetchAsNeeded",.F.)
DBSetProp(ThisView,"View","FetchMemo",.T.)
DBSetProp(ThisView,"View","FetchSize",100)
DBSetProp(ThisView,"View","MaxRecords",-1)
DBSetProp(ThisView,"View","Prepared",.F.)
DBSetProp(ThisView,"View","UpdateType",1)
DBSetProp(ThisView,"View","UseMemoSize",255)
DBSetProp(ThisView,"View","Tables","data1!lv_test1_toplevel_rvwru")
DBSetProp(ThisView,"View","WhereType",3)

DBSetProp(ThisView+".test1_pk","Field","DataType","I")
DBSetProp(ThisView+".test1_pk","Field","UpdateName","data1!lv_test1_toplevel_rvwru.test1_pk")
DBSetProp(ThisView+".test1_pk","Field","KeyField",.T.)
DBSetProp(ThisView+".test1_pk","Field","Updatable",.F.)

DBSetProp(ThisView+".field1","Field","DataType","C(10)")
DBSetProp(ThisView+".field1","Field","UpdateName","data1!lv_test1_toplevel_rvwru.field1")
DBSetProp(ThisView+".field1","Field","KeyField",.F.)
DBSetProp(ThisView+".field1","Field","Updatable",.T.)

DBSetProp(ThisView+".field2","Field","DataType","C(10)")
DBSetProp(ThisView+".field2","Field","UpdateName","data1!lv_test1_toplevel_rvwru.field2")
DBSetProp(ThisView+".field2","Field","KeyField",.F.)
DBSetProp(ThisView+".field2","Field","Updatable",.T.)

,,,,,with all that being said, generally I only do something like this if I have a really good reason too. Usually it's when I have several very complex remote views that I want to join together and I'll make a local view for that. This is often quite handy if you're trying to join data from two different systems (like an Oracle backend and a SQL server backend). Doing this with one local view of one local view seems a bit odd to me though since you're not joining two views together - I guess I just don't see why you wouldn't put it all in one view to begin with???
ICQ 10556 (ya), 254117
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform