|
|
|
| Всем доброго времени суток!
Имеется база данных Access, в которой есть столбец ФИО. Можно ли сделать так, чтобы при вводе именно в этот столбец данных, которые в этом столбце уже есть они выделялись красным цветом? Ну или как угодно еще оповещал о повторе?
Версию, к сожалению, не посмотрел.
Заранее благодарю! | |
|
| |
|
|
|
| Не можно, а нужно. Но желательно разделить. Фамилия - отдельное поле, Инициалы - в отдельное. Далее пол, дата рождения, так как фамилия с инициалами может быть одна и та же на разных лиц, лучше уж вводит их в поле, а по этим полям чуток ниже список, в котором будут появляться введенные.
Ввел в поле Иванов, и все Ивановы появляются в списке. Ввел инициалы, и все ИВановы с такими инициалами отсеялись. Там уж можно будет выбрать какой нужен по дате рождения, полу.
Рыженко И.В. - Ирина Владимировна, Игорь Вадимович. По полу отсеются либо те, либо другие.
Не стоит одного и того же вводить 2 и более раз. | |
|
| |
|
|
|
| База в виде таблицы. Вариант переделать отпадает отдельно фамилию, отдельно имя и отчество отпадает, да и пола там нет.
Там столбцы:
1. номер по порядку.
2. название организации.
3. ФИО
4. дата
ну и т.д.
Если можно, то прям по пунктам, как сделать чтобы оповещал об одинаковых значениях только в столбце ФИО? | |
|
| |
|
|
|
| Пусть считает через count и если больше 1, то оповещает msgbox | |
|
| |
|
|
|
| Звучит здорово, но.... Я ничего не понял.
Не мог бы очень подробно описать куда нажимать, где что выбирать? | |
|
| |
|
|
|
| А не проще поставить на столбец уникальный ключ, и Access сам ругаться будет | |
|
| |
|
|
|
| Count - это счетчик для запроса с группировкой
select fio, count(1) as Kol_vo from fio group by fio
посчитает кол-во однофамильцев.
2 Ramzes - а как быть с полными тезками Иванов Иван Иванович. - и фиг ключ позволит ввести второго такого.
в Вашем случае можно ФИО отсекать до первого пробела - получим Фамилию и по ней делать остальной поиск.
mid(fio,1,(instr(fio," ")-1))
трохы подумав - повтор данных контролировать надо не фамилией, а идентификационным кодом. | |
|
| |
|
|
|
| Вопрос в том, зачем нужно определять, есть повтор или нет. Если его надо определять в момент ввода ФИО при создании новой записи, тогда можно использовать поле со списком, список в котором формировать запросом на группировку по полю ФИО из той же таблицы, в которую Вы данные заносите. В этом случае, если еще на событие контрола "Изменение" навесить код
[Ваш контрол, где ФИО].Dropdown, при вводе очередных ФИО список сам будет услужливо подгонять самого похожего ФИО. А при переходе к след. записи - сделать Requery поля, где ФИО
А если нужно, чтобы все-таки красным - тогда "Условное форматирование". (Если А-2003 и выше)
Пример: DCount("От";"ЗАКУПКИ";"От='" & [От] & "'")>1 выделит нужным цветом в поле те "ячейки", содержимое которых встречается >1 раза в поле "От" таблицы "ЗАКУПКИ" при условии, что взяты не все записи из таблицы ЗАКУПКИ, а только те, значение которых равно искомому | |
|
| |
|
|
|
|
| Начали с фамилии, закончили складом.
Повторы всегда будут. Лучше ФИО, инициалы, пол, дату рождения вводить в отдельные поля. Причем в таблицу должно попадать либо по маске ввода, либо после функции Trim, дабы исключить лишние пробелы спереди и сзади. Юзвери любят одного и того же Иванова вводить с пробелом впереди, потом с двух пробелов, потом еще пробел сзади поставить. Извращаются как хотят. Кроме того, желательно обработку UCase поставить чтобы все буквы были прописные, или через left только первую, а остальные строчные.
Классификация клиента должна проходить не только по фамилии, а по всем параметрам вышеперечисленным. Отсеиваться в списке по ходу ввода. Иванов - все ивановы в списке. Инициалы И.И. - все ивановы и.и. со своими датами рождения и т.д.. Если нужный есть, щелкнуть по нему и продолжать работу дальше. Нет - пустой список - предложение проги ввести нового клиента. Если вводим, msgbox должен спросить, показав все введенное, типа точно ли этого кренделя, или где-то ошибка? Потом еще алгоритм правки этого кренделя придумать надо, чтобы через правку не получилось одного и того же 2 раза завести. | |
|
| |