| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Foxpro/Clipper/Dbase > Local View и удаленные записи |
| Автор: AlexPro 16.3.2008, 06:01 |
| Есть некий вид, делающий выборку из нескольких связанных таблиц. Мне необходимо, чтобы в результаты не включались записи, помеченные для удаления. На SET DELETED вид не реагирует, про функцию DELETED() в хелпе по SQL-SELECT написано нечто невразумительное, заключающееся в том, что ее нужно использовать крайне осторожно и только если выборка делается из единственной таблицы. Что делать, если таблиц несколько, разумеется, ничего не сказано. Подскажите, плиз, что делать (кроме как упаковывать таблицы после удаления каждой записи - вариант неприемлемый)? |
| Автор: SaschaL 16.3.2008, 18:37 | ||||
| Доброго времени суток! Увидел вас вопрос, решил вспомнить прошлое, раньше занимался Фоксом очень плотно , в настоящее время по мере необходимости. Привожу пример кода который нашел в своем архиве (это хелп на русском языке):
Если нужно выбрать только помеченные то вид кода будет выглядеть примерно так, прошу простить если ошибусь в синтаксисе, пишу по памяти
|
| Автор: SaschaL 17.3.2008, 06:45 | ||
| Пришел на работу проверил работоспособность кода. Искусственно создал ситуацию при которой в базе (*.dbf) имелись записи помеченные на удаление. Открыл таблицу в Фоксе и произвел отбор записей следующей командой.
в результате чего в запрос попали записи из таблицы sotr помеченые в таблице как удаленные. Подобная же конструкция запроса может быть и применима для более сложных запросов например выбору по нескольким связанным таблицам. В принципе в справочнике по языку написано подробно, главное понять философию самого FoxPro. Сразу оговорюсь пробовал это сделать как на версии 6-ой так и на 9-ке. |
| Автор: AlexPro 17.3.2008, 12:10 | ||
SaschaL, спасибо за ответ, но к сожалению, приведенный пример подходит для выборки только из единственной таблицы. Вот что пишет по этому поводу сама Microsoft:
Вот, собственно, и вся философия... Тем не менее, этот ответ заставил меня гораздо основательней поковыряться с этим вопросом и найти приемлемое решение. Проблема заключалась в том, что форма, отображающая вид, использует приватную сессию данных и все установки (в т.ч. и SET DELETED) у меня вызывались из метода формы LOAD (т.е. после открытия таблиц). Для таблиц это было совершенно неважно, в отличие от вида. После перемещения вызова SET DELETED ON в метод BeforeOpenTables все заработало как надо: записи, помеченные на удаление, перестали попадать в выборку, что меня чрезвычайно порадовало. Еще раз спасибо. |