С Новым годом! Форум программистов, компьютерный форум, киберфорум
C#: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328

В БД обновляется вся колонка вместо одной записи

20.01.2012, 23:03. Показов 1599. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Пишу изменение в БД, потом обновляю саму БД:
VB.NET
1
2
3
4
5
6
7
8
9
DataGridView1.Rows(mesh).Cells(0).Value = "Удалить"
        
        COMMAND.CommandText = "UPDATE [Пользователи] SET [Фамилия] = ? "
        COMMAND.Parameters.Add("Фамилия", OleDbType.VarWChar, 50, "Фамилия")
 
        da1.UpdateCommand = COMMAND
        COMMAND.Connection = CONNECTION
       
        da1.Update(DATASET, "Пользователи")
Но, почему-то, обновляется ВСЯ колонка, а мне нужно только одну запись. Подскажите что не так?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
20.01.2012, 23:03
Ответы с готовыми решениями:

Не обновляется колонка в DBGrid
Привет, народ. Подскажите пожалуйста. Есть у меня dbgrid, вывожу туда из бд таблицу. И надо мне автоматом подгонять ширину столбцов по...

При открытии записей вся правая колонка сваливается в подвал
Главная страница все нормально, нажимаем на рубрику в меню тоже номрально Как только открываем запись При открытии записей вся правая...

Ошибка при вводе данных - две записи вместо одной
Здравствуйте! Сделала маленькую базу данных для ввода пациентов, участвующих в исследовании. одна таблица, разделена на две формы. Вторая...

12
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
20.01.2012, 23:29
Цитата Сообщение от SergKr Посмотреть сообщение
Но, почему-то, обновляется ВСЯ колонка, а мне нужно только одну запись. Подскажите что не так?
потому что ты указываешь для сохранения всю таблицу "Пользователи". Используй перегрузку для сохранения конкретной строки
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
20.01.2012, 23:41  [ТС]
nio, А это как? Можно пример?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
20.01.2012, 23:51
Цитата Сообщение от SergKr Посмотреть сообщение
А это как? Можно пример?
http://msdn.microsoft.com/ru-r... s.90).aspx
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
21.01.2012, 07:16  [ТС]
nio, Спасибо за ссылку, конечно, но я всё-равно ничего там не понял. Подставляю - и ничего не получается...

Добавлено через 20 минут
Вот что ещё странно. Если ставлю:
VB.NET
1
2
3
4
5
6
7
8
Try
            Dim kol As Integer = da1.Update(DATASET, "Пользователи")
 
            MsgBox("Обновлено " & kol & " записей")
 
        Catch ex As Exception
            MsgBox(ex.Message, "Недоразумение")
        End Try
то пишет, что обновлена 1 запись, но если смотреть в БД, то вся колонка обновлена!!!

Добавлено через 6 часов 51 минуту
НАРОД! Помогите, пожалуйста!!! Бьюсь-бьюсь - никак не получается. Меняю строку, должна только одна строчка поменяться, а меняется весь столбец! Как мне только одну строчку поменять? При чём пишет, что обновлена только ОДНА запись, а обновляется ВЕСЬ столбец!!!

VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
Dim COMMAND As New System.Data.OleDb.OleDbCommand(
            "Select * From [Пользователи]", CONNECTION)
        Dim ADAPTER As New OleDbDataAdapter(COMMAND)
        Dim DATASET As New DataSet
        Dim builder As OleDbCommandBuilder = New OleDbCommandBuilder(ADAPTER)
        ADAPTER.Fill(DATASET, "Пользователи")
        DataGridView1.DataSource = DATASET
        DataGridView1.DataMember = "Пользователи"
        TextBox1.Text = ListBox1.SelectedIndex
        Dim mesh As Integer = TextBox1.Text
 
        
        DataGridView1.Rows(mesh).Cells(0).Value = "Удалить"
        da1 = New OleDb.OleDbDataAdapter("Select  From [Пользователи] Set [Фамилия]='Удалить'", CONNECTION)
 
 
        COMMAND.CommandText = "UPDATE [Пользователи] Set [Фамилия] = 'Удалить'"
        COMMAND.Parameters.Add("Фамилия", OleDbType.VarWChar, 50, "Фамилия")
        da1.UpdateCommand = COMMAND
        COMMAND.Connection = CONNECTION
       
        Try
            Dim kol As Integer = da1.Update(DATASET.Tables(0))
            
            MsgBox("Обновлено " & kol & " записей")
 
        Catch ex As Exception
            MsgBox(ex.Message, "Недоразумение")
        End Try
Что я только не испробовал!!!
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
21.01.2012, 07:44
Цитата Сообщение от SergKr Посмотреть сообщение
Что я только не испробовал!!!
Запрос твой не имеет условия
SQL
1
UPDATE [Пользователи] SET [Фамилия] = ?
(Перевожу: в таблице [Пользователи] столбцу [Фамилия] присвоить значение ?)
Поскольку ему не указано, в какую строку нужно внести изменения, он лепит во все, а нужно так
SQL
1
UPDATE [Пользователи] SET [Фамилия] = ? WHERE [ID]=?
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
21.01.2012, 08:59  [ТС]
Тогда выдаёт:
Отсутствует значение для одного или нескольких требуемых параметров.
на строке
VB.NET
1
 Dim kol As Integer = da1.Update(DATASET.Tables(0))
А строку делаю такую:
VB.NET
1
COMMAND.CommandText = "UPDATE [Пользователи] Set [Фамилия] = ? Where [" & mesh & "]=?"
Добавлено через 48 минут
А если ставлю строку:
VB.NET
1
COMMAND.CommandText = "UPDATE [Пользователи] Set [Фамилия] = ? Where [Фамилия]='Удалить'"
то пишет
Нарушение параллелизма: UpdateCommand затронула 0 из ожидаемых 1 записей.
Почему так?
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
21.01.2012, 19:17
Во-первых надо знать что за СУБД используется)).
На сколько мне известно инструкции для различных СУБД могут отличаться. Так как каждая из них использует свой диалект SQL(лично я давно погряз в T-SQL). Зная диалект (или СУБД, неважно), нужно посмотреть документацию на правила написания инструкции UPDATE. Затем нужно изучить пример запроса и в коде попытаться сканкатенировать строку запроса самому. Если в качестве СУБД используется MS, то запрос должен был бы выглядеть так:
T-SQL
1
2
3
UPDATE название_таблицы 
SET название_столбца = 'значение_для обнавления' 
WHERE ID = 'значение_ключевого поля'
Обязательно одинарные кавычки для значений иначе работать не будет (напомню это в MS, а для другой СУБД это может отличаться). Соглашусь с предыдущими постами, что проблема именно во фразе WHERE. Сформируй текст запроса с записью в переменную, поставь отладчик и или сам разберешся в чем проблема или тебе исправят как должен выглядеть запрос.
А лучше всего, если позволяет время, прочитать книгу по SQL.
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
23.01.2012, 11:19  [ТС]
Не пойму.
VB.NET
1
2
3
4
5
6
7
8
TextBox2.Text = DataGridView1.Rows(mesh).Cells(0).Value
        TextBox2.Text = TextBox2.Text.Replace(" ", "")
       COMMAND.CommandText = "UPDATE [Пользователи] Set [Фамилия] = ? Where ([" & TextBox2.Text & "]='Удалить')"
        COMMAND.Parameters.Add("Фамилия", OleDbType.VarWChar, 50, "Фамилия")
        da1.UpdateCommand = COMMAND
        COMMAND.Connection = CONNECTION
       
        Dim kol As Integer = da1.Update(DATASET, "Пользователи")
Выдаёт ошибку:
Ссылка на объект не указывает на экземпляр объекта.
А почему? Вообще-то выбираю из списка скажем "Иванов". Записываю в TextBox2. Потом в БД должно "Иванов" поменяться на "Удалить". Что опять у меня не так?

Добавлено через 32 минуты
VB.NET
1
2
SqlCom = New OleDb.OleDbCommand("UPDATE [Пользователи] SET [Фамилия]='Удалить' WHERE ([Фамилия]='" & TextBox2.Text & "')", CONNECTION)
        SqlCom.ExecuteNonQuery()
Решил! Только теперь не пойму как запрос написать? Мне нужно, чтоб менялась строка ГДЕ [Фамилия] = TextBox2.Text И [Имя] = TextBox3.Text И [Отчество] = TextBox4.Text.
А вот как это написать в запросе?
0
 Аватар для nio
6050 / 3460 / 336
Регистрация: 14.06.2009
Сообщений: 8,136
Записей в блоге: 2
23.01.2012, 11:22
Цитата Сообщение от SergKr Посмотреть сообщение
Не пойму
и не поймешь, пока книжку умную не почитаешь по ADO.Net
За то время пока ты тут пытаешься написать код наугад давно можно было это сделать
Цитата Сообщение от SergKr Посмотреть сообщение
А почему? Вообще-то выбираю из списка скажем "Иванов". Записываю в TextBox2. Потом в БД должно "Иванов" поменяться на "Удалить". Что опять у меня не так?
Полный бред, вслух прочитай, сам поймешь
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
23.01.2012, 12:04  [ТС]
VB.NET
1
2
3
4
 Dim SqlCom As OleDb.OleDbCommand
        SqlCom = New OleDb.OleDbCommand("UPDATE [Пользователи] SET [Фамилия]='Удалить' WHERE ([Фамилия]='" & TextBox2.Text & "' and [Имя]='" & TextBox3.Text &
                                        "' and [Отчество]='" & TextBox4.Text & "' and [Должность]='" & TextBox5.Text & "')", CONNECTION)
        SqlCom.ExecuteNonQuery()
Решено!!!!

Добавлено через 30 минут
Цитата Сообщение от SergKr Посмотреть сообщение
Пишу изменение в БД, потом обновляю саму БД:
VB.NET
1
2
3
4
5
6
7
8
9
DataGridView1.Rows(mesh).Cells(0).Value = "Удалить"
        
        COMMAND.CommandText = "UPDATE [Пользователи] SET [Фамилия] = ? "
        COMMAND.Parameters.Add("Фамилия", OleDbType.VarWChar, 50, "Фамилия")
 
        da1.UpdateCommand = COMMAND
        COMMAND.Connection = CONNECTION
       
        da1.Update(DATASET, "Пользователи")
Но, почему-то, обновляется ВСЯ колонка, а мне нужно только одну запись. Подскажите что не так?
VB.NET
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DataGridView1.Rows(1).Cells(1).Value = "УРАААА"
 
        COMMAND.CommandText = "UPDATE [БД телефонов] SET [Но" &
            "мер телефона] = ?, ФИО = ? WHERE ([Номер п/п] = ?)"
        COMMAND.Parameters.Add("Номер телефона", OleDbType.VarWChar,
                              50, "Номер телефона")
        COMMAND.Parameters.Add("ФИО", OleDbType.VarWChar, 50, "ФИО")
        COMMAND.Parameters.Add(New OleDbParameter("Original_Номер_п_п",
                                                 OleDbType.Integer, 0, System.Data.ParameterDirection.Input,
                                                 False, CType(0, Byte), CType(0, Byte), "Номер п/п",
                                                 System.Data.DataRowVersion.Original, Nothing))
        DA.UpdateCommand = COMMAND
        COMMAND.connection = CO
        Try
            Dim kol As Integer = DA.Update(DS, "БД телефонов")
            MessageBox.Show("Обновлено " & kol & " записей")
        Catch ex As Exception
            MessageBox.Show(ex.Message, "Недоразумение")
        End Try
Вот из этого примера я хотел переделать под себя. Пример работает на ура... И вся база сохраняется как надо...
0
 Аватар для _katon_
414 / 265 / 25
Регистрация: 03.10.2011
Сообщений: 1,094
23.01.2012, 12:11
Да! Но судя по твоему запросу, если у тебя будут в базе дубликаты по тем полям, которые ты указал в условии WHERE, то будет удалено несколько строк. Правильно при удалении в условии WHERE записывать ключевое поле. Решать конечно тебе.
0
 Аватар для SergKr
67 / 41 / 3
Регистрация: 07.12.2010
Сообщений: 328
23.01.2012, 12:21  [ТС]
Вот поэтому я другой код под себя делаю! Там даже есть дубликаты, нету дубликатов изменяется только то что нужно (что было изменено в DataGrid'е)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
23.01.2012, 12:21
Помогаю со студенческими работами здесь

Запустил Ccleaner и пропала вся память - стало 2 гига вместо 69
Было 69 гигов на диске с свободно.Как обычно запустил Ccleaner и пропала вся память стало 2 гига.Что делать? Не постить где попало!

Дополнительная колонка в корректировки записи регистров
Добрый день. Кто то делал, или может подсказать как в корректировку записей регистров вывести еще артикул номенклатуры? Собственно как все...

Вместо диалогового окна обновляется страница
Всем здравствуйте! У меня такой вопрос: я создал частичное представление, создал модель и контроллер, и передаю данные в частичное...

Три колонки, если одно значение одной равно второй, то ИСТИНА третья колонка
Здравствуйте! Простите за сложную тему, уж не придумал как её назвать умнее. Все что я опишу ниже доступно в приложенном мной файле. ...

Фильтр не обновляется в одной вкладке
Здравстуйте уважаемые, Я изучаю аксесс по учебнику Teach Pro по созданию базы данных Платежки. Все делаю как показано в учебнике но у...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru