Обновление грида

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Обновление грида

Сообщение sergey-911 » 08.01.2007 (Пн) 23:06

Доброго времени суток уважаемые. Как при многопользовательском использовании БД сделать так, чтобы каждый пользователь в форме с гридом видел РЕАЛЬНОЕ содержание БД, а не снимок на какой либо момент времени. Ничего умнее, чем обновление (по таймеру) БД я ни предумал. Можно, конечно, обновлять содержимое, по какому-либо событию, но всё-равно, не то, что хотелось бы получить в результате. :( Возможно ли так сделать? Заполняю и обновляю грид так, как показано ниже.
Код: Выделить всё

'Подключение к БД
Dim rs As ADODB.Recordset
   
Private Sub Form_Load()
On Error GoTo Er

    Screen.MousePointer = vbHourglass
   
    'Подключение к БД
    Dim cn As ADODB.Connection
    Set cn = New ADODB.Connection
    cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb;Persist Security Info=False"
   
    'Параметрический запрос
    'Обработка БД на VB6 стр. 500
    Dim cm As ADODB.Command
    'Dim rs As ADODB.Recordset
    Dim p As ADODB.Parameter
   
    'Зоздание и иниализация объекта Recordset
    Set rs = New ADODB.Recordset
    Set rs.ActiveConnection = cn
    'Грид поддерживает только клиентский курсор
    rs.CursorLocation = adUseClient
    rs.LockType = adLockOptimistic
    rs.CursorType = adOpenDynamic
    'Создание объекта ADO command
    Set cm = New ADODB.Command
    Set cm.ActiveConnection = cn
   
    cm.CommandType = adCmdTable
    cm.CommandText = "Authors"
   
    'Выполнение команды
    rs.Open cm                  'Вместо "Set rs = cm.Execute", _
    т.к. "cm.Execute" выполняет "SP" на серверном курсоре!
   
    'Заполняем грид
    TDBGrid1.DataSource = rs
           
    Screen.MousePointer = vbDefault

Exit Sub
Er:
Set Find = Nothing
Screen.MousePointer = vbDefault
MsgBox "Error " & Err.Number & ": " & Err.Description, vbOKOnly + vbCritical, "Error"
End Sub

Private Sub Timer1_Timer()
On Error GoTo Er

    Dim i As Long
    Dim c As Integer
    i = rs.AbsolutePosition
    c = TDBGrid1.Col
    'Обновление грида
    Call Form_Load
    rs.AbsolutePosition = i
    TDBGrid1.Col = c
    DataGrid1.SetFocus
   
Exit Sub
Er:
Err.Clear
End Sub

Не сочтите вопрос глупым, я уже давно пытаюсь решить его! :roll:
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 6:57

Если ты всё-таки решишь этот вопрос, работа пользователей с гридом превратится в кошмар...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

FaKk2
El rebelde gurú
El rebelde gurú
Аватара пользователя
 
Сообщения: 2031
Зарегистрирован: 09.03.2003 (Вс) 22:10
Откуда: Los Angeles

Сообщение FaKk2 » 09.01.2007 (Вт) 7:02

Ага, представь себе, только юзер прицелился как строка, хоп! и пропала.

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 09.01.2007 (Вт) 7:20

Думал над этим. Другой вариант... Юзер прицелился изменять строку, а строки уже давно нет! :D
С уважением, Сергей.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 09.01.2007 (Вт) 7:40

Юзер изменил строку, нажал ОК, прога запустила тщательно спроектированную хранимую процедуру, которая не нашла нужной записи, и сказала пользователю: "Эта строка удалена кем-то, пока вы спали". Да, а как ещё?
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 09.01.2007 (Вт) 11:18

Согласен с GSerg'ем.

Если пользователей немного, то они договорятся между собой, чтобы не мешать друг другу. А если много, то стоит подумать о разграничении доступа, чтобы область данных доступных для редактирования для разных пользователей не пересекалась. Что-то вроде ответственного за свой участок сотрудника.
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.

tyomitch
Пользователь #1352
Пользователь #1352
Аватара пользователя
 
Сообщения: 12822
Зарегистрирован: 20.10.2002 (Вс) 17:02
Откуда: חיפה

Сообщение tyomitch » 09.01.2007 (Вт) 11:23

VVitafresh писал(а):Согласен с GSerg'ем.

Если пользователей немного, то они договорятся между собой, чтобы не мешать друг другу. А если много, то стоит подумать о разграничении доступа, чтобы область данных доступных для редактирования для разных пользователей не пересекалась. Что-то вроде ответственного за свой участок сотрудника.

Ну надо же -- на thedailywtf как раз про такую систему на днях писали :-D
http://thedailywtf.com/Articles/A_Show_of_Hands.aspx
Изображение

sergey-911
Постоялец
Постоялец
 
Сообщения: 545
Зарегистрирован: 17.01.2005 (Пн) 19:10

Сообщение sergey-911 » 09.01.2007 (Вт) 18:21

Я тоже согласен с GSerg'ем и VVitafresh'ом. Хотел убедиться, что посылать пользователю сообщения с просьбой "проснуться" - это единственный верный способ. :cry:
Занимательная статья tyomitch. :D
Всем спасибо!
С уважением, Сергей.

VVitafresh
Продвинутый гуру
Продвинутый гуру
Аватара пользователя
 
Сообщения: 1641
Зарегистрирован: 12.05.2005 (Чт) 14:44
Откуда: Херсон, UA

Сообщение VVitafresh » 10.01.2007 (Ср) 13:33

Статья прикольная.

Хоть там и сказано о "разделении" данных между пользователями с большой иронией, реально это применяется на практике.
Есть, допустим, операционист, который "ведет" своих клиентов и отвечает за правильность всех введенных данных. Логично, что доступ к редактированию данных есть только у него (ну и у вышестоящего руководителя, например).
Никакую проблему невозможно решить на том же уровне, на каком она возникла. Нужно стать выше этой проблемы, поднявшись на следующий уровень.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, SemrushBot и гости: 102

    TopList