Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
Left Join and Views
Message
From
27/12/2000 03:12:26
 
 
To
26/12/2000 23:59:20
General information
Forum:
Visual FoxPro
Category:
Databases,Tables, Views, Indexing and SQL syntax
Miscellaneous
Thread ID:
00456972
Message ID:
00456990
Views:
24
>Folks,
>
>I'm having trouble making a correct updatable view using a LEFT JOIN. I keep getting update conflict errors if the outer join column contains a NULL. What can be done to correct this?
>
>--
>
>Here is the view:
>
>CREATE SQL VIEW "LV_CLIENTSERVICE" AS ;
> SELECT ClientService.iClientID, Service.cService,;
> ClientService.lAlreadyReceiving, ClientService.lNeeded, ;
> ClientService.lUnavailable, ClientService.lIneligible, ;
> ClientService.lCALSafeFunded, ClientService.dReferral, ;
> ClientService.dFollowUp, ClientService.tAddStamp, ;
> ClientService.tModStamp, TTOD(ClientService.tModStamp) AS tModDateStamp, ;
> ClientService.iUserID, ClientService.iID, FollowUpStatus.iID AS iFollowUpStatusID, ;
> StudentRating.iID AS iStudentRatingID, ;
> NVL(FollowUpStatus.cStatusNumber, [ ]) AS cStatusNumber, ;
> NVL(StudentRating.cRatingNumber, [ ]) AS cRatingNumber ;
> FROM ClientService ;
> LEFT JOIN FollowUpStatus ;
> ON ClientService.iFollowUpStatusID = FollowUpStatus.iID ;
> LEFT JOIN StudentRating ;
> ON ClientService.iStudentRatingID = StudentRating.iID ;
> INNER JOIN Service ON ClientService.iServiceID = Service.iID ;
> WHERE ClientService.iClientID = ?vp_iClientID
>
>--
>
>I've been working with eView for hours and I'll spare you the reams of properties it generates. Here's some highlights just to show I haven't missed the obvious:
>
>DBSetProp('LV_CLIENTSERVICE', 'View', 'UpdateType', 1)
>DBSetProp('LV_CLIENTSERVICE', 'View', 'WhereType', 2) && for debugging
>DBSetProp('LV_CLIENTSERVICE', 'View', 'Tables', 'ClientService')
>DBSetProp('LV_CLIENTSERVICE', 'View', 'ParameterList', "vp_iClientID,'I'")
>DBSetProp('LV_CLIENTSERVICE.iid', 'Field', 'KeyField', .T.)
>DBSetProp('LV_CLIENTSERVICE.iid', 'Field', 'UpdateName', 'ClientService.iid')
>DBSetProp('LV_CLIENTSERVICE.istudentratingid', 'Field', 'Updatable', .T.)
>DBSetProp('LV_CLIENTSERVICE.istudentratingid', 'Field', 'UpdateName', 'ClientService.istudentratingid')
>
>--
>
>I'll use StudentRating as an example, but the following also applies to the FollowUpStatus table.
>
>Assuming I have the view running with several records in record buffering mode, here's what I've been able to figure out:
>
>If the iStudentRatingID contains a valid pointer to the StudentRating table and I change a field, the record saves. I can verify this by looking at the base table.
>If the iStudentRatingID originally does not contain a valid pointer (i.e., it's NULL), I get an update conflict error when I attempt to save the record. This is true even if a valid pointer value is placed in iStudentRatingID.
>If this is corrected with a TableRevert(), the original record that saved correctly a moment ago now generates an Update Conflict error!
>
>I'm baffled. What am I missing?


NOt sure if why this might manifest itself as an update conflict, but I think I see at least one problem with your view definition- the field iStudentRatingID is pulled from the base table field StudentRating.iID, but it's UpdateName is set as StudentRating.iStudentRatingID. Does correcting this make the problem go away?
Erik Moore
Clientelligence
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform