178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
||||||
1 | ||||||
Как при добавлении записи в DataGridView избежать повторения по какому-либо полю?14.09.2016, 10:26. Показов 1814. Ответов 9
Метки нет (Все метки)
Всем здравствуйте.
DataGridView заполнена записями таблицы БД MSAccess без использования Binding Source. Добавление записи выглядит так:
Перебором всех существующих записей с анализом содержимого поля Name? Или есть другой способ?
0
|
14.09.2016, 10:26 | |
Ответы с готовыми решениями:
9
Создаются какие либо записи в реестре, при добавлении закладок на панель избранного в IE 8/9? Обновление DataGridView при добавлении записи через запрос Поместить список файлов текущего каталога в текстовый файл и в зависимости от ключа сортировать по какому-либо полю Как избежать утечки памяти при добавлении элемента в TSet |
Модератор
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
|
|
14.09.2016, 14:45 | 2 |
Сообщение было отмечено jkrnd как решение
Решение
jkrnd, можно задать уникальность строки, и вставлять через INSERT IGNORE... чтобы исключений не вызывало. относительно access правда не знаю какой SQL запрос нужен. погуглите...
а если нет, то да, делаете выборку этой колонки, проверяете нв наличие такого имени и там уже делаетк выводы соответствующие
2
|
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
|
||||||
14.09.2016, 15:38 | 3 | |||||
Сообщение было отмечено jkrnd как решение
Решение
Это фишка MySql.
Ни в MSSQL , ни тем более в Access этого нет. Можно реализовать с помощью MERGE , но придётся писать достаточно приличный скрипт. В Аccess эта задача реализуется самим Access : В конструкторе таблиц устанавливаете значение "индексированное поле" в значение "Да, совпадения не допускаются" и всё. Ассеss сам будет проверять повторы. Ну а VB код оборачиваете в Try Catch , чтобы ошибки вставки не доставали.
1
|
Модератор
4203 / 3287 / 497
Регистрация: 27.01.2014
Сообщений: 6,033
|
|
14.09.2016, 16:20 | 4 |
Kulma, нет, INSERT IGNORE не только в MSSQL работает...
Вот как я такую же проблему решал в срседней теме на SQL LITE Как загрузить 200K строк типа String в базу SQLite максимально быстро? Добавлено через 1 минуту добавлю и повторюсь, что для таблицы нужно уникальность строки настроить по нужным колонкам... В каждой СУБД это выполняется по разному
1
|
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
|
|
14.09.2016, 16:28 | 5 |
Yury Komar, да, вы правы, моя оплошность, сорри.
SQlite из головы вылетел , вот и не упомянул его. Не по теме: У SQLite и MySQL вообще диалект SQL очень схожи. И про уникальность всё верно , просто в Access ,в отличии от большинства скульных баз, гораздо проще это настроить в конструкторе, чем прописывать ручками. Вот мне и решилось разъяснить более детально процесс , чтобы избежать непонимания со стороны ТС
2
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
14.09.2016, 16:54 [ТС] | 6 |
Kulma, Всё работает спасибо. только перед выходом по ошибке закрываю соединение, а то при первой ошибке ничего добавить уже никогда не получится. Избавили меня от перебора записей. Я до этого думал что в таблице может быть только одно индексированное поле.
0
|
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
|
||||||
14.09.2016, 17:25 | 7 | |||||
Сообщение было отмечено jkrnd как решение
Решение
jkrnd, да не за что ))
Касаемо "избавили от перебора..." , Юрий предложил ранее то же решение , я только развернул его относительно Access )) Про соединение - я забыл включить его в Exception,вы всё верно сделали. А вот чтобы об этом голова не болела , создайте отдельную процедуру подключения и делайте в ней проверку , что-то типа такого ( я не буду код к правилам подключения к Access-лень, просто приведу кусок своего кода )) ,думаю вы сами по аналогии разберётесь. А потом , когда в коде потребуется подключение к БД просто вставляете эту процедуру.
2
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
14.09.2016, 17:33 [ТС] | 8 |
0
|
1136 / 881 / 152
Регистрация: 25.07.2015
Сообщений: 1,959
|
||||||
14.09.2016, 17:39 | 9 | |||||
Нет, у ваc же соединение открывается con.Open()
Вот вместо него и используйте процедуру с проверкой а-ля Connect_DB() А остальное как всегда : Закрываем как обычно con.Close Ну и не забываем вставлять con там где это необходимо :
1
|
178 / 68 / 13
Регистрация: 22.12.2015
Сообщений: 2,648
|
|
14.09.2016, 17:51 [ТС] | 10 |
Kulma, я так и понял.
0
|
14.09.2016, 17:51 | |
14.09.2016, 17:51 | |
Помогаю со студенческими работами здесь
10
Как избежать повторения? Как избежать повторения строк? нарушение прав доступа при записи. объясните, почему? и как избежать? Как избежать повторения черного экрана после логина вместо рабочего стола в Windows 10 Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |