powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO Recordset не загружается динамически (adOpenDynamic)
24 сообщений из 24, страница 1 из 1
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606877
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не знаю в чем дело... делал код и на Visual Basic 6.0 и на VBA (Excel)... результат один - датасет не хочет открыватся в динамическом режиме, в чем могут быть проблемы?
(таблицу создал в MS Access 2003, ADO 2.8)

Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Set con = CreateObject("ADODB.Connection")
con.CursorLocation = ADODB.CursorLocationEnum.adUseClient
con.Mode = adModeReadWrite
con.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\db\sklad.mdb;Persist Security Info=False"
Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT * FROM Таблица1", con, ADODB.CursorTypeEnum.adOpenDynamic, ADODB.LockTypeEnum.adLockOptimistic

MsgBox rs.CursorType (возвращает 3 = adOpenStatic)
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606889
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADODB.CursorLocationEnum.adUseClient

попробуйте заменить на adUseServer
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606928
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneADODB.CursorLocationEnum.adUseClient

попробуйте заменить на adUseServer

попробовал, тогда рекордсет открывается как adOpenKeyset
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606976
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
и чем вас такой тип курсора не устраивает?
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606986
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneи чем вас такой тип курсора не устраивает?
тем, что таблица 100 000 строк, и каждый раз обновлять весь рекордсет долго
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36606990
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Understanding ADO's Default Cursor Type

ADO
DAO adOpenDynamic
dbOpenDynaset 2
2 Dynamic requires more overhead, because updates are immediate and all types of movement are enabled. The dynamic cursor isn't currently supported
by the Microsoft Jet OLE DB Provider, and therefore defaults to a keyset cursor when adOpenDynamic is applied to a Jet database.
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607000
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787Konst_Oneи чем вас такой тип курсора не устраивает?
тем, что таблица 100 000 строк, и каждый раз обновлять весь рекордсет долго

зачем весь рекордсет обновлять? что у вас за задача? код показывайте
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607072
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_OneUnderstanding ADO's Default Cursor Type

ADO
DAO adOpenDynamic
dbOpenDynaset 2
2 Dynamic requires more overhead, because updates are immediate and all types of movement are enabled. The dynamic cursor isn't currently supported
by the Microsoft Jet OLE DB Provider, and therefore defaults to a keyset cursor when adOpenDynamic is applied to a Jet database.


Странно, во многих примерах, в том числе и на sql.ru, указывают при открытии динамического датасет именно, Microsoft.Jet.OLEDB.4.0... очень странно... наверное чтото у меня разладилось в системе...

а может подскажете какой нужен провайдер (а лучше весь пример), чтобы работать с большими таблицами (100 000 строк), и загружать их, скажем, в MSDataGrid? Мне нужно, чтобы при обновлении данных другим пользователем (а проект сетевой), данные без тормозов обновлялись в MSDataGrid (если такое конечно возможно штатными средствами)
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607081
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
снасала ответьте зачем вам в гриде для отображения 100к строк?
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607088
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneak787Konst_Oneи чем вас такой тип курсора не устраивает?
тем, что таблица 100 000 строк, и каждый раз обновлять весь рекордсет долго

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

к коду нужно добавить лишь Set DataGrid1.DataSource = rs и будет весь проект, что пока у меня есть
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607089
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneснасала ответьте зачем вам в гриде для отображения 100к строк?

Да и не влезут они туда, Integer не позволит
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607096
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
'BeginResyncVB

    'To integrate this code
    'replace the data source and initial catalog values
    'in the connection strings
    
Public Sub Main()
    On Error GoTo ErrorHandler

    'connection and recordset variables
    Dim Cnxn As ADODB.Connection
    Dim rstTitles As ADODB.Recordset
    Dim strCnxn As String
    Dim strSQLTitles As String
    
    ' Open connection
    Set Cnxn = New ADODB.Connection
    strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
        "Initial Catalog='Pubs';Integrated Security='SSPI';"
    Cnxn.Open strCnxn
    
    ' Open recordset using object refs to set properties
    ' that allow for updates to the database
    Set rstTitles = New ADODB.Recordset
    Set rstTitles.ActiveConnection = Cnxn
    rstTitles.CursorType = adOpenKeyset
    rstTitles.LockType = adLockOptimistic
    
    strSQLTitles = "titles"
    rstTitles.Open strSQLTitles
    
    'rstTitles.Open strSQLTitles, Cnxn, adOpenKeyset, adLockPessimistic, adCmdTable
    'the above line of code passes the same refs as the object refs listed above
    
    ' Change the type of the first title in the recordset
    rstTitles!Type = "database"
    
    ' Display the results of the change
    MsgBox "Before resync: " & vbCr & vbCr & _
        "Title - " & rstTitles!Title & vbCr & _
        "Type - " & rstTitles!Type
    
    ' Resync with database and redisplay results
    rstTitles.Resync
    MsgBox "After resync: " & vbCr & vbCr & _
        "Title - " & rstTitles!Title & vbCr & _
        "Type - " & rstTitles!Type

    ' clean up
    rstTitles.CancelBatch
    rstTitles.Close
    Cnxn.Close
    Set rstTitles = Nothing
    Set Cnxn = Nothing
    Exit Sub
    
ErrorHandler:
    ' clean up
    If Not rstTitles Is Nothing Then
        If rstTitles.State = adStateOpen Then
            rstTitles.CancelBatch
            rstTitles.Close
        End If
    End If
    Set rstTitles = Nothing
    
    If Not Cnxn Is Nothing Then
        If Cnxn.State = adStateOpen Then Cnxn.Close
    End If
    Set Cnxn = Nothing
    
    If Err <>  0  Then
        MsgBox Err.Source & "-->" & Err.Description, , "Error"
    End If
End Sub
'EndResyncVB


примеры тут
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607098
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneснасала ответьте зачем вам в гриде для отображения 100к строк?
значит надо, ведь этот вопрос решаем? если нет, и вы знаете, что нет так и скажите я сам не буду заморачиватся, в базах я не спец, хотя я не верю что такое не возможно, да и по описаниям динамического датасета это то что нужно, вот только он не открывается
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607111
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
я вот не пойму с чего вы вдруг решили что вам поможет в этом динамический курсор?
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607117
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shocker.ProKonst_Oneснасала ответьте зачем вам в гриде для отображения 100к строк?

Да и не влезут они туда, Integer не позволит

если вы про заполняемость DataGrid 100 000 сток, то у меня загрузились без всяких пробелем
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607123
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
проверьте что ваш провайдер к данным поддерживает и исходя из этого уже решайте как работать

Код: 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.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
'BeginSupportsVB

    'To integrate this code
    'replace the data source and initial catalog values
    'in the connection string

Public Sub Main()
    On Error GoTo ErrorHandler

    ' recordset and connection variables
    Dim rstTitles As ADODB.Recordset
    Dim Cnxn As ADODB.Connection
    Dim strCnxn As String
    Dim strSQLTitles As String
     ' array variables
    Dim arrCursorType( 4 ) As Integer
    Dim intIndex As Integer
    
    ' open connection
    Set Cnxn = New ADODB.Connection
    strCnxn = "Provider='sqloledb';Data Source='MySqlServer';" & _
        "Initial Catalog='Pubs';Integrated Security='SSPI';"
    Cnxn.Open strCnxn
    
    ' Fill array with CursorType constants
    arrCursorType( 0 ) = adOpenForwardOnly
    arrCursorType( 1 ) = adOpenKeyset
    arrCursorType( 2 ) = adOpenDynamic
    arrCursorType( 3 ) = adOpenStatic
    
    ' open recordset using each CursorType and optimistic locking
    For intIndex =  0  To  3 
        Set rstTitles = New ADODB.Recordset
        rstTitles.CursorType = arrCursorType(intIndex)
        rstTitles.LockType = adLockOptimistic
        
        strSQLTitles = "Titles"
        rstTitles.Open strSQLTitles, Cnxn, , , adCmdTable
        
        Select Case arrCursorType(intIndex)
           Case adOpenForwardOnly
              Debug.Print "ForwardOnly cursor supports:"
           Case adOpenKeyset
              Debug.Print "Keyset cursor supports:"
           Case adOpenDynamic
              Debug.Print "Dynamic cursor supports:"
           Case adOpenStatic
              Debug.Print "Static cursor supports:"
        End Select
        
        ' call the DisplaySupport procedure from below
        ' to display the supported options
        DisplaySupport rstTitles
       
    Next intIndex
   
    ' clean up
    rstTitles.Close
    Cnxn.Close
    Set rstTitles = Nothing
    Set Cnxn = Nothing
    Exit Sub
    
ErrorHandler:
    ' clean up
    If Not rstTitles Is Nothing Then
        If rstTitles.State = adStateOpen Then rstTitles.Close
    End If
    Set rstTitles = Nothing
    
    If Not Cnxn Is Nothing Then
        If Cnxn.State = adStateOpen Then Cnxn.Close
    End If
    Set Cnxn = Nothing
    
    If Err <>  0  Then
        MsgBox Err.Source & "-->" & Err.Description, , "Error"
    End If
End Sub
'EndSupportsVB



'BeginSupports2VB
Public Sub DisplaySupport(rstTemp As ADODB.Recordset)

   Dim arrConstants( 11 ) As Long
   Dim blnSupports As Boolean
   Dim intIndex As Integer

   ' Fill array with cursor option constants
   arrConstants( 0 ) = adAddNew
   arrConstants( 1 ) = adApproxPosition
   arrConstants( 2 ) = adBookmark
   arrConstants( 3 ) = adDelete
   arrConstants( 4 ) = adFind
   arrConstants( 5 ) = adHoldRecords
   arrConstants( 6 ) = adMovePrevious
   arrConstants( 7 ) = adNotify
   arrConstants( 8 ) = adResync
   arrConstants( 9 ) = adUpdate
   arrConstants( 10 ) = adUpdateBatch
   
   For intIndex =  0  To  10 
      blnSupports = _
         rstTemp.Supports(arrConstants(intIndex))
      If blnSupports Then
         Select Case arrConstants(intIndex)
            Case adAddNew
               Debug.Print "   AddNew"
            Case adApproxPosition
               Debug.Print "   AbsolutePosition and AbsolutePage"
            Case adBookmark
               Debug.Print "   blnkmark"
            Case adDelete
               Debug.Print "   Delete"
            Case adFind
               Debug.Print "   Find"
            Case adHoldRecords
               Debug.Print "   Holding Records"
            Case adMovePrevious
               Debug.Print "   MovePrevious and Move"
            Case adNotify
               Debug.Print "   Notifications"
            Case adResync
               Debug.Print "   Resyncing data"
            Case adUpdate
               Debug.Print "   Update"
            Case adUpdateBatch
               Debug.Print "   batch updating"
         End Select
      End If
   Next intIndex

End Sub
'EndSupports2VB
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607132
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_Oneя вот не пойму с чего вы вдруг решили что вам поможет в этом динамический курсор?
тогда что поможет? есть таблица, скажем 10 000 строк, и что при добавлении данных другим пользователем нужно обновлять весь рекордсет? нет конечно должны при больших таблицах добавляться только новые данные.. а то что такой технологии нет я не верю... вот подскажите если знаете... (желательно SQL сервер не использовать, у клиента его нет и покупать его врятли захочет)
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607134
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787Shocker.ProKonst_Oneснасала ответьте зачем вам в гриде для отображения 100к строк?

Да и не влезут они туда, Integer не позволит

если вы про заполняемость DataGrid 100 000 сток, то у меня загрузились без всяких пробелем

ещё раз спрошу: зачем вам в гриде (GUI-контрол) все 100000 записей? у вас пользователь их в состоянии проанализировать?
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607138
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787Konst_Oneя вот не пойму с чего вы вдруг решили что вам поможет в этом динамический курсор?
тогда что поможет? есть таблица, скажем 10 000 строк, и что при добавлении данных другим пользователем нужно обновлять весь рекордсет? нет конечно должны при больших таблицах добавляться только новые данные.. а то что такой технологии нет я не верю... вот подскажите если знаете... (желательно SQL сервер не использовать, у клиента его нет и покупать его врятли захочет)

динамический курсор так же вам не отобразит внешние изменения , сделанные в другой сессии.
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607231
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One,

Dynamic cursor supports:
AddNew
Delete
Find
Holding Records
MovePrevious and Move
Notifications
Update
batch updating
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607234
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ak787Konst_One,

Dynamic cursor supports:
AddNew
Delete
Find
Holding Records
MovePrevious and Move
Notifications
Update
batch updating

и что?
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607238
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это я проверил по вашему примеру, все курсоры поддерживаются, а рекордсет не открывается, спасибо за дисскуссию, наверно переустановлю систему, есть подозренее, что чтото сбилось... 100 000 строк тут не причем, просто рекордсет должен открыватся в том режиме, который указваешь, у меня такого не происходит...
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607251
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
rs.CursorLocation = adUseServer
rs.Open "TableName", cn, adOpenDynamic, adLockOptimistic, adCmdTableDirect

вот так попробуйте, если можете работать напрямую с таблицей в акцессной базе. только не забываем про серверный курсор у коннекта.
...
Рейтинг: 0 / 0
ADO Recordset не загружается динамически (adOpenDynamic)
    #36607275
ak787
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Konst_One
Код: plaintext
1.
rs.CursorLocation = adUseServer
rs.Open "TableName", cn, adOpenDynamic, adLockOptimistic, adCmdTableDirect

вот так попробуйте, если можете работать напрямую с таблицей в акцессной базе. только не забываем про серверный курсор у коннекта.

так рекордсет получается adKeySet...

ладно, тему можно закрывать, еще раз спасибо!
...
Рейтинг: 0 / 0
24 сообщений из 24, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / ADO Recordset не загружается динамически (adOpenDynamic)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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