Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Условие достоверности / 15 сообщений из 15, страница 1 из 1
09.03.2006, 16:53
    #33590515
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Подскажите плиз студенту.
В таблице есть поле Фамилия и отдельно поле Инициалы. Как оформить в таблице на поле фамилии условие достоверности данных на уровне записи?
Заранее благодарен.
...
Рейтинг: 0 / 0
09.03.2006, 16:56
    #33590530
chukcha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Не дано в одно поле сделать и фамилию и инициалы.
...
Рейтинг: 0 / 0
09.03.2006, 16:59
    #33590543
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
К сожалению нет.(По условию задачи)
...
Рейтинг: 0 / 0
09.03.2006, 17:10
    #33590581
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Так кто-нибудь поможет ?
...
Рейтинг: 0 / 0
09.03.2006, 17:10
    #33590582
chukcha
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
А можно сделать, так чтобы фамилия была в одной таблице а отчество в другой?
...
Рейтинг: 0 / 0
09.03.2006, 17:19
    #33590629
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
murzВ таблице есть поле Фамилия и отдельно поле Инициалы. Как оформить в таблице на поле фамилии условие достоверности данных на уровне записи?
Ну, так и оформить.

Пишется хранимая процедура, которая должна вернуть .T., если все в порядке и .F., если нет. Вызов этой процедуры делается в RULE на запись. В дизайнере даблицы - это закладка "Table", раздел "Record Validation"
...
Рейтинг: 0 / 0
09.03.2006, 17:26
    #33590647
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Если можно про процедуру поподробнее
...
Рейтинг: 0 / 0
09.03.2006, 17:40
    #33590686
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
murzЕсли можно про процедуру поподробнее
А это уж Вам виднее, что именно в ней должно быть. Что именно Вы подразумеваете под фразой "условие достоверности". Какие именно условия?

Если имеется в виду, где она должна быть, то в окне проекта открываете закладку Data - Ваша база данных (файл DBC) - Stored Procedure.

Нажимаете кнопку Modify и в открывшемся окне в самом верху (или в самом низу) начинаете создавать процедуру, что-то вроде

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
FUNCTION CheckFIO
* Собственно процедура, которая формирует значение
* логической переменной
LOCAL llSuccess
IF (...)
	llSuccess = .T.
ELSE
	llSuccess = .F.
ENDIF
RETURN m.llSuccess
ENDFUNC

В дизайнере таблицы на закладке Table в раделе Rule пишете

CheckFIO()

Без кавычек и знаков равенства.
...
Рейтинг: 0 / 0
09.03.2006, 17:41
    #33590698
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Меня конкретно интересует текст процедуры Это что посимвольное сравнение строки с символами алфавита ,или что-то другое?
...
Рейтинг: 0 / 0
09.03.2006, 18:33
    #33590879
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
murzМеня конкретно интересует текст процедуры Это что посимвольное сравнение строки с символами алфавита ,или что-то другое?
Ну, так опиши словами, что именно входит в понятие "условие достоверности"?

Что ты под этим подразумеваешь? Что кодить-то надо? Как я должен проверять на "достоверность" фамилию и инициалы?
...
Рейтинг: 0 / 0
09.03.2006, 19:49
    #33591019
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Фамилия -это поле (С20) Условие достоверности на ввод фамилии(вводить можно только одно слово без разрывов с большой буквы состоящее из букв русского алфавита)
...
Рейтинг: 0 / 0
09.03.2006, 19:57
    #33591035
?
?
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
murz
Фамилия -это поле (С20) Условие достоверности на ввод фамилии(вводить можно только одно слово без разрывов с большой буквы состоящее из букв русского алфавита)


Это сравнение на - введена/не введена фамилия или сравнение с какими-эталонами фамилий, хранящимися, например - в другой таблице?
...
Рейтинг: 0 / 0
09.03.2006, 20:06
    #33591050
murz
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Это проверка правильности ввода.
Например введено правильно :
"Меньшиков"
" Меньшиков"
"Меньшиков "
введено неправильно : " М_еньшиков"
" Меньшиков."
"-Меньшиков"
...
Рейтинг: 0 / 0
09.03.2006, 22:28
    #33591205
ВладимирМ
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
murzФамилия -это поле (С20) Условие достоверности на ввод фамилии(вводить можно только одно слово без разрывов с большой буквы состоящее из букв русского алфавита)
Какие действия, в случае обнаружения ошибки?

-) Автоматически исправлять
-) Исправить то, что можно, а что нельзя - выдать сообщение об ошибке
-) Ничего не исправлять, только выдать сообщение об ошибке

Некоторые настройки не позволят совершить ошибки, например:

Format = "T" - автоматически отсекает ведущие пробелы при вводе значения. При установке этого реквизита в дизайнере таблицы для нужного поля кавычки, разумеется, не нужны.

Эта настройка может быть перекрыта в объекте формы.

В RULE допустимо модифицировать данные, например, если поле с фамилией называется Familia, то

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
FUNCTION CheckFIO
* Записываю в переменную значения поля
LOCAL lcFamilia
lcFamilia = Familia

* Каждое слово строки начинается с заглавной буквы
lcFamilia = PROPER(m.lcFamilia)

* Исключение всех пробелов в любом месте строки
lcFamilia = ChrTran(m.lcFamilia, " ", "")

* Запись результата преобразования
REPLACE Familia WITH m.lcFamilia

RETURN .T.
ENDFUNC

Можете написать свои преобразования или проверки. Например, в данном случае я просто убрал пробелы и если было введено два слова, то получится одно. Но можно предварительно сделать проверку на количество слов (функция GetWordCount() - появилась с версии VFP7) и выдать сообщение об ошибке, если более одного слова.

Кстати, далеко не факт, что два слова - это ошибка. Как быть с составными фамилиями: Новиков-Прибой, Панкратов-Черный, Миклухо-Маклай.

Не все слова в фамилии могут начинаться с заглавной буквы: о'Генри, де Сент-Экзюпери

Собственно, единственное, что можно сделать автоматически - это отсечь ведущие пробелы. Все остальное - это скорее рекомендация, чем правило. По принципу, "скорее всего, надо писать так"
...
Рейтинг: 0 / 0
10.03.2006, 00:19
    #33591316
Igor Korolyov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие достоверности
Hi murz!

* Есть "неправильные" символы
LEN(CHRTRAN(name, "тут перечисли все допустимые в фамилии буквы и ПРОБЕЛ",
"")) # 0

* Более одного "слова" - слова разделены пробелами, или вообще пусто
GETWORDCOUNT(name, " ") # 1

Хотя если быть точным, то фамилии вполне могут состоять и из 2-х частей и
дефис там довольно часто бывает... Так что лучше наверное не жёстко
прописывать "правило" (ибо его потом никак не обойти) - причём правило
уровня поля а не всей записи - а прописать вызов функции проверки в
интерфейсе, и "подсветить" потенциально ошибочное значение, или там вывесить
надпись, в худшем случае Messagebox вывести с подтверждением что "так и
надо".

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Условие достоверности / 15 сообщений из 15, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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