powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Recordset objRecSet_RecordChangeComplete ругается
8 сообщений из 8, страница 1 из 1
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37065816
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Реализовать БД безобидным способом.

Типа сказал себе "можем начать" и приступил для начала к голым тестам, то есть пытаться делать в тест проекте чего раньше не умел.

Ну т.е. взял тестовую БД test.mdb с таблицей TestTable
Хочу поиграться с отловом изменений в RecordSet (ну не таймером же ее долбать, как-то не солидно)
Прочитал вот это:
http://vbautomation.110mb.com/ACCESS/ADO/ADO_WillChangeRecord_%20RecordChangeComplete_Events.htm
Накатал пока вот это:
Код: 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.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
Option Explicit

    Private AdoConnection   As ADODB.Connection
    Private WithEvents objRecSet As ADODB.Recordset

Private Sub CommandReadData_Click()
    objRecSet.MoveFirst
    MsgBox objRecSet.Fields("Телефон")
End Sub

Private Sub Form_Load()
    Dim ConnectionString As String
    Dim Baza As String
    Dim Table As String
    Dim kritBD As String
    Baza = "test.mdb"
    Table = "TestTable"
    kritBD = "Выполнено = 'нет'"
    Set AdoConnection = New ADODB.Connection 'CreateObject("ADODB.Connection")
    Set objRecSet = New ADODB.Recordset  'CreateObject("ADODB.Recordset")
    ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Baza & ";Mode=Share Deny None;Persist Security Info=False"
    AdoConnection.Open ConnectionString
    objRecSet.CursorType = adOpenStatic
    objRecSet.LockType = adLockOptimistic
    objRecSet.Open "SELECT * FROM " & Table & " WHERE " & kritBD, AdoConnection
End Sub

Private Sub Form_Unload(Cancel As Integer)
    objRecSet.Close
    AdoConnection.Close
End Sub
' Note how the object name, objRecSet, is incorporated into the event Sub name
Private Sub objRecSet_RecordChangeComplete(adReason As ADODB.EventReasonEnum, _
   cRecords As Long, _
   ByVal pError As ADODB.Error, _
   adStatus As ADODB.EventStatusEnum, _
   ByVal pRecordset As ADODB.Recordset)

' place any code you desire here, for example
If adStatus = adStatusErrorsOccurred Then
   Dim objError As ADODB.Error
   For Each objError In pRecordset.Errors
      Debug.Print vbTab; objError.Description
   Next
End If

End Sub
При запуске тыкает меня носом в строчку:
Private Sub objRecSet_RecordChangeComplete
и ругается:
Compile error:
Procedure declaration does not match description of events or procedure having the same name

Подключал msado25.tlb (но от версии 2.5;2.6;2.7 это не зависит)

Пока идей нету. Если дальше пойдет такими темпами, не видать мне прелестей БД как своих ушей.
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37065838
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77При запуске тыкает меня носом в строчку:
Private Sub objRecSet_RecordChangeComplete
и ругается:
Compile error:
Procedure declaration does not match description of events or procedure having the same name

Ну вроде погуглил,
Код: plaintext
1.
2.
3.
4.
5.
6.
Private Sub objRecSet_RecordChangeComplete(ByVal adReason As ADODB.EventReasonEnum, _
   ByVal cRecords As Long, _
   ByVal pError As ADODB.Error, _
   adStatus As ADODB.EventStatusEnum, _
   ByVal pRecordset As ADODB.Recordset)
MsgBox "ok"
...
ругаться перестало,
но и заработать не заработало.
Хочу получить MsgBox "ok"
Иду параллельно в БД через MS Access, правлю чего нибудь в таблице.
Молчит-с. А надо чтоб сказало "OK".
Что не так?
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37065859
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если сделать вот так
Код: plaintext
1.
2.
3.
Private Sub Command1_Click()
    objRecSet.AddNew
    objRecSet.Update
End Sub
то objRecSet_RecordChangeComplete срабатывает, причем без .Update -1раз а с .Update -2 раза
Но мне надо
1) прога1(другая) делает добавление/изменение в таблице
2) прога2(текущая) это изменение считывает как только так сразу

Попробовал так
objRecSet.CursorType = adOpenDynamic
но не помогает.

На правки из Access не реагирует.

Какие флаги/курсоры и т.п. надо устанавливать?
Чтобы с БД работало одновременно несколько exe, и изменения сделанные другим exe отлавливались?

Причем должна быть возможность read/write со стороны разных exe, и "комфортная работа", т.е. без "хочу записать, а там заблокировано" и без "кто-то чегой-то записал, а я об этом не узнал".

Писать, читать, удалять могут 1)прога1; 2)прога2...N)прогаN; N+1) User например через графич. интерфейс.
Использовать всякие там data-контролы с Grid-ами не хочу и не буду,
потому что
1) Информация отображается в облагороженный ListView, кот. менять на грубые тупые контролы не хочу
2) Информация из таблицы отображается не совсем линейно, т.е не всегда именно то что в поле, а иногда другое слово/фраза
Т.е. интеллектуальная обработка отображаемого по любому нужна.
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37065998
Фотография Antonariy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Иду параллельно в БД через MS Access, правлю чего нибудь в таблице.
Молчит-с. А надо чтоб сказало "OK".И не скажет. В рекодсете находится копия данных из базы. Сообытие относится к изменениям в рекодсете, а не базе.
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37066115
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дмитрий77Хочу поиграться с отловом изменений в RecordSet (ну не таймером же ее долбать, как-то не солидно)
Даже если б рекордсет умел отслеживать "чужие" изменения в таблице БД - он все равно бы это делал по таймеру.

Ну вот представь - у примеру файл БД открыт на сетевом диске, через NETBIOS по TCP/IP через NAT )). Это единственное установленное соединение с БД. Есть ли у файловой системы какой-то механизм, чтобы в этом случае передать в обратную сторону некое событие, которое могло бы возбудить прерывание на клиенте? По-моему нету.

То есть это только - организация параллельного соединения, по которому будет передаваться прерывание (это если не по таймеру)
В свое время я умудрился заставить SQL2000 отправлять прерывание клиенту по TCP/IP через разрыв этого соединения. Но это нештатная функция.
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37066120
Дмитрий77
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну т.е. не париться, писать изменения в отдельную таблицу и долбить ее таймером?
http://www.sql.ru/forum/actualthread.aspx?tid=821583
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37066208
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: Дмитрий77
> Ну т.е. не париться, писать изменения в отдельную таблицу и долбить ее таймером?


Ну или взять FireBird c его Events :)
Шучу

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
ADODB.Recordset objRecSet_RecordChangeComplete ругается
    #37067532
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос> Автор: Дмитрий77
> Ну т.е. не париться, писать изменения в отдельную таблицу и долбить ее таймером?


Ну или взять FireBird c его Events :)
Шучу

Никаких шуток. Если надо на клиенте получать сообщения от базы, надо брать базу умеющую посылать сообщения.
Называется это push technology. На вскидку это умеют SQL Anywhere и FireFird. Либо опрашивать по таймеру.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADODB.Recordset objRecSet_RecordChangeComplete ругается
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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