• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

Проверка На Существующую Запись В Базе

  • Автор темы JohnLemon
  • Дата начала
Статус
Закрыто для дальнейших ответов.
J

JohnLemon

Здравствуйте, подскажите пожалуйста! Есть форма c полями Фамилия(fLastName), Имя, Отчество, необходимо @ формулой проверить есть ли уже в базе такая фамилия. Как реализовать, я так понимаю это делается через DBLooup но у меня почему то не получается
 
T

ty3uk

для того чтобы @DBLookUp работал, нужна спец вьюха, по которой вы будете делать поиск. Соотвественно, в этой вьюхе, первой колонкой, делаете фамилию (колонка, обязательно, первая и сортированная!), и натравливаете @-ку на данную вьюху (ключём, естественно, ставите фамилию из текущего документа). При этом, стоит сразу задуматься о том моменте, что @-бака найдёт и ваш документ, после первого сохранения. Для этого, стоит подумать о том как отделить мух от котлет. Как вариант, требовать от @-ки возращение UniversalID документа (посмотрите последний параметр), и, проверять, если в списке возращёных, есть что-то не равное нам, то, ошибка.
 

savl

Lotus Team
28.10.2011
2 599
311
BIT
192
первой колонкой, делаете фамилию (колонка, обязательно, первая и сортированная!)
Иванов Сергей, Иванов Виктор, Иванов Гарик... Продолжить? =)
Первая колонка: <поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>
Результат: Иванов~Виктор~Алексеевич (не панацея, но уже лучше)
Формула:
Код:
sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
res
В результате в res будет UNID документа или список UNID'ов.
Ограничение 32К...

Я бы всё это сделал на LS и использовал в событии QuerySave на форме.
 
T

ty3uk

Я бы всё это сделал на LS и использовал в событии QuerySave на форме.
Мне кажется все так делают. А то что только фамилия так автор сам сказал, я даж задней мыслью не подумал. Ну да, есть у нас одна конторка, там, вообще, семейные кланы работают (Сергей Михалыч, Михаил Сергеич и т.д. жесть...)
 
J

JohnLemon

Иванов Сергей, Иванов Виктор, Иванов Гарик... Продолжить? =)
Первая колонка: <поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>
Результат: Иванов~Виктор~Алексеевич (не панацея, но уже лучше)
Формула:
Код:
sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
res
В результате в res будет UNID документа или список UNID'ов.
Ограничение 32К...

Я бы всё это сделал на LS и использовал в событии QuerySave на форме.
Примерно так и сделал только мн непонятно почему "1" что за параметр, и для чего [RETURNDOCUMENTUNIQUEID]
 

Darkhan

Green Team
14.12.2012
99
2
BIT
0
[RETURNDOCUMENTUNIQUEID] нужен для возвращения UniversalId записей, подходящих по критериям поиска. Это вам надо, чтобы исключить из результатов поиска текущий документ. В итоге формула должна выглядеть примерно так:
Код:
sKey:=<поле с фамилией> + {~} + <поле с именем> + {~} + <поле с отчеством>;
res:=@DbLookup( "": "NoCahe"; @DbName; <имя представления>; sKey; "1"; [RETURNDOCUMENTUNIQUEID]);
@If(@Trim(@Replace(res; @Text(@DocumentUniqueId); ""))=""; "netu sovpadenij"; "est' sovpadeniya")
 

savl

Lotus Team
28.10.2011
2 599
311
BIT
192
JohnLemon
"1", потому что параметр должно быть имя поля или номер колонки, но мы возвращаем UNID's записей, поэтому можно вставить любое значение.
 
Статус
Закрыто для дальнейших ответов.
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!