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

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

20.01.2012, 23:03. Показов 1631. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru