Удаление строк таблицы в Excel через ADO

Программирование на Visual Basic for Applications
anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Удаление строк таблицы в Excel через ADO

Сообщение anvg » 19.09.2012 (Ср) 5:01

Что не верно в коде для удаления строк таблицы?
Пробую так
Код: Выделить всё
Public Sub DeleteRecord()
    Dim pConn As New ADODB.Connection
    Dim pCom As New ADODB.Command
    pConn.Mode = adModeShareDenyNone
    pConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\path\name.xlsm;Extended Properties=""Excel 12.0;HDR=YES"";"
    pCom.ActiveConnection = pConn
    pCom.CommandType = adCmdText
    pCom.CommandText = "Delete * From [Sheet$] Where [ID]=1"
    pCom.Execute
    pConn.Close


и так
Код: Выделить всё
Public Sub DeleteRecord2()
    Dim pConn As New ADODB.Connection
    Dim pRSet As New ADODB.RecordSet
    pConn.Mode = adModeShareDenyNone
    pConn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\path\name.xlsm;Extended Properties=""Excel 12.0;HDR=YES"";"
    pRSet.CursorLocation = adUseClient: pRSet.CursorType = adOpenStatic
    pRSet.LockType = adLockPessimistic
    pRSet.Open "Select * From [Sheet$] Where [ID]=0", pConn
    If pRSet.RecordCount > 0 Then
        pRSet.MoveFirst
        pRSet.Delete adAffectCurrent
        pRSet.Update
    End If
    pRSet.Close: pConn.Close
End Sub


В обоих случаях получаю сообщение об ошибке "Удаление данных в присоединённой (или связанной) таблице не поддерживается драйвером ISAM."
Вставка строк и обновление работают как положено. Пробовал для Provider=Microsoft.Jet.OLEDB.4.0, сохранив файл в формате 2003, получаю то же самое.
Верно ли утверждение, что в Excel нельзя удалить строки таблицы используя ADO?

Sam777e
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 157
Зарегистрирован: 16.09.2010 (Чт) 4:33

Re: Удаление строк таблицы в Excel через ADO

Сообщение Sam777e » 19.09.2012 (Ср) 14:57

Что не верно в коде для удаления строк таблицы?
не верно ===> неверно


У меня нет удобной возможности проверять; все делал в ужасных условиях, в Excel XP , WinXP SP2.

За основу брал твой код и мой, полученный Recorder'ом.
Обратил внимание, что у объекта Excel.QueryTable есть Property RefreshStyle As XlCellInsertionMode; проверил XlCellInsertionMode :

Const xlOverwriteCells = 0
Const xlInsert[b]DeleteCells = 1
Const xlInsert[b]EntireRows = 2


Обрати внимание на xlInsertEntireRows - для Delete такого не видно.

Ну, и в заключение. Тебя не устраивает тупое удаление строк объекта Worksheet кодом VBA Excel'я из-за скорости ?


С уважением
Здоровья и удачи

anvg
Обычный пользователь
Обычный пользователь
 
Сообщения: 66
Зарегистрирован: 20.05.2007 (Вс) 18:04

Re: Удаление строк таблицы в Excel через ADO

Сообщение anvg » 20.09.2012 (Чт) 5:36

Sam777e
Оно спасибо, конечно.
Ответ http://support.microsoft.com/kb/257819 даёт отрицательный.
Тебя не устраивает тупое удаление строк объекта Worksheet кодом VBA Excel'я из-за скорости ?

Как мне кажется, логично использовать удаление через ADO, раз используется ADO для вставки и обновления.
P. S. Да и - я разве задавал вопрос: как мне лучше удалять?


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот, Yandex-бот и гости: 33

    TopList