powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBGrid Уффффф
22 сообщений из 22, страница 1 из 1
DBGrid Уффффф
    #32115712
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Товарищи выручайте!

У меня DBGRid с которым должно работать много пользователей. Ну те база на SQL 2000 и юзера из моей проги её юзают. Так вот, если один отредактировал строку, то другой юзер пока не обновит DBGrid не сможет эту запись редактировать, т.е. сможет, но выскочит ошибка, что DBGrid не может найти запись .

В итоге надо обновлять именно одну строку, как только на неё попадает курсор, потому что обновлять все записи это плохо :), вдруг их будет 10000 .

Заранее благодарен...
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32115915
кузя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не проблема grid'a
это проблема в том, как ты создаешь recordset'ы для отображения и редактирования пользователями.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32115955
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот пример создания моего recordset'а:
В модуле есть процедура:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
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

'Это для INI файла, не важно вобщем :)
 sINIFile = App.Path &  "\SPKP.INI" 

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

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


А вот к ней обращение, ну грубо говоря загрузка в DBGrid:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Form_Load()
Dim sql As String
Dim rsUUU As New ADODB.Recordset

sql =  "select * from Main" 
procConnection sql, rsUUU
Set dgUchrov.DataSource = rsUUU
end sub


Подскажите пожалуйста, что не так :(
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116058
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НУ кто-нибудь................................ :(````
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116223
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот еще тонкость: 1-ый пользователь меняет запись, второй пользователь меняет эту же запись и нажимает ENTER, я отлавливаю нажатие и делаю DBGrid.DataChanged = True для того чтоьы данные ушли в базу. Он ругается, что дынные были изменены. Тогда я подумал надо обновить сам rs. Написал:

rs.Requery ' Update тоже пробывал
DBGrid.DataChanged = True

Но ошибка таже :(
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116284
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А тебе надо чтоб Все изменения сразу уходили на всех клиентов?
И какая логика по изменению строки? те Что надо делать если одну строку отредактировали двое? сохранить изменения первого юзера и не применять изменения второго юзера или записать изменения первого и на них наложить изменения второго?
И ихмно - применять грид для отображения тех записей которые могит одновременно редактировать несколько пользователей не стоит особ на прямом (не отсоединенном )рекодсете.
К стати не у тебя первого возникла такая проблема - все начинающие с ней сталкиваются :))
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116298
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо чтоб , кто последний ввеёл данные, те данные и передались в базу. Но дело в том, что при добавлении в (отредактируюмую запись другим юзером)идёт ошибка

Код: plaintext
1.
Row cannot be located for updating. Some values may have been changed since it was last read.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116312
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ёще вопрос,а что применять если не грид ?
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116405
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
тогда делаешь источник отсоединенным - при апдейте подсоелиняешь и обновляешь - потом снова отсоединяешь.
Или вообше делаешь так что запись находиться на редактирование только у одного клиента.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116406
dao
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
На сегодня усё - началось празднование
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32116445
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо DAO что хоть ты отзываешсья на мои крики о помощи. Только вот надо не отсоединнёным соединением, а так сказать онлайн. Ведь должен быть какой-то выход. Я уверен, что многие писали проги для БД и основная задача таких прог это многопользовательский режим работы с данными. И опять же я уверен, что для отображения они использовали какой-нить GRid, конкретно в моей ситуации DBGrid.

Люди если у вас есть хоть капля сожеления, поомоогитеее!!!
Я уже спать перестал и ем редко :). Помогите прошу!!!
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32117102
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну хоть кто-нить подскажите.........
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32117129
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брось ты DataGrid к чертям (и судя по твоим постам, ты это сделаешь очень скоро)
Используй ListView на необновляемым с ForwardOnly типом рекордсетом, а данные редактируй в отдельной формочке. Имхо, так будет лучше (все только смотрят - захотел ввести/отредактировать, пожалуйста, но только 1 запись)
Хотя это сугубо мое мнение по поводу организации работы пользователей в сети.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32117972
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё конечно здорово и я бы брасил DBGrid, но если так всё бросать успехов в программировании не добьёшься. Это чисто моё мнение.
Теперь по делу:
Я изменил коннект и теперь при загрузке нельзя редактировать GRid. Честно говоря не знаю, что и делать и где копать. По этому прошу если кто знает из Монстров VB, то подскажите пожалуста.

Вот новый коннект:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
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.ConnectionString =  "driver={SQL Server};"  & _
                                        "server="  & sServerName &  ";database="  & strBD
         cn.ConnectionTimeout =  30 
         cn.Open

 
rs.CursorType = adOpenKeyset
rs.LockType = adLockOptimistic
rs.CursorLocation = adUseServer

rs.Open sql, cn

End Sub


Да и по поводу 'adOpenDynamic', почему он ругается на:
Код: plaintext
1.
Set DBGrid.DataSource = rs


Заранее благодарен.....
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32118293
sgs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Попробуй сделай так :

по событию ADODataSet OnPostError напиши : Action := daAbort ;
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32118303
sgs
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Извиняй - это для Делфи так решается проблема.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32118309
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
:(
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32118667
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>Всё конечно здорово и я бы брасил DBGrid, но если так всё бросать успехов в программировании не добьёшься. Это чисто моё мнение.

Точно. "Через терни - к зведам"
Только этот путь времени займет долго...

З.Ы.
А что в переменной sql? Обновляем ли запрос сам по себе?
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32118886
Sharky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Запрос обновляем. Только, я в полной растерянности и не знаю, что делать.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32120615
h15_bh
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Знакомая проблема. Не очень хорошо описана даже в MSDN'ке. Итак: для того, чтобы все юзеры в многопользовательской среде видели все изменения, которые были сделаны другими пользователями, необходимо, чтобы рекордсет с данными был открыт в adOpenKeyset (adOpenDynamic позволяет увидеть еще и добавленные записи - но это очень долго). Причем при этом необходимо, чтобы было CursorLocation=adUseSever (а для adUseClient можно только adOpenStatic - при этом ты не увидишь никаких чужих изменений). Это что касается теории. На практике у меня не получилось доьиться видимости чужих изменений на ODBC драйвере (это там где провайдер "msdasql"), получилось только на OLE DB провайдере (т.е. там где "sqloledb"). Причем при неспособности открыть нужный тебе курсор не будет выдаваться шибок - поэтому необходимо с этим бороться. Можно пробовать свойство Supports у рекордсета, но это не дает необходимой диагностики с типом курсора, поэтому я предлагаю просматривать динамические свойства у Connection - сразу видно много интересного, хотя описания этих свойств я не нашел (может просто плохо искал). Однако названия этих свойств достаточно прозрачны для понимания того, что они означают.
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32127674
igorilla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
2 Senin Viktor:
Туплю, но как пользоваться ListView для отображения данных из базы?
Не нашел ничего похожего на rowsource или datasource...
Или я не тот компонент смотрю? Я так понял, что речь идет про стандартный компонент из MS Windows Common Controls...
...
Рейтинг: 0 / 0
DBGrid Уффффф
    #32127922
Фотография Senin Viktor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
см. мой ответ Чемберлену\r
/topic/26786\r
\r
Не понятно, расскажу подробнее (мне год назад тоже хороший человек помог, теперь вот других учу :-)
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBGrid Уффффф
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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