powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как принудительно обновить одну запись из Dataset?
17 сообщений из 17, страница 1 из 1
Как принудительно обновить одну запись из Dataset?
    #32691371
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, у меня есть некий запрос основывающийся на 2 таблицах. Вот мучаюсь с такой проблемой - из-за того, что данный запрос необновляемый, то у меня не получается непосредственно вносить изменения в Dataset и такой способ не срабатывает

Dim crm As CurrencyManager = Me.BindingContext(fmCity_1.grdTable.DataSource, fmCity_1.grdTable.DataMember)
Dim row As DataRowView = CType(crm.Current, System.Data.DataRowView)
row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row("Регион") = Me.cbRegion.SelectedIndex
crm.EndCurrentEdit()
fmCity_1.SqlDataAdapter1.Update(fmCity_1.DsCity1)Возникает ошибка при редактировании Региона, т.к. имеется справочник регионов.
Тогда я стал делать по-другому.
Написал ХП для insert, update и т.п и обновляю запись иначе.

fmCity_1.SqlDataAdapter1.UpdateCommand.Parameters("@Cit").Value = Me.teCity.Text
fmCity_1.SqlDataAdapter1.UpdateCommand.Parameters("@Reg").Value = Me.cbRegion.SelectedIndex
fmCity_1.SqlDataAdapter1.UpdateCommand.Parameters("@Countr").Value = Me.teCountry.Text
fmCity_1.SqlDataAdapter1.UpdateCommand.Parameters("@Kod").Value = Kod.ToString

fmCity_1.SqlConnection1.Open()
fmCity_1.SqlDataAdapter1.UpdateCommand.ExecuteNonQuery()
fmCity_1.SqlConnection1.Close()Все бы ничего, но в таблице запись не обновляется (не сказал, что для ребактирования записи использую другую форму, а форма с таблицей это fmCity_1). Перегружать весь датасет расточительно. Подскажите как сделать тоже, но красиво или как обновить известную запись в датасете?

Огромное человеческое пасиб!

P.S. Исправьте если я не на том форуме поместил.
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32691399
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DejaVu
http://www.sql.ru/forum/actualthread.aspx?tid=121147

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32691406
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну и что? Это я и писал. Так как там написано можно только с обновляемыми представлениями или таблицами делать, а у меня это не так.
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32691797
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Somebody knows?
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32691848
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там ответ на этот вопрос:

Перегружать весь датасет расточительно. Подскажите как сделать тоже, но красиво или как обновить известную запись в датасете?

Очевидно тогда надо пояснить на пальцах что вы хотите получить, утрировано например так:

Структура БД такая-то, структура DataSet такая-то. Записи в DataSet эти, нажимаю это, выполняется то, хочу получить такой результат и т.д.


Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32691955
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ок.
Есть две таблицы Города(Код_города int, Название varchar, Страна varchar, Регион int) и Регионы(Код_региона int, Регион varchar). Таблица заполняется данными на основе представления. Представление простое, оно показывает вместо неинформативного числового кода региона его название. Собственно вот он:

SELECT dbo.City.Код_города, dbo.City.Город, dbo.City.Регион, dbo.City.Страна, dbo.Регионы.Рагион
FROM dbo.City INNER JOIN
dbo.Регионы ON dbo.City.Регион = dbo.Регионы.Код_региона

Дак вот, по двойному щелчку на строке DataGrid открывается форма для редактирования записи. После внесения изменений пользователь нажимает сохранить и вносит изменения в базу. Как я это делаю написано выше вот таким цветом. Данные сохраняются в базе. Но, как я понимаю, из-за того что обновление строки я делаю в обход Dataset (т.к. регион нельзя обновить, потому что это представление на основе двух таблиц), мне не удается произвести его обновление в таблице таким образом, чтобы обновилась эта единственная запись, которую я только что исправил.
Меня интересует как обновить одну исправленную запись в Datagrid?
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32692556
SM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если знаешь первичный ключ редактированной записи, то можно создать новый датасет newDataset, заполнить его этой одной записью, а потом сделать oldDataset.Merge(newDataset.YouTable)
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32692573
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А из текущего датасета нужно удалить чтоли эту мою запись?
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32692770
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А из текущего датасета нужно удалить чтоли эту мою запись?

При merge ничего удалять не надо. Но не думаю что здесь дойдет до merge.

Дак вот, по двойному щелчку на строке DataGrid открывается форма для редактирования записи. После внесения изменений пользователь нажимает сохранить и вносит изменения в базу. Как я это делаю написано выше вот таким цветом. Данные сохраняются в базе. Но, как я понимаю, из-за того что обновление строки я делаю в обход Dataset (т.к. регион нельзя обновить, потому что это представление на основе двух таблиц), мне не удается произвести его обновление в таблице таким образом, чтобы обновилась эта единственная запись, которую я только что исправил.

Не понял почему у вас не получается обновить текущую запись этим же способом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim crm As CurrencyManager = Me.BindingContext(fmCity_1.grdTable.DataSource, fmCity_1.grdTable.DataMember)
Dim row As DataRowView = CType(crm.Current, System.Data.DataRowView)
row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row("Регион") = Me.cbRegion.SelectedIndex
row("Код_города") = bla-bla-bla
row("Рагион") = bla-bla-bla
ведь DataSet'у безразлично как хранятся данные в целевой СУБД.
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32692802
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да и от первоначального варианта с LoadDataRow я не отказываюсь (пока :-) ). Хотя полная структуру DataSet неясна, в частности не понятно есть у вас PK по dbo.City.Код_города или нет.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693140
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row("Регион") = Me.cbRegion.SelectedIndex
row("Код_города") = bla-bla-bla

проходит, а изменение региона вызывает ошибку Additional information: Cannot set Регион.
Про РК, как я понимаю вам нужно сквзать является ли dbo.City.Код_города ключевым - да.
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693196
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row("Регион") = Me.cbRegion.SelectedIndex
row("Код_города") = bla-bla-bla

проходит, а изменение региона вызывает ошибку Additional information: Cannot set Регион.
Про РК, как я понимаю вам нужно сквзать является ли dbo.City.Код_города ключевым - да.

А вы уверены что у вас есть такое поле "Регион" ?
может так:
Код: plaintext
1.
row("Рагион") = Me.cbRegion.SelectedIndex  ' Рагион 
либо попробуйте добраться до поля по индексу. В общем убедитесь в debug что нужный столбец существует в таблице.

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693221
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Наверно я вас, SA, совсем запутал.

Вот этот запрос используется для заполнения Dataset

SELECT City.Код_города, City.Город, City.Страна, Регионы.Регион, City.Регион AS Код_региона
FROM City INNER JOIN
Регионы ON City.Регион = Регионы.Код_региона

row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row("Код_региона") = Me.cbRegion.SelectedIndex
row("Код_города") = bla-bla-bla
row("Регион") = bla-bla-bla ' Здесь ошибка

Полюбому на регионе ошибка. И как ей не быть, это строковое поле нельзя редактировать оно из другой таблицы.
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693240
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это я понял, и вы при заполнении DataSet используете этот запрос:
Код: plaintext
1.
2.
3.
SELECT City.Код_города, City.Город, City.Страна, Регионы.Регион, City.Регион AS Код_региона
FROM City INNER JOIN
Регионы ON City.Регион = Регионы.Код_региона
Таким образом в DataSet получается одна таблица.
А фрагмент вы привели то как это организовано в MS SQL.

Что скажет этот код, после заполнения DsCity1?
Код: plaintext
1.
2.
MsgBox(frmCity_1.DsCity1.Tables.Count)
MsgBox(frmCity_1.DsCity1.Tables( 0 ).Columns.Count)

Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693272
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да похоже в этом и причина. Я использую этот запрос для заполнения.
Таблиц - 1
Полей - 5

Что же нужно предпринять?
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693286
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну по моим расчетам:
Код: plaintext
1.
2.
3.
4.
row("Город") = Me.teCity.Text
row("Страна") = Me.teCountry.Text
row( 3 ) = "Текст регион"
row( 4 ) = Код_региона  ' integer  SelectedIndex 


Код: plaintext
 uid  =  S a
...
Рейтинг: 0 / 0
Как принудительно обновить одну запись из Dataset?
    #32693308
Sasha09
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sa, где вы живете, я вам поставлю памятник при жизни. Сколько у вас терпения.
Все работает. Это гребаный Рагион (
Боже, сколько я угрохал времени.
Несказанно вам благодарен за помощь.
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Как принудительно обновить одну запись из Dataset?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]