|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Приветствую! У меня возникли затруднения с выполнением следующего задания по Visual FoxPro 6) Дополнить структуру каждой таблицы с помощью Конструктора таблиц следующим образом: для каждого поля каждой таблицы заполнить поле Caption, несколько полей каждой таблицы должны иметь значение по умолчанию (Default value), контроль вводимых значений (Rule) и маску ввода (Input Mask). У меня проблема с полем Rule, в котором записывается правило ввода полей таблиц. Работаю я с таблицей Методические пособия. Туда входят поля: "Код методического пособия", "Название", "Автор", "Год издания" и "Общее количество экземпляров на кафедре". Правило ввода я решил сделать следующим образом. Код методического пособия и общее количество экземпляров на кафедре должно быть больше нуля; название пособия должно превышать один символ; поле автор, вместе с его фамилией и инициалами, должно превышать семь символов; контроль ввода года издания пособия по стандарту – от 1970 до 2009 включительно. В связи с этим поле Rule должно иметь следущее содержание: cdbook>0+langth(title)>1+langth(author)>7+ (1970<=year<2010)+many>0 При нажатии кнопки Ок, мне выдается ошибка о том, что файл langth.prg не найден, хотя это вовсе не файл, а команда, проверяющая длину слова. При нажатии кнопки Ок, мне выдаётся ещё одна ошибка следующего содержания: "Field CDBOOK validation rule is violated". Т.е. Правила подтверждения Области CDBOOK нарушены. А почему?... Пробовал переводить cdbook в строковый тип, пишет ошибку о несоответствии типов... Скажите, пожалуйста, как правильно мне оформить запись в поле Rule? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2009, 15:41 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Сергунcdbook>0+langth(title)>1+langth(author)>7+ (1970<=year<2010)+many>0 То есть Вы считаете, что логические данные можно складывать арифметически, а не логически? И какой результат ожидается от .t.+.f.? Может таки надо применять AND? При нажатии кнопки Ок, мне выдается ошибка о том, что файл langth.prg не найден, хотя это вовсе не файл, а команда, проверяющая длину слова. В фоксе нет такой команды. Но есть функция и она пишется несколько по-другому - len() ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2009, 16:13 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Давайте поэтапно разберемся сначала с этим. Сергун В связи с этим поле Rule должно иметь следущее содержание: cdbook>0+langth(title)>1+langth(author)>7+ (1970<=year<2010)+many>0 При нажатии кнопки Ок, мне выдается ошибка о том, что файл langth.prg не найден, хотя это вовсе не файл, а команда, проверяющая длину слова. Опишите как описывается вами пользовательская функция langth(). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2009, 16:48 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Сергун В связи с этим поле Rule должно иметь следущее содержание: cdbook>0+langth(title)>1+langth(author)>7+ (1970<=year<2010)+many>0 При нажатии кнопки Ок, мне выдается ошибка о том, что файл langth.prg не найден, хотя это вовсе не файл, а команда, проверяющая длину слова. Нет в фоксе такой функции langth(). Есть для этого функция len(). ... |
|||
:
Нравится:
Не нравится:
|
|||
18.03.2009, 18:03 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Прошу прощения... Просто на многих языках есть зарезервированная функция langth(), возвращающая длину строки... А про Visual FoxPro я не нашёл про это и подумал также... У меня по заданию нужно ещё заполнить поле Default value, в котором хранится значение, принимаемое полем по умолчанию. Вот там я применял сложение, а в поле Rule значит сложение неприемлемо?... Значит содержимое этого поля должно быть следующим: cdbook>0 and lan(title)>1 and lan(author)>7 and (1970<=year<2010) and many>0 Спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 07:42 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Прошу прощение... Вместо lan() - len()... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 07:43 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Ничего не пойму... Написал исправленный вариант: cdbook>0 and lan(title)>1 and lan(author)>7 and (1970<=year<2010) and many>0 Но всё равно выдаётся ошибка о несоответствии типов и что Правила подтверждения Области CDBOOK нарушены... Почему?... P.S. Строка у меня преобразилась в следующий вид: cdbook>0.AND.LAN(title)>1.AND.LAN(author)>7.AND.(1970<=year<2010).AND.many>0 Скажите, пожалуйста, что можно сделать с полем cdbook? Пробовал перевести в строковый тип, не помогает... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 08:57 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Попробовал написать вот так: cdbook>0.AND.LAN(title)>1+LAN(author)>7.AND.(1970<=year<2010)+many>0 Тоже самое... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 09:14 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
У тебя сообщение об ошибке следует читать так: выражение, записанное в RULE поля CDBOOK вернуло "ложь". Все дело в том, в какой именно момент происходит вычисление выражения RULE. Точнее, какие именно значения у всех остальных полей, указанных в этом выражении на момент его вычисления. Так вот, RULE поля выполняется сразу же в момент изменения значения этого поля. Вне зависимости от того, успели измениться значения других полей или нет. Например, ты меняешь значение полей CDBOOK и TITLE. Но проблема в том, что на момент выполнения RULE будет изменено только значение CDBOOK, а до поля TITLE дело просто не дойдет. Поэтому, такие сложные выражения RULE надо записывать не в проверку одного поля, а в проверку всей записи. В дизайнере таблицы это на закладке Table раздел "Record Validation" Подробнее читай здесь Правила (Rule) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 09:17 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Простите за невнимательность... Функция LEN() там... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 09:20 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
СергунПопробовал написать вот так: LAN(author)>7.AND.(1970<=year<2010) 1. Что такое LAN() 2. Откуда взят такой способ сравнения? Имеется в виду 1970<=year<2010? Не пробовали по-отдельности каждое условие посмотреть? Например, взять и написать: Код: plaintext
... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 09:42 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Проходящий спасибо! Я уже сам в этом разобрался... Просто постепенно начал писать правила для полей и выяснил ошибку... Вот теперь мне надо сделать следующее. Дополнить программу, выполняющую создание структуры таблиц таким образом, чтобы вначале создавалась база данных, затем структура таблиц, затем создавались индексы и отношения между таблицами. Для созданной базы данных вызвать конструктор. Совет: данную программу лучше хранить и запускать в отдельном каталоге. Я так понимаю, это програмный код писать надо?... Как его написать, я знаю! Вопрос: Куда?... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 14:19 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Сергун[Я так понимаю, это програмный код писать надо?... Как его написать, я знаю! Вопрос: Куда?...В текстовый файл с раcширением .prg, который, обычно, создается сам по команде modify command. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 14:33 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
авторЯ так понимаю, это програмный код писать надо?... Как его написать, я знаю! Вопрос: Куда?... обычно делаем абсолютно наоборот. в дизайнере рисуем БД, таблички, связи и затем натравливаем на готовую БД утилиту gendbc.prg и получаем код для создания БД. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 14:35 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Код: plaintext 1. 2. 3.
выполните в коммандном окне, посмотрите что получилось ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 14:47 |
|
Проблема с полем Rule при дополнении структуры таблиц.
|
|||
---|---|---|---|
#18+
Спасибо огромное!!! Посмотрю... Ещё бы мне хотелось уточнить. Я перечитал задание и обратил внимание на это: " для каждого поля каждой таблицы ...". Вот то, что я сделал - это применится для всей таблицы или нужно каждое поле выделить и заполнить нужные поля? Или это будет одно и тоже?... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.03.2009, 14:59 |
|
|
start [/forum/topic.php?fid=41&msg=35877514&tid=1586658]: |
0ms |
get settings: |
8ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
4ms |
track hit: |
46ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 164ms |
0 / 0 |