Гость
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / DBGrid Уффффф / 22 сообщений из 22, страница 1 из 1
06.03.2003, 15:44
    #32115712
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Товарищи выручайте!

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

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

Заранее благодарен...
...
Рейтинг: 0 / 0
06.03.2003, 17:49
    #32115915
кузя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
это не проблема grid'a
это проблема в том, как ты создаешь recordset'ы для отображения и редактирования пользователями.
...
Рейтинг: 0 / 0
06.03.2003, 18:24
    #32115955
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Вот пример создания моего 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
06.03.2003, 19:42
    #32116058
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
НУ кто-нибудь................................ :(````
...
Рейтинг: 0 / 0
07.03.2003, 10:03
    #32116223
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
вот еще тонкость: 1-ый пользователь меняет запись, второй пользователь меняет эту же запись и нажимает ENTER, я отлавливаю нажатие и делаю DBGrid.DataChanged = True для того чтоьы данные ушли в базу. Он ругается, что дынные были изменены. Тогда я подумал надо обновить сам rs. Написал:

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

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

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

Люди если у вас есть хоть капля сожеления, поомоогитеее!!!
Я уже спать перестал и ем редко :). Помогите прошу!!!
...
Рейтинг: 0 / 0
11.03.2003, 08:39
    #32117102
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Ну хоть кто-нить подскажите.........
...
Рейтинг: 0 / 0
11.03.2003, 09:43
    #32117129
Senin Viktor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Брось ты DataGrid к чертям (и судя по твоим постам, ты это сделаешь очень скоро)
Используй ListView на необновляемым с ForwardOnly типом рекордсетом, а данные редактируй в отдельной формочке. Имхо, так будет лучше (все только смотрят - захотел ввести/отредактировать, пожалуйста, но только 1 запись)
Хотя это сугубо мое мнение по поводу организации работы пользователей в сети.
...
Рейтинг: 0 / 0
12.03.2003, 09:48
    #32117972
Sharky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Всё конечно здорово и я бы брасил 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
12.03.2003, 14:01
    #32118293
sgs
sgs
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DBGrid Уффффф
Попробуй сделай так :

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

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

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


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