Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic .NET
Войти
Регистрация
Восстановить пароль
 
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,473
#1

Как при добавлении записи в DataGridView избежать повторения по какому-либо полю? - Visual Basic .NET

14.09.2016, 10:26. Просмотров 253. Ответов 9
Метки нет (Все метки)

Всем здравствуйте.
DataGridView заполнена записями таблицы БД MSAccess без использования Binding Source.
Добавление записи выглядит так:
vb.net
1
2
3
4
5
6
    Sub AddRecord()
        SqlCom = New OleDb.OleDbCommand("INSERT INTO [Kadr] ([Name], [BDate]) VALUES ('" & sName & "', '" & dtBDay & "')", Con)
        Con.Open()
        SqlCom.ExecuteNonQuery()
        Con.Close()
    End Sub
Как избежать повторяющихся записей, например по полю Name таблицы Kadr.
Перебором всех существующих записей с анализом содержимого поля Name? Или есть другой способ?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.09.2016, 10:26
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Как при добавлении записи в DataGridView избежать повторения по какому-либо полю? (Visual Basic .NET):

MS Sql: при добавлении новой записи, информация из первой записи в таблице исчезает
Ошибка заключается в том, что при добавлении новой записи(через программу),...

Как создать в форме новый столбец в DGV Form3, при добавлении новой записи в таблице Form1
Здравия желаю! Проблема такова: есть у меня несколько форм ( Form1 , Form2,...

Обновление данных в DataGridView при добавлении записей в БД
Я установил DataGridView1 на форму, через его свойство DataSourse подключил к...

Ошибка при добавлении записи в БД
Здравствуйте! Суть проблемы такова Пишу телефонный справочник и пытаюсь...

Ошибка при добавлении записи в БД
На изображении

При добавлении строк в таблицу данные перестают отображаться в DataGridView
Вобщем вот код: Dim connnectionstring As String ="Data...

9
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,898
Завершенные тесты: 1
14.09.2016, 14:45 #2
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, можно задать уникальность строки, и вставлять через INSERT IGNORE... чтобы исключений не вызывало. относительно access правда не знаю какой SQL запрос нужен. погуглите...
а если нет, то да, делаете выборку этой колонки, проверяете нв наличие такого имени и там уже делаетк выводы соответствующие
2
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
14.09.2016, 15:38 #3
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

Цитата Сообщение от Yury Komar Посмотреть сообщение
INSERT IGNORE
Это фишка MySql.
Ни в MSSQL , ни тем более в Access этого нет.
Можно реализовать с помощью MERGE , но придётся писать достаточно приличный скрипт.
В Аccess эта задача реализуется самим Access :
В конструкторе таблиц устанавливаете значение "индексированное поле" в значение "Да, совпадения
не допускаются" и всё. Ассеss сам будет проверять повторы.

Ну а VB код оборачиваете в Try Catch , чтобы ошибки вставки не доставали.
vb.net
1
2
3
4
5
6
7
8
Try
    SqlCom = New OleDb.OleDbCommand("INSERT INTO [Kadr] ([Name], [BDate]) VALUES ('" & sName & "', '" & dtBDay & "')", Con)
        Con.Open()
        SqlCom.ExecuteNonQuery()
        Con.Close()
Catch ex As Exception
    Exit sub
End Try
1
Миниатюры
Как при добавлении записи в DataGridView избежать повторения по какому-либо полю?  
Yury Komar
Модератор
Эксперт .NET
2364 / 2169 / 346
Регистрация: 27.01.2014
Сообщений: 3,898
Завершенные тесты: 1
14.09.2016, 16:20 #4
Kulma, нет, INSERT IGNORE не только в MSSQL работает...

Вот как я такую же проблему решал в срседней теме на SQL LITE
http://www.cyberforum.ru/vb-net/thread1797284.html#post9479398

Добавлено через 1 минуту
добавлю и повторюсь, что для таблицы нужно уникальность строки настроить по нужным колонкам... В каждой СУБД это выполняется по разному
1
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
14.09.2016, 16:28 #5
Yury Komar, да, вы правы, моя оплошность, сорри.
SQlite из головы вылетел , вот и не упомянул его.

Не по теме:

У SQLite и MySQL вообще диалект SQL очень схожи.


И про уникальность всё верно , просто в Access ,в отличии от большинства скульных баз,
гораздо проще это настроить в конструкторе, чем прописывать ручками.
Вот мне и решилось разъяснить более детально процесс , чтобы избежать непонимания
со стороны ТС
2
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,473
14.09.2016, 16:54  [ТС] #6
Kulma, Всё работает спасибо. только перед выходом по ошибке закрываю соединение, а то при первой ошибке ничего добавить уже никогда не получится. Избавили меня от перебора записей. Я до этого думал что в таблице может быть только одно индексированное поле.
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
14.09.2016, 17:25 #7
Лучший ответ Сообщение было отмечено jkrnd как решение

Решение

jkrnd, да не за что ))
Касаемо "избавили от перебора..." , Юрий предложил ранее то же решение , я только развернул
его относительно Access ))
Про соединение - я забыл включить его в Exception,вы всё верно сделали.
Цитата Сообщение от jkrnd Посмотреть сообщение
а то при первой ошибке ничего добавить уже никогда не получится.
А вот чтобы об этом голова не болела , создайте отдельную процедуру подключения
и делайте в ней проверку , что-то типа такого ( я не буду код к правилам подключения к Access-лень,
просто приведу кусок своего кода )) ,думаю вы сами по аналогии разберётесь.
А потом , когда в коде потребуется подключение к БД просто вставляете эту процедуру.
vb.net
1
2
3
4
5
6
7
8
9
10
11
12
13
Public Sub Connect_DB() 
        cnnSql = New MySqlConnection
        If cnnSql.State = ConnectionState.Closed Then
            cnnSql.ConnectionString = "database=gtdata;server=127.0.0.1;Port=3307;user id=; pwd=;Character Set=cp1251;"
            Try
                cnnSql.Open()
            Catch ex As SystemException
                MessageBox.Show("Ошибка подключения к локальной БД")
            End Try
        Else
            Exit Sub
        End If
    End Sub
2
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,473
14.09.2016, 17:33  [ТС] #8
Kulma, вместо
Цитата Сообщение от Kulma Посмотреть сообщение
cnnSql.Open()
вставляем
Цитата Сообщение от Kulma Посмотреть сообщение
Connect_DB()
правильно?
0
Kulma
426 / 365 / 62
Регистрация: 25.07.2015
Сообщений: 667
14.09.2016, 17:39 #9
Нет, у ваc же соединение открывается con.Open()
Вот вместо него и используйте процедуру с проверкой а-ля Connect_DB()
А остальное как всегда :
Закрываем как обычно con.Close
Ну и не забываем вставлять con там где это необходимо :
vb.net
1
 OleDbCommand ("Запрос",con)
1
jkrnd
93 / 52 / 11
Регистрация: 22.12.2015
Сообщений: 1,473
14.09.2016, 17:51  [ТС] #10
Kulma, я так и понял.
0
14.09.2016, 17:51
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
14.09.2016, 17:51
Привет! Вот еще темы с решениями:

Неверная кодировка при добавлении записи в БД MySQL
Здравствуйте. Для написания программы использую среду Visual studio 2005, язык...

При добавлении записи в БД с бинарным полем вылетает ошибка
Выскакивает ошибка, ни как не могу понять по чему: Параметр @I_Image не...

Создаются какие либо записи в реестре, при добавлении закладок на панель избранного в IE 8/9?
Всем привет. Интересует следующий момент: Создаются какие либо записи в...

Обновление DataGridView при добавлении записи через запрос
Добрый день! Подскажите пожалуйста как реализовать обновление dataGridView...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru