:: Visual Foxpro, Foxpro for DOS
Re: Как сформулировать запрос для Cursor Adapter-a
spammail_88
Автор

Сообщений: 108
Дата регистрации: 13.11.2010
spammail_88
В UpdateNameList что писать:
Если сделать так:
В SelectCMD пишу:
SELECT MAX(TFam.Fam) F123,TData.* FROM TData LEFT OUTER JOIN TFam ON TData.ID==TFam.ID GROUP BY TData.ID,TData.kDel,TData.Data WHERE ...
В UpdateNameList пишу:
F123 MAX(TFam.Fam),ID TData.ID,kDel TData.kDel,Data TData.Data
В UpdateFieldList пишу:
F123,ID,kDell,Data

Так будет правильно?
Ratings: 0 negative/0 positive
Re: Как сформулировать запрос для Cursor Adapter-a
Igor Korolyov

Сообщений: 34580
Дата регистрации: 28.05.2002
spammail_88
1. Как это оформить в CursorAdapter-е? Вышеуказанный запрос пишу в SelectCMD.
Да.
spammail_88
В UpdateNameList что писать:
Ничего для этого поля - оно не будет обновляемым в любом случае (т.е. изменения в него вносимые никуда не пойдут).
spammail_88
2. Можно ли сделать так, чтобы после GROUP BY не перечислять все поля TData, а просто указать таблицу TData?
Нет, нельзя. Можно в группировке указать только одно ключевое поле данной таблицы, и тогда в списке выбора полей для всех остальных применить те же MAX/MIN(неключевое_поле) неключевое_поле - т.к. группировка идёт по ключевому полю, для "выбора" максимального всегда будет использоваться ровно одна запись, и никаких неоднозначностей не возникнет.
В UpdateNameList для таких полей писать так, как будто никакого MAX/MIN нет.
Вообще между SelectCMD и группой свойств управляющих обновлением (Tables, UpdateNameList, KeyFieldList, UpdatableFieldList - из основных) нет вообще никакой связи. SelectCMD может быть хоть бы и вызовом ХП, а вот данные в свойствах управляющих автоматическим обновлением все вместе позволяют фоксу сформировать требуемую для выполнения обновления команду INSERT/UPDATE/DELETE.
spammail_88
В хелпе вычитал такое:
...
Что означает “A table alias from the SQL SELECT list.”? Так можно указать таблицу, или нет?
Вероятно это опечатка, и там должно было быть написано "field alias".
Нельзя группировать "по таблице", или по чему-то типа "tbl.*"
Можно указывать поле группировки разными способами.
SELECT tbl.fld1 newfield1, tbl.fld2 newfield2, tbl.fld3 newfield3 FROM someTable tbl ;
GROUP BY tbl.fld1, newfield2, 3
В примере как раз все 3 способа и приведены. Алиас можно пропускать, если таблица всего одна, или если абсолютно уверен в уникальности имён полей во всех используемых таблицах (если их несколько) - при том как сегодня, так и через много лет Т.е. в общем то указывая "имя поля" лучше всегда указывать и алиас таблицы. Либо же использовать "алиас поля" из этого же запроса.


------------------
WBR, Igor
Ratings: 0 negative/1 positive
Re: Как сформулировать запрос для Cursor Adapter-a
of63

Сообщений: 25256
Откуда: Н.Новгород
Дата регистрации: 13.02.2008
ТС понял? ) (это баналбщина, потому и стеб



Исправлено 1 раз(а). Последнее : of63, 11.11.18 18:52
Ratings: 0 negative/0 positive


Извините, только зарегистрированные пользователи могут оставлять сообщения в этом форуме.

On-line: 20 (Гостей: 20)

© 2000-2024 Fox Club 
Яндекс.Метрика