Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи / 25 сообщений из 29, страница 1 из 2
24.04.2008, 16:39
    #35277895
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
В одной формочке происходит добавление записи в таблицу БД 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
24.04.2008, 20:25
    #35278483
%?*?%
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
...
Рейтинг: 0 / 0
25.04.2008, 09:04
    #35278902
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Спасибо душевное. Не знал этого...
...
Рейтинг: 0 / 0
25.04.2008, 11:20
    #35279261
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Нет, проблема остается. В статье сказано использовать одно соединение для записи и чтения, но я и так это делаю. Из первого поста видно, что везде используется cn As ADODB.Connection
...
Рейтинг: 0 / 0
25.04.2008, 11:58
    #35279411
Игорь Горбонос
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
> Автор: h7h2vC
> Нет, проблема остается. В статье сказано использовать одно соединение
> для записи и чтения, но я и так это делаю. Из первого поста видно, что
> везде используется cn As ADODB.Connection

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

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

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

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
25.04.2008, 12:06
    #35279444
TIKO
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
можно так
Код: 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
25.04.2008, 13:31
    #35279792
%?*?%
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
h7h2vC... я и так это делаю.

Нет, не так:

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

Попробуйте после повторного открытия вызвать JRO.RefreshCache cn.
Или убрать это закрытие/повторное открытие.
...
Рейтинг: 0 / 0
25.04.2008, 14:14
    #35279954
nrmBeginner
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
А разве соединение не "коммитит" изменения в базу при закрытии?
...
Рейтинг: 0 / 0
25.04.2008, 14:19
    #35279978
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Я переписал код, но проблема не решилась.
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
25.04.2008, 14:25
    #35280001
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
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
25.04.2008, 14:28
    #35280012
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Konst_One, только что сделал - не помогает
...
Рейтинг: 0 / 0
25.04.2008, 14:30
    #35280023
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
вы точно уверены , что у вас записи добавляются на CommitTrans?
может у вас RollBack происходит.
...
Рейтинг: 0 / 0
25.04.2008, 14:32
    #35280028
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
попробуйте без транзакций вообще
...
Рейтинг: 0 / 0
25.04.2008, 14:36
    #35280043
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Убрал транзакцию - бестолку. Не знаю насчет RollBack, сразу после добавление делаем брейкпойнт и запускаем запрос в ACCESS`е - новую запись видно
...
Рейтинг: 0 / 0
25.04.2008, 14:39
    #35280056
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
попробуйте работать с закрытым акцесом, пусть выполняется только код.
...
Рейтинг: 0 / 0
25.04.2008, 14:43
    #35280073
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Закрыл - бестолку...
...
Рейтинг: 0 / 0
25.04.2008, 14:44
    #35280080
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
выполните так:

Код: 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
25.04.2008, 14:52
    #35280113
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Если все делать в одном месте (форме, модуле) - новые записи видно
...
Рейтинг: 0 / 0
25.04.2008, 14:56
    #35280127
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
у вас проблемы с соединением, передавайте свой объект ADODB.Connection как параметр в нужные вам процедуры и там его используйте.
...
Рейтинг: 0 / 0
25.04.2008, 15:12
    #35280190
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Собственно так и делал. И сделал снова
Код: 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
25.04.2008, 15:18
    #35280219
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
и что у вас не получается?
может у вас проблема с отображением содержимого полученного рекордсета?
...
Рейтинг: 0 / 0
25.04.2008, 15:32
    #35280278
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Допустим я делаю rst.Save ... ничего не отображаю пока. Уже записей на одну меньше, чем должно быть
...
Рейтинг: 0 / 0
25.04.2008, 16:01
    #35280400
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Теперь и такой вариант, в одном модуле, не дает нужное число записей:
Код: 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
25.04.2008, 16:14
    #35280440
Konst_One
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
мне не понятна ваша проблема, от rs.save никак не может запись пропадать, так как это обычная сериализация рекордсета в файл на диске.
...
Рейтинг: 0 / 0
25.04.2008, 16:25
    #35280477
h7h2vC
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи
Никто не обвиняет save в пропажи записи =) Я хочу сказать, что на момент SELECT`а в рекордсет, в нем записей на 1 меньше требуемых
...
Рейтинг: 0 / 0
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Выборка из БД ACCESS в ADO Recordset не видит только что добавленной записи / 25 сообщений из 29, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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