Страницы: 1
RSS
Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
Доброго времени суток.
Стоит задача, проставлять галочки напротив строк, которые необходимо удалять, нажимать кнопку для запуска макроса и отмеченные строки нужно удалить из таблицы в БД. Я в VBA не силен... Пожалуйста помогите... Взял по аналогии вот такой чужой код, попытался переделать под себя, но выдает ошибку на строке
arr(i) = sn.Cells(t, 9)

Run-time error '6':
Overflow

Файл с таблицей приложил, код ниже и в самом файле
Код
Global sn
Global PosStr As Integer

Sub deletrs() 'удаление записей

Dim i, t As Integer
Dim cn As New ADODB.Connection
Dim rs As ADODB.Recordset

Set sn = ThisWorkbook.Sheets("test")

PosStr = sn.Cells(6, 3).End(xlDown).Row

t = 6
i = 1
Dim arr() As Integer
ReDim arr(1 To i) As Integer
   
   For t = 6 To PosStr
     If IsEmpty(sn.Cells(t, 1)) = False Then
       arr(i) = sn.Cells(t, 9)
       i = i + 1
     End If
   Next
 
cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=******;Password=******;Data Source=ahdb1c;Use Procedure for Prepare=1;Auto Translate=True"
cn.Open

'открываем recordset
Set rs = CreateObject("ADODB.Recordset")
rs.cursortype = adOpenKeyset
rs.locktype = adLockOptimistic
rs.Open "select * from baza.dbo.mog_корректировка_бюджета_copy", cn

i = 1
    For i = LBound(arr) To UBound(arr)
        rs.Find "id=" & arr(i)
        rs.Delete
        rs.movenext
    Next
    
PosStr = Empty
MsgBox ("Данные удалены")

End Sub
 
Двойной клик по столбцу с галочками чтобы поставить или убрать галочку.
Потом удалить.
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Уважаемый Alemox, спасибо, но Ваш вариант удаляет из текущего листа, с тем же успехом я бы мог выделять строку мышкой и просто ее удалять) Мне нужно удалять именно из таблицы, которая хранится на сервере БД.
Т.е. есть две таблицы:
1) На сервере baza.dbo.mog_корректировка_бюджета_copy;
2) Текущий лист excel с выгрузкой этой таблицы.
Необходимо отмечать галочками строки для удаления, нажимать "Удалить" и строки должны удаляться именно из таблицы на сервере))
 
Поправьте код с массивом
Код
Dim arr()

   For t = 6 To PosStr
     If IsEmpty(sn.Cells(t, 1)) = False Then
     i = i + 1
     ReDim Preserve arr(i)
        arr(i) = sn.Cells(t, 9)
     End If
   Next
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Alemox, выдает ошибку:

Run-time error '3001':
Аргументы имеют неверный тип, выходят за пределы допустимого значения или вступают в конфликт друг с другом.

При этом в базе формат ID INT и в Excel числовой...
строка :
Код
rs.Find "id=" & arr(i)
 
Цитата
mogilevtsev написал:
Run-time error '6':
Для начала замените везде As Integer на As Long.
 
StoTisteg, заменил, не помогло, та же ошибка на той же строке
 
У меня работает
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
удаление через sql как и другие операции во многом эффективнее, рекомендую
Код
Dim s As String: s = ""
For i = LBound(arr) To UBound(arr)
    s = s & IIf(s > "", " or ", "") & "id=" & arr(i)
Next i
If s > "" Then
    cn.Open "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=****;Password=****;Data Source=ahdb1c;Use Procedure for Prepare=1;Auto Translate=True"
    cn.Execute "delete from baza.dbo.mog_корректировка_бюджета_copy where " & s
    cn.Close
End If
PS а если кто-нибудь нас научит как читать OPENROWSET'ом открытый Excel-файл, то всю процедуру можно сделать одним SQL-запросом.  
Изменено: DenSyo - 02.06.2018 07:32:37
 
DenSyo, огромное спасибо, ваш вариант работает!)))))
Страницы: 1
Наверх