Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Delete класса ADODB.Recordset. / 11 сообщений из 11, страница 1 из 1
02.02.2007, 14:32:51
    #34302448
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
Здравствуйте! Если кто знает, подскажите как работать с методом 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
05.02.2007, 00:22:55
    #34305187
big-duke
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
Какое сообщение об ошибке ?
Что именно вы хотите сделать ?
...
Рейтинг: 0 / 0
05.02.2007, 09:06:21
    #34305399
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
В даном случае я хочу удалить из рекордсета первую запись. А в сообщении об ошибке говориться что это свойство не поддерживается, так как или не включен правильный режим LockType или свойство не поддерживается провайдером.
...
Рейтинг: 0 / 0
05.02.2007, 09:37:09
    #34305446
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
а попробуй удалить через SQL строку...
...
Рейтинг: 0 / 0
05.02.2007, 10:04:01
    #34305495
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
vbaproа попробуй удалить через SQL строку...
Попробовать можно, но хотелось бы воспользоваться имеющимся методом, если уж он есть. Первую запись я могу выбрать отдельным селектом, а остальные другим. Но хотелось бы один раз обратится к базе.
...
Рейтинг: 0 / 0
05.02.2007, 10:11:57
    #34305511
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
может целостность базы нарушается, а может еще на какое-то ограничение натыкаешься. попробуй другими методами для проверки
...
Рейтинг: 0 / 0
05.02.2007, 10:39:14
    #34305594
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
Да я же работаю в данном случае не с базой, а с уже сформированным рекордсетом и из него хочу удалить первую запись. А из самой базы я без проблем все выбираю одним селектом. Просто первая запись мне нужна для формирования шапки отчета а остальные для формирования сводной и поэтому я ее хочу удалить чтобы не мешала.
...
Рейтинг: 0 / 0
05.02.2007, 10:58:29
    #34305667
vbapro
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
Oleg_SlipДа я же работаю в данном случае не с базой, а с уже сформированным рекордсетом и из него хочу удалить первую запись. А из самой базы я без проблем все выбираю одним селектом. Просто первая запись мне нужна для формирования шапки отчета а остальные для формирования сводной и поэтому я ее хочу удалить чтобы не мешала.
но ADODB.Recordset не таблица в простом понимании, а объект, связанный с базой. Копируй Recordset в свою таблицу, и оттуда удаляй первую строку. Кроме того, у тебя стоит .Update после .Delete - зачем это тогда?..
...
Рейтинг: 0 / 0
05.02.2007, 11:13:14
    #34305740
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
Насколько я понимаю метод ADODB.Recordset.Update сохраняет любые изменения объекта, а использовал я его по аналогии с хелповским примером, поскольку пользуюсь этими методами впервые. А метод Delete должен удалять запись из рекордсета судя по его описанию.
...
Рейтинг: 0 / 0
05.02.2007, 12:38:41
    #34306094
KL (XL)
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
А зачем так усложнять?

Код: 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
05.02.2007, 13:29:48
    #34306294
Oleg_Slip
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Метод Delete класса ADODB.Recordset.
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
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Метод Delete класса ADODB.Recordset. / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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