Мне пришлось обновить представление vfp, чтобы оно работало быстрее. До этого изменения базовая таблица (schdrate) обновлялась нормально. Теперь я получаю сообщение «Не указаны таблицы обновлений. Используйте свойство таблицы курсора '.
Я попытался преобразовать приведенное ниже представление в представление, чтобы увидеть, сработало ли это, и получаю сообщение «Обновление или вставка представления или функции schdrateView» не удалось, поскольку оно содержит производный или поле констант '
Есть идеи, почему я получаю ошибку «Не указаны таблицы обновлений», когда у меня установлено свойство таблиц?
DEFINE CLASS ccVschdrate As imView
ViewName = "vschdrate"
KeyFieldList = "schdrate_id"
Tables = "incedo.schdrate"
SendUpdates = .T.
BUFFERING = 0 && Turn Buffering off
SQL = "select schdrate.*, descript from ( " + ;
" select distinct a.loc_id,RTRIM(LTRIM(b.short_desc)) + ' - ' + RTRIM(LTRIM(c.short_desc)) + ' - ' + d.descript AS descript " + ;
" from LOC A " + ;
" INNER JOIN loctocpt WITH (NOLOCK) ON a.loc_id = loctocpt.loc_id " + ;
" INNER JOIN proccode WITH (NOLOCK) ON loctocpt.proc_id = proccode.proc_id " + ;
" INNER JOIN CodeModPOS WITH (NOLOCK) ON ProcCode.Proc_ID = CodeModPOS.Proc_ID " + ;
" LEFT OUTER JOIN loc_x_codemodpos x WITH (NOLOCK) ON x.CodeModPOS_ID = CodeModPOS.CodeModPOS_ID AND x.loc_id = loctocpt.loc_id " + ;
" INNER JOIN caretype b WITH (NOLOCK) ON b.type_id = a.type_id " + ;
" INNER JOIN careinte c WITH (NOLOCK) ON c.care_id = a.care_id " + ;
" INNER JOIN caremode d WITH (NOLOCK) ON d.mode_id = a.mode_id " + ;
" INNER JOIN caresett e WITH (NOLOCK) ON c.setting_id = e.setting_id " + ;
" INNER JOIN careleve f WITH (NOLOCK) ON c.level_id = f.level_id " + ;
" WHERE x.CodeModPOS_ID IS NULL AND prim_cpt = 1 AND proccode.proc_id NOT IN (SELECT proc_id " + ;
" FROM codemodpos " + ;
" INNER JOIN loc_x_codemodpos x WITH (NOLOCK) ON x.CodeModPOS_ID = CodeModPOS.CodeModPOS_ID ))a " + ;
" INNER JOIN schdrate WITH (NOLOCK) ON a.loc_id = schdrate.loc_id " + ;
" UNION " + ;
" select schdrate.*,RTRIM(LTRIM(b.short_desc)) + ' - ' + RTRIM(LTRIM(c.short_desc)) + ' - ' + d.descript AS descript " + ;
" from schdrate " + ;
" INNER JOIN loc a WITH (NOLOCK) ON a.loc_id = schdrate.loc_id " + ;
" LEFT OUTER JOIN loctocpt WITH (NOLOCK) ON a.loc_id = loctocpt.loc_id " + ;
" LEFT OUTER JOIN proccode WITH (NOLOCK) ON loctocpt.proc_id = proccode.proc_id " + ;
" LEFT OUTER JOIN CodeModPOS WITH (NOLOCK) ON ProcCode.Proc_ID = CodeModPOS.Proc_ID " + ;
" INNER JOIN caretype b WITH (NOLOCK) ON b.type_id = a.type_id " + ;
" INNER JOIN careinte c WITH (NOLOCK) ON c.care_id = a.care_id " + ;
" INNER JOIN caremode d WITH (NOLOCK) ON d.mode_id = a.mode_id " + ;
" INNER JOIN caresett e WITH (NOLOCK) ON c.setting_id = e.setting_id " + ;
" INNER JOIN careleve f WITH (NOLOCK) ON c.level_id = f.level_id " + ;
" WHERE CodeModPOS.Proc_ID IS NULL " + ;
" UNION " + ;
" select schdrate.*,RTRIM(LTRIM(b.short_desc)) + ' - ' + RTRIM(LTRIM(c.short_desc)) + ' - ' + d.descript AS descript " + ;
" from schdrate " + ;
" INNER JOIN loc a ON a.loc_id = schdrate.loc_id INNER JOIN loctocpt WITH (NOLOCK) ON a.loc_id = loctocpt.loc_id " + ;
" INNER JOIN proccode WITH (NOLOCK) ON loctocpt.proc_id = proccode.proc_id " + ;
" INNER JOIN CodeModPOS WITH (NOLOCK) ON ProcCode.Proc_ID = CodeModPOS.Proc_ID " + ;
" INNER JOIN loc_x_codemodpos x WITH (NOLOCK) ON x.CodeModPOS_ID = CodeModPOS.CodeModPOS_ID AND x.loc_id = loctocpt.loc_id " + ;
" INNER JOIN caretype b WITH (NOLOCK) ON b.type_id = a.type_id INNER JOIN careinte c WITH (NOLOCK) ON c.care_id = a.care_id " + ;
" INNER JOIN caremode d WITH (NOLOCK) ON d.mode_id = a.mode_id INNER JOIN caresett e WITH (NOLOCK) ON c.setting_id = e.setting_id " + ;
" INNER JOIN careleve f WITH (NOLOCK) ON c.level_id = f.level_id " + ;
" UNION " + ;
" select schdrate.*,RTRIM(LTRIM(b.short_desc)) + ' - ' + RTRIM(LTRIM(c.short_desc)) + ' - ' + d.descript AS descript " + ;
" from schdrate " + ;
" INNER JOIN loc a WITH (NOLOCK) ON a.loc_id = schdrate.loc_id " + ;
" INNER JOIN loctocpt WITH (NOLOCK) ON a.loc_id = loctocpt.loc_id " + ;
" INNER JOIN proccode WITH (NOLOCK) ON loctocpt.proc_id = proccode.proc_id " + ;
" INNER JOIN CodeModPOS WITH (NOLOCK) ON ProcCode.Proc_ID = CodeModPOS.Proc_ID " + ;
" LEFT OUTER JOIN loc_x_codemodpos x WITH (NOLOCK) ON x.CodeModPOS_ID = CodeModPOS.CodeModPOS_ID AND x.loc_id = loctocpt.loc_id " + ;
" INNER JOIN caretype b WITH (NOLOCK) ON b.type_id = a.type_id " + ;
" INNER JOIN careinte c WITH (NOLOCK) ON c.care_id = a.care_id " + ;
" INNER JOIN caremode d WITH (NOLOCK) ON d.mode_id = a.mode_id " + ;
" INNER JOIN caresett e WITH (NOLOCK) ON c.setting_id = e.setting_id " + ;
" INNER JOIN careleve f WITH (NOLOCK) ON c.level_id = f.level_id " + ;
" WHERE loctocpt.PROC_ID in (Select PROC_ID from CodeModPOS inner join loc_x_codemodpos New on New.CodeModPOS_ID = codemodpos.CodeModPOS_ID) and " + ;
" Codemodpos.CodeModPOS_ID not in (select CodeModPOS_ID from loc_x_codemodpos new1 ) and x.CodeModPOS_ID IS NULL "
PROCEDURE Init(tcViewName, tNodata)
DODEFAULT(tcViewName, tNodata)
IF !EOF()
**INDEX ON RatesLOC(ASUBS(RatesLOC,ASCAN(RatesLOC,vschdrate.loc_id),1),2) TAG PrimName
INDEX ON PADR(ALLTRIM(descript),100) TAG PrimName
ENDIF
This.Buffering = DB_BUFOPTTABLE && Turn Buffering on
THIS.SetCursorProps
ENDPROC
ENDDEFINE
Ниже приведен базовый класс, в котором свойства набор
FUNCTION imMakeCursorUpdate(tcAlias, cTable, cKeyField, lIsIdentity)
*> makes cursor after SQLEXEC updatable
*> assumes that field names are the same
LOCAL i, cNameList, cFieldList, lnOldSelect
lnOldSelect = SELECT()
SELECT (tcAlias)
STORE "" TO cNameList, cFieldList
FOR i = 1 TO FCOUNT()
cNameList = cNameList + FIELD(i) + " " + cTable +"."+FIELD(i)+","
cFieldList = cFieldList + FIELD(i) + ","
NEXT
*> 100128 - SKG - If using identity don't include the keyfield in the UpdateagleFieldList
IF lIsIdentity = .t.
cFieldList = STRTRAN(cFieldList, ALLTRIM(cKeyField), [],1,1,3)
cFieldList = STRTRAN(cFieldList, [,,], [,])
cFieldList = STRTRAN(cFieldList, [ ,], [,])
cFieldList = STRTRAN(cFieldList, [ ,], [,])
IF LEFT(cFieldList,1) = [,]
cFieldList = SUBSTR(cFieldList,2)
ENDIF
ENDIF
cNameList = LEFT(cNameList, LEN(cNameList)-1)
cFieldList = LEFT(cFieldList, LEN(cFieldList)-1)
CURSORSETPROP("tables", cTable)
CURSORSETPROP("buffering", 5)
CURSORSETPROP("wheretype", 3)
CURSORSETPROP("updatenamelist", cNameList)
CURSORSETPROP("keyfieldlist", cKeyField)
CURSORSETPROP("updatablefieldlist", cFieldList)
CURSORSETPROP("sendupdates", .T.)
SELECT (lnOldSelect)
ENDFUNC