Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите пожалуйста с DBGrid Добавлено: 12.03.03 11:21  

Автор вопроса:  Sharky

                Уважаемые посетители форума, помогите начинающему программеру. У меня проблема. На форме DBGrid, который соединяется с SQL Server 2000. Была поставлена задача, чтобы пользователи могли просматривать и редактировать данные одновременно. С сервером я соеденился, данные отобразил, редактирование то же работает, но............. Редактировать даные может только один пользователь. То есть, если один отредактировал запись, то другой пользователь(если он не обновил DBGrid) после редактирования той же записи и попытке её сохранить(т.е. уйти на другую запись) получает сообщение:

Row cannot be located for updating. Some values may have been changed since it was las read.

Вот моя процедура подключения к базе:

Public Sub procConnection(Optional sql As String, Optional rs As ADODB.Recordset, Optional Disconnect As Integer)
 Dim cn As ADODB.Connection
 Dim sINIFile As String
 Dim sServerName As String

 Set cn = New ADODB.Connection
      cn.CursorLocation = adUseClient
      cn.ConnectionString = "driver={SQL Server};" & _
                                       "server=" & sServerName & ";database=" & strBD
      cn.ConnectionTimeout = 30
      cn.Open

 
 rs.CursorType = adOpenKeyset
 rs.LockType = adLockOptimistic
 rs.Open sql, cn
 
End Sub

         При использовании  "cn.CursorLocation = adUseServer " DBGrid не даёт вообще ни одному пользователю редактировать записи. Если к "cn.CursorLocation = adUseServer " добавить ещё "rs.CursorType = adOpenDynamic", то невозможно загрузить в DBGrid данные "Set DBGrid.DataSource = rs"

Помогите пожалуйста, я уже неделю с этим бьюсь  :( 

Ответить

  Ответы Всего ответов: 7  

Номер ответа: 1
Автор ответа:
 Sharky



Вопросов: 1
Ответов: 4
 Профиль | | #1 Добавлено: 12.03.03 13:05

Ну кто- нить помогите!!!

Ответить

Номер ответа: 2
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #2 Добавлено: 12.03.03 14:53

А ты не пробовал отключиться от базы, изменять данные, а потом обновлять?

Или, как я делал, например:

грид - не редактируемый

 - нажимает юзер кнопку редактировать, грид прячется, на его месте обыкновенные текст.боксы или комбо боксы, после изменений обновляешь db.Execute "INSERT INTO ..." или апдейт, смотря что нужно, если изменение, то номер поля ИД беру с грида, а WHERE нахожу нужную запись

Ответить

Номер ответа: 3
Автор ответа:
 Alliancce



Вопросов: 4
Ответов: 10
 Профиль | | #3 Добавлено: 12.03.03 15:11

А Update как идет, он может идти по RowId, который имеет каждая строка в любом SQL сервере, и на некоторых серверах он все время генерится заново при обновлении строки, и если один клиент изменил строку, то другой ее просто не найдет в базе.

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

Ответить

Номер ответа: 4
Автор ответа:
 Sharky



Вопросов: 1
Ответов: 4
 Профиль | | #4 Добавлено: 12.03.03 15:44

А как это по ключу? Не мог бы ты показать примером каким-нить?

Ответить

Номер ответа: 5
Автор ответа:
 SHDZ



ICQ: 209382104 

Вопросов: 39
Ответов: 244
 Профиль | | #5 Добавлено: 12.03.03 16:02

К Alliancce

имеешь ввиду простое ключевое поле, или что-то другое, если другое,  то под какой СУБД?

Ответить

Номер ответа: 6
Автор ответа:
 HardNik



Вопросов: 0
Ответов: 3
 Профиль | | #6 Добавлено: 12.03.03 16:16
Извеняюсь за свою дремучесть, но ведь Вы сами выставили LockType = adLockOptimistic ,так что же Вы хотите с такой блокировкой?

Ответить

Номер ответа: 7
Автор ответа:
 Sharky



Вопросов: 1
Ответов: 4
 Профиль | | #7 Добавлено: 13.03.03 08:41

А скакой надо?

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам