powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
25 сообщений из 29, страница 1 из 2
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35277895
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В одной формочке происходит добавление записи в таблицу БД ACCESS:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Dim cn As New ADODB.Connection

'Соединение с базой данных
  Call PerformADOConnection(cn)

'Добавление в Variants
   cn.Execute "INSERT INTO Variants (VariantNum, Step, ElementCode, work_code, WorkPlaceID, RoutingID) " & _
              "VALUES (" & cVariantNum & ", '" & txtStep.text & "', '" & cPart & "', '" & cWork_code & "', '" & cRM_code & "', " & cRoutingID & ")"

В модуле процедурка обновляет MSFlexGrid сразу после добвления новой записи:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
'Заполняем таблицу новым маршрутом
Public Sub DrawNewRoute(cn As ADODB.Connection, frmName As Form)
   
   Dim str_sql As String
   Dim rst As ADODB.Recordset
   Set rst = New ADODB.Recordset
          
   Call CloseADOConnection(cn)
   Call PerformADOConnection(cn)
    
   str_sql = "SELECT ..."
             
   rst.Open str_sql, cn, adOpenDynamic, adLockReadOnly, adCmdText
   rst.Requery

   rst.MoveLast
   rst.MoveFirst

   MsgBox rst.RecordCount
Суть в том, что при добавлении в таблицу с тремя записями четвертой, rst.RecordCount все равно равен 3. Однако, если скопировать текст запроса обновления (str_sql) в буфер, потом запустить в ACCESS`e, сразу после добавления, то возвращается верное число записей, т.е. 4.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35278483
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35278902
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо душевное. Не знал этого...
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279261
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, проблема остается. В статье сказано использовать одно соединение для записи и чтения, но я и так это делаю. Из первого поста видно, что везде используется cn As ADODB.Connection
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279411
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: h7h2vC
> Нет, проблема остается. В статье сказано использовать одно соединение
> для записи и чтения, но я и так это делаю. Из первого поста видно, что
> везде используется cn As ADODB.Connection

То что они одинаково называются не означает что это есть одно и тоже
соединение.

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

А вставленная запись в базе есть?

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279444
TIKO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
можно так
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
Dim con As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim comm As New ADODB.Command
con.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Dbases\db.mdb;Uid=Admin;Pwd=;"
With comm
    .ActiveConnection = con
    .CommandText = "insert into table_name (t_id,t_name) values (51,'÷òî - òî')"
    .Execute
End With
With rs
    .ActiveConnection = con
    .LockType = adLockReadOnly
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .Open "select * from table_name"
End With
MsgBox rs.RecordCount
Set MSHFlexGrid1.DataSource = rs
а можно создавать и открывать соединение при начале работы программы и закрывать при выходе из программы, так все объекты ADO будут иметь одно соединие
в модуле
Код: plaintext
1.
2.
3.
4.
Public con As New ADODB.Connection
Sub main()
con.Open "Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\Dbases\db.mdb;Uid=Admin;Pwd=;"
Form1.Show
End Sub

в форме
Код: 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.
Private Sub Command1_Click()
Dim rs As New ADODB.Recordset
Dim comm As New ADODB.Command
With comm
    .ActiveConnection = con
    .CommandText = "insert into table_name (t_id,t_name) values (51,'÷òî - òî')"
    .Execute
End With
With rs
    .ActiveConnection = con
    .LockType = adLockReadOnly
    .CursorLocation = adUseClient
    .CursorType = adOpenDynamic
    .Open "select * from table_name"
End With
MsgBox rs.RecordCount
Set MSHFlexGrid1.DataSource = rs
rs.Close
Set comm = Nothing
Set rs = Nothing
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
    If con.State = adStateOpen Then con.Close

End Sub
где startup object в совойствах проека =Sub Main
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279792
Фотография %?*?%
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
h7h2vC... я и так это делаю.

Нет, не так:

Код: plaintext
1.
2.
   Call CloseADOConnection(cn) 'соединение 1 закрылось
   Call PerformADOConnection(cn) 'соединение 2 открылось

Попробуйте после повторного открытия вызвать JRO.RefreshCache cn.
Или убрать это закрытие/повторное открытие.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279954
nrmBeginner
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А разве соединение не "коммитит" изменения в базу при закрытии?
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35279978
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я переписал код, но проблема не решилась.
JRO.RefreshCache cn - пробовал, как и все, что было в статье. И как все, до чего только мог еще додуматься.

На данный момент код такой:
1) в начале работы программы, в модуле открываем соединение и не закрываем его до конца работы программы:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Public cn As New ADODB.Connection
...
'Открытие соединения
      cn.CursorLocation = adUseClient
      cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
            "Persist Security Info=False;Data Source=" & my_base.Name & _
            ";Jet OLEDB:Database Password=" & pwd & "; Mode=Read|Write"

2)Заносим запись в базу (запись заносится верно, это видно в ACCESS`е)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
'Добавление
   cn.BeginTrans 
   cn.Execute "INSERT INTO Table (...) " & _
              "VALUES (...)"
   cn.CommitTrans
   
'Обновление
Call DrawNewRoute(m_w)

3) Пытаемся считать (в другом модуле):
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub DrawNewRoute(frmName As Form)
   
   Dim str_sql As String
   Dim rst As New ADODB.Recordset
     
   str_sql = "SELECT ..."
                                       
   rst.Open str_sql, cn, adOpenDynamic, adLockReadOnly, adCmdText
   rst.Requery
   ...
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280001
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
adOpenDynamic на статик замените
и курсор у рекодсета клиентский поставь
Requery вообще лишнее:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
Public Sub DrawNewRoute(frmName As Form)
   
   Dim str_sql As String
   Dim rst As ADODB.Recordset
     
   str_sql = "SELECT ..."
                  

   Set rst= New ADODB.Recordset
   Set rst.ActiveConnection=cn
   rst.CursorLocation=adUseClient                    
   rst.Open str_sql, , adOpenStatic, adLockReadOnly, adCmdText
   
   ...
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280012
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One, только что сделал - не помогает
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280023
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вы точно уверены , что у вас записи добавляются на CommitTrans?
может у вас RollBack происходит.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280028
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте без транзакций вообще
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280043
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Убрал транзакцию - бестолку. Не знаю насчет RollBack, сразу после добавление делаем брейкпойнт и запускаем запрос в ACCESS`е - новую запись видно
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280056
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
попробуйте работать с закрытым акцесом, пусть выполняется только код.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280073
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Закрыл - бестолку...
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280080
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
выполните так:

Код: plaintext
1.
2.
3.
4.
5.
6.
SQL="INSERT INTO Variants (VariantNum... VALUES (" & cVariantNum ...
...

SQL="SELECT VariantNum FROM Variants WHERE VariantNum=" & cVariantNum 
rs.Open SQL ...

MsgBox rs!VariantNum 
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280113
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если все делать в одном месте (форме, модуле) - новые записи видно
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280127
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у вас проблемы с соединением, передавайте свой объект ADODB.Connection как параметр в нужные вам процедуры и там его используйте.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280190
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Собственно так и делал. И сделал снова
Код: plaintext
1.
2.
3.
4.
5.
'Добавление в Variants
   cn.Execute "INSERT INTO Variants (...) " & _
              "VALUES (...)"
    
'Обновление
      Call DrawNewRoute(cn, детали)
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
Public Sub DrawNewRoute(cn As ADODB.Connection, frmName As Form)
   
   Dim str_sql As String
   Dim rst As New ADODB.Recordset

   str_sql = "SELECT ..."
                                          
   Set rst.ActiveConnection = cn
   rst.CursorLocation = adUseClient
   rst.Open str_sql, cn, adOpenStatic, adLockReadOnly, adCmdText
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280219
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и что у вас не получается?
может у вас проблема с отображением содержимого полученного рекордсета?
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280278
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Допустим я делаю rst.Save ... ничего не отображаю пока. Уже записей на одну меньше, чем должно быть
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280400
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь и такой вариант, в одном модуле, не дает нужное число записей:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
cn.Execute "INSERT ..."
      
   Dim str_sql As String
   Dim rst As New ADODB.Recordset
       
   str_sql = "SELECT ..."
                                          
   rst.CursorLocation = adUseClient
   rst.Open str_sql, cn, adOpenStatic, adLockReadOnly, adCmdText
       
       rst.MoveLast
       rst.MoveFirst
       
    MsgBox rst.RecordCount
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280440
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мне не понятна ваша проблема, от rs.save никак не может запись пропадать, так как это обычная сериализация рекордсета в файл на диске.
...
Рейтинг: 0 / 0
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
    #35280477
h7h2vC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Никто не обвиняет save в пропажи записи =) Я хочу сказать, что на момент SELECT`а в рекордсет, в нем записей на 1 меньше требуемых
...
Рейтинг: 0 / 0
25 сообщений из 29, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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