powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как указать, что в представлении ничего не отобрано?
25 сообщений из 25, страница 1 из 1
Как указать, что в представлении ничего не отобрано?
    #33718532
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть форма запроса фамилии, имени и отчества. К форме прицеплено представление, в результате отработки которого полученная запись отображается в другой форме.

С передачей параметра из формы в представление, а результата отработки представления в следующую форму я разобралась, все показывает.
А если результат поиска нулевой? Как сделать, чтобы следующая форма не открывалась, а выскакивало окошко с сообщением, что ничего не найдено?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33718537
AleksMed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
См. _TALLY, RECCOUNT()
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33718726
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, помогло :)
Но появился дополнительный вопрос: у меня идет отбор по фамилии, имени и отчеству. Если строгое соответствие - находит, если строгое несоответствие (т.е. не совпадают ни один из трех параметров) - говорит "Не найдено". А если есть совпадение хоть в одном из параметров - выводит подходящую запись.

Как можно сделать, чтобы выводилось только строгое соответствие?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33719362
alexFV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как можно сделать, чтобы выводилось только строгое соответствие?

Может быть установить SET ANSI ON или SET EXACT ON смотря как идет Ваш отбор.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33720161
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Делаю так.
На форме три textbox-а, в которые вводятся фамилия, имя, отчество.

При нажатии кнопки ОК пишу:

LOCAL cFam,cNam,cOtt,ldDtr

m.cFam=ALLTRIM(ThisForm.txtfam.value)
m.cNam=ALLTRIM(thisform.txtnam.Value)
m.cOtt=ALLTRIM(ThisForm.txtott.value)
m.ldDtr=ThisForm.txtdtr

REQUERY("kurs_view")
IF reccount("KURS_VIEW")=0
=MESSAGEBOX("Не найдено!",0)
ELSE
DO FORM expi6
ENDIF

Сам View

SELECT Slvcity.id, Slvcity.cname, Jsn_kurs.itipst, Jsn_kurs.idn,;
Jsn_kurs.cfam, Jsn_kurs.cimm, Jsn_kurs.cott, Jsn_kurs.ddtr, Jsn_kurs.iobl,;
Jsn_kurs.irn, Jsn_kurs.icity, Jsn_kurs.istr, Jsn_kurs.ndom, Jsn_kurs.nkv,;
Jsn_kurs.ngpz, Jsn_kurs.ngpp, Jsn_kurs.nsmill, Jsn_kurs.nsmilf,;
Jsn_kurs.nsmilk, Jsn_kurs.nsmil01, Jsn_kurs.nsmil02, Jsn_kurs.nsmil03,;
Jsn_kurs.nsmil04, Jsn_kurs.nsmil05, Jsn_kurs.nsmil06, Jsn_kurs.nsmil07,;
Jsn_kurs.nsmil08, Jsn_kurs.nsmil09, Jsn_kurs.nsmil10, Jsn_kurs.nsmil11,;
Jsn_kurs.nsmil12, Jsn_kurs.nsmil13, Jsn_kurs.nsmil14, Jsn_kurs.nmiom,;
Jsn_kurs.mold, Jsn_kurs.mncom, Jsn_kurs.nrus, Jsn_kurs.nist, Jsn_kurs.nobs,;
Jsn_kurs.nfiz, Jsn_kurs.cpost, Jsn_kurs.nsoc1, Jsn_kurs.nsoc2,;
Jsn_kurs.nsoc3, Jsn_kurs.nons11, Jsn_kurs.nons12, Jsn_kurs.nons21,;
Jsn_kurs.nons22, Jsn_kurs.nons31, Jsn_kurs.nons32, Jsn_kurs.irasp,;
Jsn_kurs.motz, Jsn_kurs.motz2, Jsn_kurs.cdol, Jsn_kurs.nvzv,;
Jsn_kurs.nvrot, Jsn_kurs.nohv1, Jsn_kurs.nohv2, Jsn_kurs.nsps1,;
Jsn_kurs.nsps2, Jsn_kurs.nuso1, Jsn_kurs.nuso2, Jsn_kurs.nilv1,;
Jsn_kurs.nilv2, Jsn_kurs.nuvp1, Jsn_kurs.nuvp2, Jsn_kurs.numm1,;
Jsn_kurs.numm2, Jsn_kurs.nupv1, Jsn_kurs.nupv2, Jsn_kurs.nzos1,;
Jsn_kurs.nzos2, Jsn_kurs.nklu1, Jsn_kurs.nklu2, Jsn_kurs.nuup1,;
Jsn_kurs.nuup2, Jsn_kurs.nlov1, Jsn_kurs.nlov2, Jsn_kurs.numg1,;
Jsn_kurs.numg2, Jsn_kurs.nukp1, Jsn_kurs.nukp2, Jsn_kurs.nzpb1,;
Jsn_kurs.nzpb2, Jsn_kurs.npvu1, Jsn_kurs.npvu2, Jsn_kurs.nkmn1,;
Jsn_kurs.nkmn2, Jsn_kurs.nuve1, Jsn_kurs.nuve2, Jsn_kurs.nuoo1,;
Jsn_kurs.nuoo2, Jsn_kurs.nuis1, Jsn_kurs.nuis2, Jsn_kurs.nupd1,;
Jsn_kurs.nupd2, Jsn_kurs.nuur1, Jsn_kurs.nuur2, Jsn_kurs.nfpg1,;
Jsn_kurs.nfpg2, Jsn_kurs.ncpd1, Jsn_kurs.ncpd2, Jsn_kurs.nzou1,;
Jsn_kurs.nzou2, Jsn_kurs.nupp1, Jsn_kurs.nupp2, Jsn_kurs.nluk1,;
Jsn_kurs.nluk2, Jsn_kurs.nspr1, Jsn_kurs.nspr2, Jsn_kurs.nspz1,;
Jsn_kurs.nspz2, Jsn_kurs.nkpo1, Jsn_kurs.nkpo2, Jsn_kurs.nkvz1,;
Jsn_kurs.nkvz2, Jsn_kurs.czvan, Slvrsp.id, Slvrsp.cname, Slvobl.id,;
Slvobl.cname;
FROM ;
kurs!slvcity ;
INNER JOIN kurs!jsn_kurs ;
ON Slvcity.id = Jsn_kurs.icity ;
INNER JOIN kurs!slvrsp ;
ON Slvrsp.id = Jsn_kurs.irasp ;
INNER JOIN kurs!slvobl ;
ON Slvobl.id = Jsn_kurs.iobl;
WHERE ( Jsn_kurs.cfam == ( ?CFAM );
AND Jsn_kurs.cimm == ( ?CNAM ) );
AND Jsn_kurs.cott == ( ?COTT );
ORDER BY Jsn_kurs.cfam

Если задать "ИВАНОВ ИВАН ИВАНОВИЧ" и такой в базе есть - все находится.
Если задать "ПЕТРОВ ИВАН СЕРГЕЕВИЧ" - все равно выведет "ИВАНОВ ИВАН ИВАНОВИЧ".

Почему?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33720677
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй почистить контейнер базы данных. В режиме модификации базы данных пункт меню DataBase - CleanUp DataBase

Затем выполни компиляцию проекта с опцией Recompaile All Files

Если не поможет. Удали View. Почисть базу данных и снова создай View

Подозрение на то, что изначально в твоем View стоял символ не тождественного равенства, а простого равенства (один символ "="). А после модификации это изменение не было переведено в исполняемый код или же используется старая версия исполняемого кода.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721199
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМПопробуй почистить контейнер базы данных. В режиме модификации базы данных пункт меню DataBase - CleanUp DataBase


ВладимирМ
Подозрение на то, что изначально в твоем View стоял символ не тождественного равенства, а простого равенства (один символ "="). А после модификации это изменение не было переведено в исполняемый код или же используется старая версия исполняемого кода.

Ваши подозрения абсолютно обоснованы.
Вто только у меня в меню опция CleanUp Database неактивна. Как-нибудь по-другому это проделать можно?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721247
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katty_aiВаши подозрения абсолютно обоснованы.
Вто только у меня в меню опция CleanUp Database неактивна. Как-нибудь по-другому это проделать можно?
Это значит, что контейнер базы данных открыт в режиме Shared.

Необходимо закрыть сам контейнер базы данных, переотркыть его в режиме Exclusive и выполнить упаковку.

Для этого надо непосредственно в окне проекта установить указатель на имени базы данных и нажать кнопку "Close". Затем в командном окне дать команду

SET EXCLUSIVE ON

и в проекте нажать кнопку Modify. Теперь пункт Clean Up DataBase должен быть доступен.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721413
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Получилось. Спасибо.

А еще вопрос - с поиском при подстановке текстовых полей все понятно. А как сделать поиск по дате? Ведь в запрос в корректном виде она вводится как {^YYYY/MM/DD}.
Как её преобразовать из обычного вида к подобному?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721445
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katty_aiА еще вопрос - с поиском при подстановке текстовых полей все понятно. А как сделать поиск по дате? Ведь в запрос в корректном виде она вводится как {^YYYY/MM/DD}.
Как её преобразовать из обычного вида к подобному?
Не надо ничего преобразовывать. Использование символа вопросительного знака автоматически преобразует данные в нужный формат. Разумеется, сама переменная должна иметь тип Date или DateTime

Чтобы TextBox возвращал значение типа Date прямо в дизайнере формы укажи в значении

TextBox.Value = {}

Т.е. две фигурные скобки подряд.

Тогда

ldDate = ThisForm.TextBox.Value()
Requery("MyView")
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721569
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Очередной заглюк: при вызове формы, в которой задаются данные для выполнения View, сначала выскакивают стандартные фоксовые запросы необходимых переменных(т.е. сfam, cimm, cott), а уже после этого поялвяется сама форма.
С чем это может быть связано?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33721610
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katty_aiОчередной заглюк: при вызове формы, в которой задаются данные для выполнения View, сначала выскакивают стандартные фоксовые запросы необходимых переменных(т.е. сfam, cimm, cott), а уже после этого поялвяется сама форма.
С чем это может быть связано?
Это не глюк. Это стандартная логика работы при настройке AutoOpen = .T. Смысл в том, что открытие таблиц происходит до прорисовки элементов формы. Вот на открытие Local View и происходит запрос параметров.

Исправляется это следующим образом:

1) В DataEnvironment формы для курсора Local View делается настройка

DataEnvironment.Cursor1.NoDataOnLoad = .T.

В этом случае Local View откроется, но данными заполняться не будет. Фактически, будет сформирована только структура Local View. Соответственно, не будет и запроса значений параметров.

2) В событии Init-формы делаются присвоения параметрам и перезапрос Local View, если это необходимо

Код: plaintext
1.
2.
3.
4.
5.
6.
m.cFam=...
m.cNam=...
m.cOtt=...
m.ldDtr=... 

REQUERY("kurs_view")
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33722396
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Это не глюк. Это стандартная логика работы при настройке AutoOpen = .T. Смысл в том, что открытие таблиц происходит до прорисовки элементов формы. Вот на открытие Local View и происходит запрос параметров.

Логично. Интересно только, как у меня это отрабатывало раньше, в самом начале.

ВладимирМ
2) В событии Init-формы делаются присвоения параметрам и перезапрос Local View, если это необходимо

Код: plaintext
1.
2.
3.
4.
5.
6.
m.cFam=...
m.cNam=...
m.cOtt=...
m.ldDtr=... 

REQUERY("kurs_view")


Вот этого не поняла. Зачем присваивать параметры в init, усли значения у меня появятся только после того, как я введу их в соответствующие textbox-ы формы?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33722456
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И еще вопрос - прочитала, что представления можно использовать для редактирования основной базы. В том случае, если нужно редактировать уже имеющуюся запись вроде бы понятно - при выполнении запроса в форму выводится нужная запись, редактируется и сохраняется во View и в самой таблице.
А если нужно создать новую запись? Как поступать тогда?

Я тут попробовала обходиться без view, т.е. через форму запроса фамилии, имени, отчества создавала выражение, по которому у меня проиндексирована база. Потом проводила в ней поиск через Seek - и когда запись находилась, передавала её номер во вторую форму. Вторую форму открывала именно на этой записи и редактировала. Все сохранялось.
А вот если записи в базе не существовало, то я добавляла новую запись и открывала вторую форму, в которой все поля получались пустыми.
Как можно передать в новую запись ФИО из формы запроса?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33722650
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не надо ничего специально делать и куда-то, что-то копировать. Просто сам Local View делается "обновляемым". Т.е. изменения в Local View автоматически переносятся в таблицу-источник, на основании которой этот View был построен.

Для этого надо в дизайнере Local View сделать некоторые настройки на закладке Update Criteria.

Ну, и несколько слов о том, что такое буферизация и как она работает во вложенном файле
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33723617
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доигралась. Запрос через форму вообще перестал работать. А в автономном режиме все отбирает великолепно.

Подскажите, что я сделала не так.

Есть форма поиска (4 textbox-а - ФИО, дата рождения). Значение txtdtr.value {}
В ее DE сам View, таблица и словари, по которым создан View. У View NoDataOnLoad=.T.
Текст View не изменился, лишь добавилась проверка по дате рождения.

Поля заполняются. Нажимается кнопка ОК, где прописано:


LOCAL cFam,cImm,cOtt,dDtr

m.cFam=ThisForm.txtfam.value
m.cImm=Thisform.txtimm.Value
m.cOtt=ThisForm.txtott.Value
m.dDtr=ThisForm.txtdtr.Value


REQUERY("kurs_view")
IF reccount("view_kurs")=0
=MESSAGEBOX("НЕ НАЙДЕН!",0)
ELSE
DO FORM expi6
ENDIF

При любом заполнении полей, неважно - есть или нет данные, выводятся данные для первого по списку человека.

И я все-таки не поняла, почему надо присваивать параметры именно в init формы.
Ведь значений еще нет. Они появятся после ввода в textbox-ы.

ВладимирМ

2) В событии Init-формы делаются присвоения параметрам и перезапрос Local View, если это необходимо

Код: plaintext
1.
2.
3.
4.
5.
6.
m.cFam=...
m.cNam=...
m.cOtt=...
m.ldDtr=... 

REQUERY("kurs_view")


Прочитала про буфферизацию. И все равно, не поняла, как поступать с новыми записями.:(
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33724045
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С view разобралась. Ищет и отображает все корректно.

Но вопрос с новой записью остается открытым. Я пока поступаю так, после отработки view, если в базе ничего не найдено, делаю append blank, чтобы появилась возможность для редактирования. Правда ФИО приходится вносить заново, но сохранение проходит вполне корректно. Правда, я еще не пробовала создать там отчет.

Подскажите, верно ли я поступаю? А то из всего прочитанного, у меня получается, что view - это исключительно для редактирования уже существующих записей.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33724845
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
katty_aiС view разобралась. Ищет и отображает все корректно.

Но вопрос с новой записью остается открытым. Я пока поступаю так, после отработки view, если в базе ничего не найдено, делаю append blank, чтобы появилась возможность для редактирования. Правда ФИО приходится вносить заново, но сохранение проходит вполне корректно. Правда, я еще не пробовала создать там отчет.

Подскажите, верно ли я поступаю? А то из всего прочитанного, у меня получается, что view - это исключительно для редактирования уже существующих записей.
Правильно. Новая запись создается непосредственно во View. Далее по команде TableUpdate() происходит сброс буфера и собственно создание записи в исходной таблице.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33725544
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi katty_ai!

1) Во View обязательно уточни имена переменных-параметров, не ?cFam, а
?m.cFam - иначе фокс будет брать не значения твоих переменных, а поля из
того-же самого курсора.

2) View замечательно работает и для ввода новых записей. Главное его
правильно настроить! В частности не желательно делать обновлемыми более чем
1 таблицу (из-за того что в таком случае логика обновления заметно сложнее и
простого пользователя часто вводит в тупик - он поменял в одной записи
Иванова на Петрова, а ФИО поменялось во всех записях где был Иванов...)
Обязательно надо указывать ключевое поле. И кроме того если значение для
ключевого поля формируется программно (скажем через функцию типа NewID), то
будет проще, если вызов этой функции прописать в DefaultValue для поля
представления (помимо того что оно уже прописано для поля самой таблицы) -
т.е. мы будем получать новое корректное значение ключа ещё ДО сохранения
новой записи. Также не следует смешивать в одной форме работу с курсором
LocalView и с собственно базовой таблицей (из которой этот View берёт
данные) - если уж совсем никак без этого (хотя это обычно лишь недостаток
опыта, а не реальная потребновть так делать) - то придётся КРАЙНЕ
внимательно проверять всю последовательность действий с курсорами.

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33730769
Adic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМНе надо ничего специально делать и куда-то, что-то копировать. Просто сам Local View делается "обновляемым". Т.е. изменения в Local View автоматически переносятся в таблицу-источник, на основании которой этот View был построен.

Для этого надо в дизайнере Local View сделать некоторые настройки на закладке Update Criteria.

Ну, и несколько слов о том, что такое буферизация и как она работает во вложенном файле

Владимир, скачиваемый файл не открываеться, пишет что поврежден. Можно другую ссылочку дать, хотелось бы почитать.
И можно по подробнее, а каких некоторых настройках на закладке Update Criteria вы говорите...
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33730813
Adic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир, скажите пожалуйста, где можно найти инфу (статьи ваши, если есть) по LV, а то на http://www.foxclub.ru/ в статьях нету этого, а здесь на форуме не могу найти то, что меня интересует.
Заранее благодарен. :)
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33730858
Sergey Sizov.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да не может быть! А это все кто написАл?
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33730950
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AdicВладимир, скачиваемый файл не открываеться, пишет что поврежден. Можно другую ссылочку дать, хотелось бы почитать.
Здесь (в этой теме) приложен файл TXT. Это вообще не архив. Его не надо открывать архиватором. Читайте напрямую в блокноте (Notepad) или любым имеющимся текстовым редактором. Только что скачал без проблем.

AdicИ можно по подробнее, а каких некоторых настройках на закладке Update Criteria вы говорите...
Сделайте поиск по этому форуму по словам "Update Criteria". Много раз приводились и писались.
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33732900
Adic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ВладимирМ
Спасибо за ответ )))
...
Рейтинг: 0 / 0
Как указать, что в представлении ничего не отобрано?
    #33750824
katty_ai
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня очередной вопрос.
Обновление/добавление проходит нормально. А как бы мне сделать, чтобы после того, как данные добавились, у меня textbox-ы формы, к которой привязан view очищались?
...
Рейтинг: 0 / 0
25 сообщений из 25, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Как указать, что в представлении ничего не отобрано?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]