powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Delete класса ADODB.Recordset.
11 сообщений из 11, страница 1 из 1
Метод Delete класса ADODB.Recordset.
    #34302448
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте! Если кто знает, подскажите как работать с методом Delete класса ADODB.Recordset.
Все потуги мои оказались тщетными. Разные комбинации установки свойств применял и менял провайдеров: OraOLEDB.Oracle и MSDAORA. И все одно и то же: rs.Supports(adDelete) = False.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
   Dim rs as New ADODB.Recordset

   rs.CursorLocation=adUseClient' rs.CursorLocation = adUseServer

   rs.CursorType = adOpenDynamic' rs.CursorType = adOpenStatic
   rs.LockType = adLockBatchOptimistic' rs.LockType = adLockPessimistic

   Set rs=comm.Execute

   rs.Delete' выдает сообщение об ошибке
   rs.Update

...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305187
Фотография big-duke
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Какое сообщение об ошибке ?
Что именно вы хотите сделать ?
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305399
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В даном случае я хочу удалить из рекордсета первую запись. А в сообщении об ошибке говориться что это свойство не поддерживается, так как или не включен правильный режим LockType или свойство не поддерживается провайдером.
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305446
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а попробуй удалить через SQL строку...
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305495
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
vbaproа попробуй удалить через SQL строку...
Попробовать можно, но хотелось бы воспользоваться имеющимся методом, если уж он есть. Первую запись я могу выбрать отдельным селектом, а остальные другим. Но хотелось бы один раз обратится к базе.
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305511
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
может целостность базы нарушается, а может еще на какое-то ограничение натыкаешься. попробуй другими методами для проверки
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305594
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да я же работаю в данном случае не с базой, а с уже сформированным рекордсетом и из него хочу удалить первую запись. А из самой базы я без проблем все выбираю одним селектом. Просто первая запись мне нужна для формирования шапки отчета а остальные для формирования сводной и поэтому я ее хочу удалить чтобы не мешала.
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305667
vbapro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Oleg_SlipДа я же работаю в данном случае не с базой, а с уже сформированным рекордсетом и из него хочу удалить первую запись. А из самой базы я без проблем все выбираю одним селектом. Просто первая запись мне нужна для формирования шапки отчета а остальные для формирования сводной и поэтому я ее хочу удалить чтобы не мешала.
но ADODB.Recordset не таблица в простом понимании, а объект, связанный с базой. Копируй Recordset в свою таблицу, и оттуда удаляй первую строку. Кроме того, у тебя стоит .Update после .Delete - зачем это тогда?..
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34305740
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Насколько я понимаю метод ADODB.Recordset.Update сохраняет любые изменения объекта, а использовал я его по аналогии с хелповским примером, поскольку пользуюсь этими методами впервые. А метод Delete должен удалять запись из рекордсета судя по его описанию.
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34306094
KL (XL)
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем так усложнять?

Код: 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.
Sub test()
    Dim cn As ADODB.Connection
    Dim rs As ADODB.Recordset
    Dim x, y, z
    
    Set cn = New ADODB.Connection
    cn.Open "DRIVER={Microsoft Excel Driver (*.xls)};DriverId=790;" & _
        "ReadOnly=True;DBQ=" & ThisWorkbook.FullName & ";"

    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM [Sheet1$]", cn, adOpenForwardOnly, adLockReadOnly, adCmdText
    
    'копируем первую строку рекордсета в массив (транспонируем по желанию)
    x = Application.Transpose(rs.GetRows( 1 ))
    
    'копируем остальные строки рекордсета в массив (транспонируем по желанию)
    y = Application.Transpose(rs.GetRows)
    
    'возвращаемся на первую строку рекордсета
    rs.MoveFirst
    
    'копируем все строки рекордсета в массив (транспонируем по желанию)
    z = Application.Transpose(rs.GetRows)
    
    'возвращаемся на первую строку рекордсета
    rs.MoveFirst
    
    'копируем первую строку рекордсета в ранг
    Sheets( 2 ).Range("A1").CopyFromRecordset rs,  1 
    
    'копируем остальные строки рекордсета в ранг
    Sheets( 2 ).Range("A3").CopyFromRecordset rs

    'и т.д. 
    
    Set rs = Nothing
    cn.Close
    Set cn = Nothing
End Sub

KL
[MVP - Microsoft Excel]
...
Рейтинг: 0 / 0
Метод Delete класса ADODB.Recordset.
    #34306294
Oleg_Slip
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
KL (XL)А зачем так усложнять?
Я, к примеру, хочу сделать так :
Код: 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.
 sub test()
  
       Dim pCache As PivotCache, pTable As PivotTable
       Dim rs as ADODB.Recordset, comm as ADODB.Command

       ...
   
       Set rs=comm.Execute

       Range("A1").Value="Отчет за период " & rs.fields( 3 ).Value & " по движению ТМЦ на складе №" _
                                  & rs.Fields( 1 ).Value & " по службе закупки " & rs.Fields( 0 )' и т.д.

       'а потом первая запись мне не нужна больше, и более того мешает
       ' и я ее хочу из рекордсета удалить, чтобы сформировать сводную
       rs.Delete' не выходит

       Set pCache = ThisWorkbook.PivotCaches.Add(xlExternal)
   
       Set pCache.Recordset = rs

       Set pTable = pCache.CreatePivotTable(Range("A6"), "pt")
     
       ...

 end sub
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Delete класса ADODB.Recordset.
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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