powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обновления из грида в базу
60 сообщений из 60, показаны все 3 страниц
обновления из грида в базу
    #32525667
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заполняю ultragrid
Me.ultragrid.DataSource = Me.dataset.Tables("tabl")
затем в ячейках грида редактирую данные
потом делаю
BindingContext(dataset, "tabl").EndCurrentEdit()
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()
ничего в базе не обновляет ....

Dim OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter
Dim OleDbUpdateCommand1 As System.Data.OleDb.OleDbCommand
OleDbDataAdapter1.UpdateCommand = OleDbUpdateCommand1
OleDbUpdateCommand1.CommandText = "[NewSPUpdateCommand]"
OleDbUpdateCommand1.CommandType = System.Data.CommandType.StoredProcedure

что не так?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525742
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[src]BindingContext(dataset, "tabl").EndCurrentEdit()
MsgBox(dataset.HasChanges().ToString()) ' Что здесь возвращает HasChanges()?
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()
[src]
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525744
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очепятка:
Код: plaintext
1.
2.
3.
4.
BindingContext(dataset, "tabl").EndCurrentEdit()
MsgBox(dataset.HasChanges().ToString()) ' Что здесь возвращает HasChanges()?
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525793
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
true
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525809
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А это что возвращает:
Код: plaintext
1.
MsgBox(dataset.HasChanges(DataRowState.Modified).ToString())
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525830
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тоже true
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525839
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересует структура обновляемой таблицы и код NewSPUpdateCommand.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525895
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в приложеном txt код хп
структура таблицы видна там же
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525911
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Архив битый, или чем вы запаковывали?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32525953
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял что это обычный text. Только расширение zip для чего?

Видно много параметров к этой хранимой процедуре. Интересует код этих параметров на VB.NET.
Код: plaintext
1.
2.
OleDbUpdateCommand1.Parameters.Add(bla-bla-bla)
.........
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526089
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понял что это обычный text. Только расширение zip для чего?

я кладу обычный txt , пробовал скачать - качается тоже txt

вот код параметров
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526147
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первичный ключ = iduvsd ?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526221
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Первичный ключ = iduvsd ?
да
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526241
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так давайте попробуем следующее:
Код: plaintext
1.
2.
3.
4.
BindingContext(dataset, "tabl").EndCurrentEdit()
AddHandler OleDbDataAdapter1.RowUpdating, AddressOf OleDbDataAdapter1_RowUpdating ' Добавить эту строку
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()

Добавьте следующую процедуру:
Код: plaintext
1.
2.
3.
4.
5.
Public Sub OleDbDataAdapter1_RowUpdating(ByVal sender As Object, ByVal e As OleDbRowUpdatingEventArgs)
    Console.WriteLine(vbTab & "iduvsd = " & e.Row("iduvsd").ToString())
    Console.WriteLine(vbTab & "Original iduvsd = " & e.Row("iduvsd", DataRowVersion.Original).ToString())
    Console.WriteLine()
End Sub

Теперь запускаем и смотрим в Output что туда выходит при Update?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526388
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не заходит он в эту процедуру
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526414
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы при этом что нибудь меняете в таблице?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526455
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в гриде меняю данные
и MsgBox(dataset.HasChanges(DataRowState.Modified).ToString()) дает true
может для грида какой метод нужен?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526478
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробовать перед Update:
Код: plaintext
1.
2.
3.
4.
Dim modified As DataSet = dataset.GetChanges(DataRowState.Modified)
Console.WriteLine(modified.Tables( 0 ).TableName)
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526509
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ругается на Console.WriteLine(modified.Tables(0).TableName)
Object reference not set to an instance of an object.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526527
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ясно почему updating не срабатывает, только я не понимаю как
dataset.HasChanges(DataRowState.Modified) возвращает True, если

Dim modified As DataSet = dataset.GetChanges(DataRowState.Modified) // modified = Nothing - то есть обновлений нет.

Привидите еще раз полученный код.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526538
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А лучше дойдите Debugом до Update. И в этот момент в Watch посмотрите:
modifed, dataSet.HasChanges(DataRowState.Modified)
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526546
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
код ты мне на днях давал :)
по ссылке на пост и ниже видно как я это с твоей помощью сделал :)
/topic/63982#684095
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526558
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет меня сейчас интересует, все что до Update находиться
OleDbDataAdapter1.Update(dataset)
dataset.AcceptChanges()

Я все никак не могу въехать почему HasChanges говорит изменения модифицированных строк есть, а GetChanges говорит что нет.????
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526561
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати пора думаю все эти топики собирать воедино. :-)

Ну и все таки хотелось бы посмотреть весь код завязанный с DataSet, иногда лишняя строка может все испортить.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32526601
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
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.
             
        Dim OleDbDataAdapter1 As System.Data.OleDb.OleDbDataAdapter
        Dim OleDbUpdateCommand1 As System.Data.OleDb.OleDbCommand
        Dim OleDbConnection1 As System.Data.OleDb.OleDbConnection
        OleDbDataAdapter1 = New System.Data.OleDb.OleDbDataAdapter
        OleDbUpdateCommand1 = New System.Data.OleDb.OleDbCommand
        OleDbConnection1 = New System.Data.OleDb.OleDbConnection

        OleDbDataAdapter1.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "uchveks", New System.Data.Common.DataColumnMapping() {New System.Data.Common.DataColumnMapping("iduvsd", "iduvsd"), New System.Data.Common.DataColumnMapping("iduveks", "iduveks"), New System.Data.Common.DataColumnMapping("perevod", "perevod"), New System.Data.Common.DataColumnMapping("idvekseldat", "idvekseldat"), New System.Data.Common.DataColumnMapping("seria", "seria"), New System.Data.Common.DataColumnMapping("number", "number"), New System.Data.Common.DataColumnMapping("datesost", "datesost"), New System.Data.Common.DataColumnMapping("mestosost", "mestosost"), New System.Data.Common.DataColumnMapping("idvalnom", "idvalnom"), New System.Data.Common.DataColumnMapping("nominal", "nominal"), New System.Data.Common.DataColumnMapping("procent", "procent"), New System.Data.Common.DataColumnMapping("datenprocent", "datenprocent"), New System.Data.Common.DataColumnMapping("idvpog", "idvpog"), New System.Data.Common.DataColumnMapping("datepog", "datepog"), New System.Data.Common.DataColumnMapping("mestpogash", "mestpogash"), New System.Data.Common.DataColumnMapping("avalist", "avalist"), New System.Data.Common.DataColumnMapping("idmesthran", "idmesthran"), New System.Data.Common.DataColumnMapping("idvveks", "idvveks"), New System.Data.Common.DataColumnMapping("prim", "prim"), New System.Data.Common.DataColumnMapping("fotoL", "fotoL"), New System.Data.Common.DataColumnMapping("fotoI", "fotoI"), New System.Data.Common.DataColumnMapping("fotoA", "fotoA"), New System.Data.Common.DataColumnMapping("datepok", "datepok"), New System.Data.Common.DataColumnMapping("dateopl", "dateopl"), New System.Data.Common.DataColumnMapping("dateprod", "dateprod"), New System.Data.Common.DataColumnMapping("datepost", "datepost"), New System.Data.Common.DataColumnMapping("idvalpok", "idvalpok"), New System.Data.Common.DataColumnMapping("cenapokA", "cenapokA"), New System.Data.Common.DataColumnMapping("cenapokB", "cenapokB"), New System.Data.Common.DataColumnMapping("idvalprod", "idvalprod"), New System.Data.Common.DataColumnMapping("cenaprodA", "cenaprodA"), New System.Data.Common.DataColumnMapping("cenaprodB", "cenaprodB"), New System.Data.Common.DataColumnMapping("doprash", "doprash"), New System.Data.Common.DataColumnMapping("doprashPR", "doprashPR"), New System.Data.Common.DataColumnMapping("idsd", "idsd"), New System.Data.Common.DataColumnMapping("bal", "bal"), New System.Data.Common.DataColumnMapping("idsdpr", "idsdpr"), New System.Data.Common.DataColumnMapping("datevRepo", "datevRepo"), New System.Data.Common.DataColumnMapping("cenRepo", "cenRepo"), New System.Data.Common.DataColumnMapping("vh", "vh"), New System.Data.Common.DataColumnMapping("vyh", "vyh"), New System.Data.Common.DataColumnMapping("vyhREPO", "vyhREPO"), New System.Data.Common.DataColumnMapping("vyhREPOc", "vyhREPOc"), New System.Data.Common.DataColumnMapping("bREPO", "bREPO"), New System.Data.Common.DataColumnMapping("tip", "tip"), New System.Data.Common.DataColumnMapping("bProved", "bProved"), New System.Data.Common.DataColumnMapping("byvidveks", "byvidveks")})})
        OleDbDataAdapter1.UpdateCommand = OleDbUpdateCommand1

        Dim frm As FormSpVeks = New FormSpVeks
            frm.AddVeks(dsNewSD)
            Me.ugVeks.DataSource = Me.dsNewSD.Tables("spVeks")
        BindingContext(dsNewSD, "spVeks").EndCurrentEdit()
        BindingContext(dsNewSD, "spVeks").EndCurrentEdit()
        MsgBox(dsNewSD.HasChanges(DataRowState.Modified).ToString())
        AddHandler OleDbDataAdapter1.RowUpdating, AddressOf OleDbDataAdapter1_RowUpdating ' Добавить эту строку
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        Console.WriteLine(modified.Tables( 0 ).TableName)
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        Console.WriteLine(modified.Tables( 0 ).TableName)
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
в вызванной форме
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
   Friend Function AddVeks(ByRef dsNewSD As Data.DataSet) As Boolean
        ShowDialog()
        Dim selRows As Infragistics.Win.UltraWinGrid.SelectedRowsCollection = ugSelVeks.Selected.Rows
        Dim dataRows(selRows.Count -  1 ) As System.Data.DataRow
        Dim i As Integer
        For i =  0  To selRows.Count -  1 
            dataRows(i) = CType(selRows(i).ListObject, DataRowView).Row
        Next
        dsNewSD.Merge(dataRows)
        Return True
    End Function
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32527315
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересует что выдают MsgBox
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
        OleDbDataAdapter1.UpdateCommand = OleDbUpdateCommand1

' Убираем это пока
'        Dim frm As FormSpVeks = New FormSpVeks
'           frm.AddVeks(dsNewSD)
'            Me.ugVeks.DataSource = Me.dsNewSD.Tables("spVeks")
'        BindingContext(dsNewSD, "spVeks").EndCurrentEdit()
'        BindingContext(dsNewSD, "spVeks").EndCurrentEdit()

        dsNewSD.Tables("spVeks").Rows( 0 )( 1 ) =  dsNewSD.Tables("spVeks").Rows( 0 )( 1 )
        MsgBox("HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        MsgBox("Count = "  &  modified.Tables("spVeks).Rows.Count.ToString())

        AddHandler OleDbDataAdapter1.RowUpdating, AddressOf OleDbDataAdapter1_RowUpdating
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        Console.WriteLine(modified.Tables( 0 ).TableName)
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32527469
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лучше сразу же так:
Код: plaintext
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.
30.
31.
        OleDbDataAdapter1.UpdateCommand = OleDbUpdateCommand1
' Убираем это пока
'        Dim frm As FormSpVeks = New FormSpVeks
'           frm.AddVeks(dsNewSD)
'            Me.ugVeks.DataSource = Me.dsNewSD.Tables("spVeks")
         MsgBox("Before: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())

        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        If modified is Nothing Then
             MsgBox("Before: Modified is nothing")
        Else 
             MsgBox("Before: Count = "  &  modified.Tables("spVeks).Rows.Count.ToString())
        End If

        modified = Nothing

        dsNewSD.Tables("spVeks").Rows(0)(1) =  dsNewSD.Tables("spVeks").Rows(0)(1)
        MsgBox("After: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
        modified = dsNewSD.GetChanges(DataRowState.Modified)
        If modified is Nothing Then
             MsgBox("After: Modified is nothing")
        Else 
             MsgBox("After: Count = "  &  modified.Tables("spVeks).Rows.Count.ToString())
        End If
        AddHandler OleDbDataAdapter1.RowUpdating, AddressOf OleDbDataAdapter1_RowUpdating
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        Console.WriteLine(modified.Tables( 0 ).TableName)
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()

В какую вы таблицу хотите внести изменения uchveks или spVeks?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529107
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а почему: 'Убираем пока это ...
ведь у меня именно в этом и заполняется датасет в функции другой формы!
естественно незаполнив датасет все эти месаджы выдают false и nothing
если же эти строки не комментировать, то выдаёт true 1 true 1
в чем же дело? непойму ...
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529108
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В какую вы таблицу хотите внести изменения uchveks или spVeks?

в таблицу uchveks, а таблица spVeks это тажа таблица в датасете.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529239
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>а почему: 'Убираем пока это ...
ведь у меня именно в этом и заполняется датасет в функции другой формы!
естественно незаполнив датасет все эти месаджы выдают false и nothing

Потому что это всего лишь "пока" :-) а сейчас не убираем.

>если же эти строки не комментировать, то выдаёт true 1 true 1
в чем же дело? непойму ...

Теперь такой вариант, обратите внимания на переставленные и добавленные строки, а также на то сработает ли RowUpdating и внесутся ли изменения в БД. А также произведите изменения в модальной форме минимум двух строк:
Код: plaintext
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.
30.
31.
32.
        OleDbDataAdapter1.UpdateCommand = OleDbUpdateCommand1

         MsgBox("Before: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        If modified is Nothing Then
             MsgBox("Before: Modified is nothing")
        Else 
             MsgBox("Before: Count = "  &  modified.Tables("spVeks).Rows.Count.ToString())
        End If

        Dim frm As FormSpVeks = New FormSpVeks
           frm.AddVeks(dsNewSD)
            Me.ugVeks.DataSource = Me.dsNewSD.Tables("spVeks")

        modified = Nothing
'        dsNewSD.Tables("spVeks").Rows(0)(1) =  dsNewSD.Tables("spVeks").Rows(0)(1)  Убираем эту строку

        MsgBox("After: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
        modified = dsNewSD.GetChanges(DataRowState.Modified)
        If modified is Nothing Then
             MsgBox("After: Modified is nothing")
        Else 
             MsgBox("After: Count = "  &  modified.Tables("spVeks).Rows.Count.ToString())
        End If
        AddHandler OleDbDataAdapter1.RowUpdating, AddressOf OleDbDataAdapter1_RowUpdating
       OleDbDataAdapter1.TableMappings.Add("Table", "spVeks") ' Добавим эту строку
       OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
        Console.WriteLine(modified.Tables( 0 ).TableName)
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529308
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
не вносятся изменения в бд

OleDbDataAdapter1.TableMappings.Add("Table", "spVeks")
а почему "Table" ? ведь у меня имя таблицы в бд - uchveks, а в dataset вроде бы spVeks
а какие изменения в модальной форме?
а Console.WriteLine(modified.Tables(0).TableName) кстати не делает - отсутствует ссылка ...
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529316
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>не вносятся изменения в бд
>OleDbDataAdapter1.TableMappings.Add("Table", "spVeks")

Так эту строчку OleDbDataAdapter1.TableMappings.Add("Table", "spVeks") уберем Так как я у вас заметил что уже есть выше TableMappings только там ОБЯЗАТЕЛЬНО исправьте uchveks на spVeks.

>а Console.WriteLine(modified.Tables(0).TableName) кстати не делает - отсутствует ссылка ...

И правильно потому что впереди AcceptChanges, так что эти строки убивайте
Код: plaintext
1.
2.
Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
Console.WriteLine(modified.Tables( 0 ).TableName)

>а почему "Table" ? ведь у меня имя таблицы в бд - uchveks, а в dataset вроде >бы spVeks
Да потому что в dataSet как раз у вас и spVeks.

Пробуйте код еще раз и что выдают другие сообщения Before, After а также интересно еще раз посмотреть на весь код - будет видно что вы добавили а что нет и где еще требуется редакция.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529363
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
такое ощущение, что начали ходить по кругу
при клике на первой кнопке вызываю модальную форму и заполняю грид данными:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
            MsgBox("Before: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
            Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)
            If modified Is Nothing Then
                MsgBox("Before: Modified is nothing")
            Else
                MsgBox("Before: Count = " & modified.Tables("spVeks").Rows.Count.ToString())
            End If
            Dim frm As FormSpVeks = New FormSpVeks
            frm.AddVeks(dsNewSD)
            Me.ugVeks.DataSource = Me.dsNewSD.Tables("spVeks")
месаджы бефоре естественно дают false и nothing
в той модальной форме происходит следующее:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
    Private Sub FormSpVeks_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
.....
            adpSD.Fill(dsSD, "spVeks")
            ugSelVeks.DataSource = dsSD.Tables("spVeks")
.....
end sub

    Friend Function AddVeks(ByRef dsNewSD As Data.DataSet) As Boolean
        ShowDialog()

        Dim selRows As Infragistics.Win.UltraWinGrid.SelectedRowsCollection = ugSelVeks.Selected.Rows
        Dim dataRows(selRows.Count -  1 ) As System.Data.DataRow
        Dim i As Integer
        For i =  0  To selRows.Count -  1 
            dataRows(i) = CType(selRows(i).ListObject, DataRowView).Row
        Next
        dsNewSD.Merge(dataRows)
        Return True

    End Function
выбранные строки грида подчиненной формы отобразились в гриде первой формы, я их редактирую
и жму на вторую кнопку пытаясь сохранить изменения в базе:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
.....
добавляются объекты команд
этот код есть в приложенном файле выше
.....
        OleDbDataAdapter1.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("spVeks", "uchveks", ....
потом добавляются переменные для Update ....
.....
        Dim modified As DataSet = dsNewSD.GetChanges(DataRowState.Modified)

        modified = Nothing

        MsgBox("After: HasChanges = " & dsNewSD.HasChanges(DataRowState.Modified).ToString())
        modified = dsNewSD.GetChanges(DataRowState.Modified)
        If modified Is Nothing Then
            MsgBox("After: Modified is nothing")
        Else
            MsgBox("After: Count = " & modified.Tables("spVeks").Rows.Count.ToString())
        End If
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
        OleDbDataAdapter1.Update(dsNewSD)
        dsNewSD.AcceptChanges()
и теперь месаджбоксы выдают true и модифицирована 1 запись.
но в базе не обновляется ни чего .
всё таки почему у меня в TableMapping висит "Table" ? написать:
Код: plaintext
DataTableMapping("spVeks", "uchveks",... 
потом ругается на OleDbDataAdapter1.Update(dsNewSD)
При обновлении не удалось найти TableMapping['Table'] или DataTable 'Table'. как же правильно мне сделать с TableMapping ?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529375
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Правильно так:

Код: plaintext
1.
OleDbDataAdapter1.TableMappings.AddRange(New System.Data.Common.DataTableMapping() {New System.Data.Common.DataTableMapping("Table", "spVeks", ....

Вы так пробовали?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529508
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
DataTableMapping("Table", "spVeks", ....
так ругается на OleDbDataAdapter1.Update(dsNewSD)
An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529540
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
заполнил грид без модальной формы и обновил данные - обновились в бд
значит не получается сделать update адаптара для нужной таблицы, а нужную таблицу из модальной формы незнаю
как указать чтоб сделать merge правильно, или TableMappings как сделать правильно? немогу.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529568
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну осталось значит разобраться с логикой работы модальной формы. Опишите ее поподробнее.

На первый взгляд вы используете излишнее количество "наборов строк" (DataSet, DataRow()). А также Clone у вас стоит где нибудь или нет.

Одна из проблем у вас заключается в том что вы выбрали в DataSet одно название для таблицы, а в базе данных название у этой таблице иное, но это не значит что надо все сейчас менять, DataSetу - отсоединенный набор данных и ему все равно как и где что называется, а вот DataAdapterу не все равно.

Вообще ответ лежит в изучении DataSet который идет на обновление, мне кажется у вас там две таблицы одна называется spVeks другая uchVeks. Но это только предварительное заключение, вообще хотелось бы узнать подробно логику работу модальной формы, что откуда куда поступает, и мне кажется есть более простое решение вашей проблемы.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529583
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
с dataset в модальной форме я уж чего только не делал.
как она выглядит я приводил здесь же выше, повторюсь:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Private Sub FormSpVeks_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
.....
            adpSD.Fill(dsSD, "spVeks")
            ugSelVeks.DataSource = dsSD.Tables("spVeks")
.....
end sub

    Friend Function AddVeks(ByRef dsNewSD As Data.DataSet) As Boolean
        ShowDialog()

        Dim selRows As Infragistics.Win.UltraWinGrid.SelectedRowsCollection = ugSelVeks.Selected.Rows
        Dim dataRows(selRows.Count -  1 ) As System.Data.DataRow
        Dim i As Integer
        For i =  0  To selRows.Count -  1 
            dataRows(i) = CType(selRows(i).ListObject, DataRowView).Row
        Next
        dsNewSD.Merge(dataRows)
        Return True

    End Function
 


там только процедура Load для формы и функция AddVeks в которой делается merge
при загрузке формы заполняется датасет(таблица "spVeks") из той же таблицы бд, в которую передаются обновления в основной форме,
при вызове функции создается массив выбранных строк и передается dsNewSD.Merge(dataRows)
clone нет!
причем dsNewSD в основной форме до открытия модальной формы просто создается и не заполняется ничем
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529607
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я бы изменил логику следующим образом утрированный пример но просто многое мне не нравиться как сейчас сделано у вас, например передача DataSet по ссылке ref в модальную форму:

Итак пример:
Пусть главная форма называется MainForm, как у вас я не знаю.
В главной форме объявляем DataSet dsSD с модификатором Friend
Например так:
Код: plaintext
1.
Friend dsSD as New DataSet()

Перед вызовом модальной формы заполняем dsSD.
adpSD.Fill(dsSD, "spVeks") // где adpSD - адаптер переносим из модальной формы в главную. Кстати интересно посмотреть на код этого DataAdapter особено на TableMappings.

Далее создаем Clone датасета dsSD, называем его dsNewSD:
Dim dsNewSD as DataSet = dsSD.Clone() ' Таким образом Clone создается один раз.

Потом вызываем модальную форму:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim frm as  New FormSpVeks()
frm.ShowDialog(Me) ' Me обязательно
' Этот код сработает после  модального формы, здесь легко сделать и проверку того что нажали в модальной форме например ОК или Cancel, и логично так сделать это дает возможность пользователю что то натворить в модальной форме и отказаться от содеянного :-)
Dim selRows As Infragistics.Win.UltraWinGrid.SelectedRowsCollection = frm.ugSelVeks.Selected.Rows
Dim dataRows(selRows.Count -  1 ) As System.Data.DataRow
Dim i As Integer
For i =  0  To selRows.Count -  1 
    dataRows(i) = CType(selRows(i).ListObject, DataRowView).Row
Next
dsNewSD.Merge(dataRows)  'Здесь следует внимательно изучить dsNewSD именно таблицу spVeks. Тут можно сделать простые проверки количество строк в spVeks до Merge и после.
' Далее все как обычно вносим изменения если надо в dsNewSD  и отправляем dsNewSD на Update.

Модальная форма:
Функцию Function AddVeks(ByRef dsNewSD As Data.DataSet) не надо, но у UltraDataGrid этой формы надо поставить модификатор Friend.
А Load модальной формы при этом выглядит следующим образом,
Код: plaintext
1.
2.
3.
Dim myOwner as MainForm
myOwner = CType(myOwner, MainForm)
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks") ' Источник dataGrid DataSet из главной формы

Одно из преимуществ такого подхода, что практически в модальной форме нет кода, вся обработка сосредотачивается в главной/основной форме.
-----------------------------------------------------------------------------
Если же хотите разобраться со своим кодом, то детально изучайте все свои DataSetы. Какие когда таблицы появляются, какие когда строки изменяются и т.д. Также применительно к тому что сейчас есть, интересно изучить dsNewSD до и после Merge. Какие таблицы, какие строки, какие RowState
Так что ждем результатов :-)
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529640
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в модальной форме ругается на последнию строку
Dim myOwner As FormNewSd
myOwner = CType(myOwner, FormNewSd)
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks")
В экземпляре не задана ссылка на объект.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529707
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>в модальной форме ругается на последнию строку
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks")
В экземпляре не задана ссылка на объект.

А вы dsSD объявили в основной форме с модификатором Friend или нет.

Код: plaintext
1.
Friend dsSD as New DataSet()

Вообще когда в VS.NET набиратет myOwner и ставите точку появляется на выбор dataset с именем dsSD?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529716
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dsSD объявил Friend
в подчиненой ставлю точку после myOwner и есть там dsSD
а ругается!
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529761
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хорошо бы посмотреть на оригинальную ругань.

А вы случаем не из MDI child формы вызываете модальную форму. Если да , то owner возвратит MDI parent. И тогда надо делать уже чуть чуть по другому.

И еще везде обязательно где у вас Fill и Update и вы работаете с таблицей spveks добавьте
вторым параметром название этой таблицы. Где то видно что это уже стоит где то нет.

Например таким образом:
Код: plaintext
1.
2.
Для Fill DataAdapter.Fill(DataSet, "spveks")
Для Update DataAdapter.Update(DataSet, "spveks")

И привидите код adpSD. DataAdapterа
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529805
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вы случаем не из MDI child формы вызываете модальную форму.
да
Ну хорошо бы посмотреть на оригинальную ругань.
В экземпляре не задана ссылка на объект. (стоит Rus langpack)

И привидите код adpSD. DataAdapterа

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
            Dim ocmdSD As New OleDb.OleDbCommand("spSelectVeksVyb", ocnn)
            Dim adpSD As New OleDb.OleDbDataAdapter
            Dim iKot As String
            Dim iBal As Integer = - 1 
            If Me.tbKot.Text = "1" Or Me.tbKot.Text = "2" Then
                iBal =  0 
            End If

            ocmdSD.CommandType = CommandType.StoredProcedure
            ocmdSD.Parameters.Add("@paramBal", iBal)
            ocnn.Open()
            adpSD.SelectCommand = ocmdSD
            adpSD.Fill(dsSD, "spVeks")
код хранимки приложил в .txt
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32529894
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ошибочка вышла, вместо этого попробуйте так:
Код: plaintext
1.
2.
3.
Dim myOwner As FormNewSd
myOwner = CType(myOwner, FormNewSd)
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks")

пробуйте так:
Код: plaintext
1.
2.
3.
Dim myOwner As FormNewSd
myOwner = CType(Me.Owner, FormNewSd)
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks")

Но это сработает если вы не пытаетесь открыть модальный диалог из MDI-Child формы.

И еще вопрос по логике работы: вы после того как получили выделенные строки из грида, где их изменяете? В модальной форме или в основной?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530194
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
myOwner = CType(Me.Owner, FormNewSd)
ругань: Specified cast is not valid.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530197
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
открываю диалог из починенной mdi формы
выделенные в модальной форме строки редактирую уже в основной
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530227
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Значит все таки из Mdi - child запускаете модальную форму.
Тогда делаем вместо этого:
Код: plaintext
1.
2.
3.
Dim myOwner As FormNewSd
myOwner = CType(Me.Owner, FormNewSd)
ugSelVeks.DataSource = myOwner.dsSD.Tables("spVeks")

Так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim myOwner As MainForm ' поставьте вместо MainForm название своего класса  главной формы
myOwner = CType(Me.Owner, MainForm)
Dim myForm as Form
Dim myFormNewSD as FormNewSd = Nothing
For each myForm in myOwner.MdiChildren
   if (myForm.Name = "FormNewSd" Then
      myFormNewSD = CType(myForm , FormNewSD)
      Exit For
   End If
Next
If myFormNewSD is nothing then
  MsgBox("Не порядок")
Else
    ugSelVeks.DataSource = myFormNewSD.dsSD.Tables("spVeks")
End if

>открываю диалог из починенной mdi формы
>выделенные в модальной форме строки редактирую уже в основной

То есть я так понял из главной формы открываете подчиненную Mdi-child и этой подчиненной открываете Modal dialog выбираете записи , возвращаетесь в подчиненную Mdi-Child и здесь их редактируете?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530338
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
работать модальная по вновь утвержденному плану стала :) спасибо :)
правда теперь при каждом вызове модальной строки в гриде умножаются ...

То есть я так понял из главной формы открываете подчиненную Mdi-child и этой подчиненной открываете Modal dialog выбираете записи , возвращаетесь в подчиненную Mdi-Child и здесь их редактируете?
да. потом я их ещё копировать хочу
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530395
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>правда теперь при каждом вызове модальной строки в гриде умножаются

Интересно посмотреть, в очередной раз :-) , полученный код. С разъяснением что хотелось бы получить при определенных операциях.

Если надо чтобы при каждом вызове модальной формы строки в гриде очищались то можно поставить Dim dsNewSD as DataSet = dsSD.Clone() перед вызовом модальной формы.

Другим способом: можно объявить с модификтором Friend dsNewSD в форме из которой вызываете модальный диалог.
Код: plaintext
1.
Friend dsNewSD as DataSet
А в Load модальной формы тогда сделать так:
Код: plaintext
1.
2.
  myFormNewSD.dsNewSD  = myFormNewSD.dsSD.Clone() 
  ugSelVeks.DataSource = myFormNewSD.dsSD.Tables("spVeks")
Теперь при каждом запуске dsNewSD будет создаваться пустым заново с той же самой структурой что и dsSD.

Если эта функциональность ненужна, то напишите какая именно функциональность нужна. Чем подробнее все будет расписано тем лучше :-)
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530425
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
дублирование строк я избежал каждый раз перед заполнением делая dsSD.Clear()
а вот проблема названия топика осталась :(
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530455
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все проблемы решаемы :-)
Ну тогда еще раз подробно ответьте на предыдущий мой пост.
И привидите (можно прикрепить файлом) "теперешний" код. Туда навставляем необходимых проверок и выясним в чем проблема.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530488
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот теперешний код:
код формы, код модальной формы и код хранимки заполняющей грид модальной формы
может быть потому как набор возврашаюшийся хранимкой из модальной формы по структуре
различается с структурой таблицы бд в которую я этот набор обновляю, в частности там изменены названия полей (... as ...)
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530490
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530491
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530751
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530827
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я так понял у вас сейча dsNN - это бывший dsNewDS?
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530936
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да
я там по разному пробовал
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32530975
Sa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну вам надо добиться чтобы везде в коде был один DataSet,
dsNN пусть теперь называется, он должен быть привязан к TableMappings раз у вас там таблица называется по другому, + к этому надо через ColumnMapping добиться соответствие всех полей в хранимой процедуре с полями таблицы spVeks из dsNN.

И я заметил что в Update
Код: plaintext
1.
 OleDbDataAdapter1.Update(dsNewSD)
у вас стоит dsNewDS, сюда тоже обязательно надо поставить dsNN.
...
Рейтинг: 0 / 0
обновления из грида в базу
    #32531202
hmsa
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
пилять!
АААА!
сделал хранимку для грида модальной формы аналогичную хп UpdateCommand грида основной формы - и вот оно - обновляет и не жужит!
ну не хотелось в модальной тянуть весь набор данных, но ладно буду в гриде форматить столбцы .
спасибо SA !
я ещё вернусь :)
...
Рейтинг: 0 / 0
60 сообщений из 60, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / обновления из грида в базу
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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