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

Есть таблица:
|Фамилия мастера| Дата назначения|

На форме есть ComboBox, в котором выводится список фамилий мастеров.
А в TextBox'e пользователь вводит нужную ему дату. Дак вот, как сделать проверку, чтобы дата назначения у мастера не повторялась.
Например:
Выбрали мастера: Пупкин
Назначили дату: 12/12/05
Потом выбрали снова: Пупкин
Но дата уже должна быть другой.
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33020360
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если в таблице нет других полей, то, очевидно, пара этих составляет (и должна быть определена как) первичный ключ таблицы.
Если есть какой-нибудь ID, который является первичным ключом, то пара этих полей будет составлять (и должна быть определена как) кандидатный ключ.
В любом случае, при наличии таких определений в таблицу дублирующие данные не попадут. Ошибку сохранения можно отловить в форме и интерпретировать так, как нужно из контекста.
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33020565
kms_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Приветик!

А можно еще в лоб в самой форме в текстбоксе метод Valid осуществить проверку, и если такое уже есть, то сообщить об этом пользователю и предоставить возможность ввести еще раз или отменить ввод.
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33020579
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi kms_!

Делать такую проверку, кстати, более дружелюбно по отношению к пользователю. Но необходимости существования ключа в таблице (PK or Candidate) наличие такой проверки не отменяет.
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33031519
Igor Korolyov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hi Urri!

Такая проверка не гарантирует уникальности - при совместной работе
наскольких пользователей, вполне вероятна ситуация, что два пользователя
внесут одинаковые записи - а проверка этого не увидит.

Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33031895
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Игорь!
Igor Korolyov
Такая проверка не гарантирует уникальности - при совместной работе
наскольких пользователей, вполне вероятна ситуация, что два пользователя
внесут одинаковые записи - а проверка этого не увидит.
На всякий случай (чтобы не быть неправильно понятым, поскольку Игорь мне намекает, что такая вероятность есть ;-)), перепишу свое последнее сообщение по-другому.

Делать такую проверку, кстати, более дружелюбно по отношению к пользователю, чем не делать ее (а не чем использовать ключи). Потому что проверка сработает сразу (конечно, не всегда она сработает, о чем Игорь предупреждает, но чаще сработает, чем нет), а ошибка вставки по причине неуникальности индекса придет не сразу (не придет, пока данные в таблице не захотят обновиться). Скажем,
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
CREATE CURSOR t1 (f1 c( 1 ) NOT null)
INDEX on f1 TAG f1 candidate
SET MULTILOCKS ON
CURSORSETPROP("Buffering" ,  5 )
INSERT INTO t1 VALUES ("A")
INSERT INTO t1 VALUES ("B")
INSERT INTO t1 VALUES ("C")
TABLEUPDATE(.t.)
CURSORSETPROP("Buffering" ,  3 )
GO  3 
BROWSE last
Ну и попробуем изменить "C" на "B". И все прекрасно получится, и пока мы не покинем запись 3, мы не получим сообщений об ошибке.
Ну а если мы сделаем, скажем, так:
Код: plaintext
1.
BROWSE fields f1 :v=(MyCheckFunction(varread(),EVALUATE(varread()))) ;
  :e=EVALUATE(varread())+" already exists"
, MyCheckFunction сами напишем, как нам надо, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
FUNCTION MyCheckFunction
lparameters pvarname, pvalue
local lRetVar, lIsDouble
if pvarname="F1"
  lIsDouble = .F.
  select .T. from t1 into array lIsDouble where &pvarname.=pvalue
  lRetVar = lIsDouble( 1 ) = .F.
  select  1  from 
else
  lretvar=.t.
endif
return lretvar
Ну - или как-то так ;-))) - то проверка сработает раньше, чем мы покинем запись. А уже после занесения неверных данных в поле и попытки выода из него. Пользователь сразу узнает, что ему не стоит вводить остальные данные. Вот в чем дружелюбие. Но оно должно быть не вместо, а вместе с индексом .
Кстати, лично я такие функции очень редко пишу. Я - недружелюбный ;-)))
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33031924
Фотография ВладимирМ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще-то, подобный вопрос повторяется достаточно регулярно. Вкратце.

Контроль уникальности данных для НЕ ключевых полей в процессе записи в таблицу можно обеспечить 2 способами:

Индекс типа Candidat с FOR-условием, отсекающим записи помеченные как удаленные, а также все те записи в которых не надо контролировать уникальность. Например, надо пропустить клиентов для которых код ИНН вообще не введен, хотя таких "пустых" записей может быть много

Триггер на вставку и модификацию, при условии существования индекса по контролируемому полю (любого индекса, достаточно обычного Regular). Наличие индекса заблокирует модификацию данных другими пользователями пока идет проверка триггера (внутри транзакции), что и обеспечит контроль уникальности.

Вопрос контроля данных в процессе ввода (до попытки их сохранения в таблицах) зависит от конкретной задачи.

Запретительный контроль процесса ввода - крайне неразумное решение. Если уж делать такой контроль, то только как рекомендательный. Просто сообщение без каких-либо санкций. А вот при попытке сохранить изменение контроль только и исключительно запретительный.
...
Рейтинг: 0 / 0
Проверка на повторение в TextBox'e?
    #33032424
Urri
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Приветствую, Владимир!

Как всегда, "объяснил, как по полкам разложил".
Кто ясно мыслит, тот ясно излагает.
Спасибо! ;-)
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Проверка на повторение в TextBox'e?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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