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

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

Ну т.е. взял тестовую БД 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
19.01.2011, 06:44
    #37065838
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset objRecSet_RecordChangeComplete ругается
Дмитрий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
19.01.2011, 07:26
    #37065859
Дмитрий77
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset objRecSet_RecordChangeComplete ругается
Если сделать вот так
Код: 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
19.01.2011, 10:10
    #37065998
Antonariy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset objRecSet_RecordChangeComplete ругается
Иду параллельно в БД через MS Access, правлю чего нибудь в таблице.
Молчит-с. А надо чтоб сказало "OK".И не скажет. В рекодсете находится копия данных из базы. Сообытие относится к изменениям в рекодсете, а не базе.
...
Рейтинг: 0 / 0
19.01.2011, 10:53
    #37066115
Shocker.Pro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ADODB.Recordset objRecSet_RecordChangeComplete ругается
Дмитрий77Хочу поиграться с отловом изменений в RecordSet (ну не таймером же ее долбать, как-то не солидно)
Даже если б рекордсет умел отслеживать "чужие" изменения в таблице БД - он все равно бы это делал по таймеру.

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

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


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

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


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

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


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