Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
Нашлось решение! В подключении к серверу было указано его виртуальное имя, необходимо было явно указать его адрес, типа 10.65.40.30  :)  
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
БМВ, Спасибо, попробую, потом отпишусь
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
sokol92, Спасибо что правильно поправили.
Цитата
sokol92 написал:
нужно определить константы adOpenDynamic, adLockOptimistic.
Я читал про свойства CursorType и LockType и часто встречал именно эту комбинацию (adOpenDynamic, adLockOptimistic)  как оптимальную, а как определить константы? Такой информации не нашел...
Цитата
sokol92 написал:
Проблема - использование " раннего связывания "
Если я правильно понял раннее и позднее, то в моем случае как раз позднее использую, специально использовал, т.к. не знаю что у других с подключением библиотек. А в объявлении переменных типы данных я закомментировал и изменил на Object. Или Вы про WorkSheet? Тоже надо как позднее?
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
vikttur, Ну тогда помогите правильно сформулировать тему, потому что сам код ни кому не пригодится, он просто грузит данные из базы, таких тем тут полно. А вот найти универсальное решение для адаптации любого кода думаю как раз и полезно. Код может быть любой, это не важно, а вот найти одно универсальное решение было бы не плохо)
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
vikttur, не вижу смысла писать в теме то, что выполняет код, код работает, задача именно в адаптации кода.
Ошибка компиляции при использовании ADO, адаптация кода VBA написанного в Microsoft Excel 2016 64-Bit под Excel версий 2007, 2010 32/64 bit
 
Добрый день!
Сделал отчет, на моем компьютере и компьютерах коллег в офисе все работает, у всех одна версия офиса, 2016 64-Bit. Отчет делали для коллег на филиалах, а у них сборная солянка из офисов разных годов и разной архитектуры, в итоге у кого-то все хорошо, у кого-то ошибки "compile error in hidden module. Лист 1"… Подскажите, как можно адаптировать код и сделать его универсальным? Про Win32API_PtrSafe with 64-bit читал, в файле txt лазил, для себя ничего полезного не нашел, хотя возможно не знаю как правильно искать... Compatibility Between the 32-bit and 64-bit Versions of Office 2010 тоже читал, не помогло. Файл отчета во вложении.

Код
Sub Обновить_текущий_город()
Dim cn As Object 'New ADODB.Connection
Dim rec As Object 'ADODB.Recordset
Dim dtfr, dtto, PosStr
Dim sh, sh1, sh2 As Worksheet
    Set sh = ThisWorkbook.Sheets("Свод")
    Set sh1 = ThisWorkbook.Sheets("Ошибки")
    Set sh2 = ThisWorkbook.Sheets("Настройки")
        
    dtfr = Format(sh.Range("B1"), "YYYYMMDD")
    dtto = Format(sh.Range("B2"), "YYYYMMDD")
    
' проверка на дурака, даты
    If dtfr = "" Or dtto = "" Then
        MsgBox "Проверьте, не должно быть не заполненного периода!", vbCritical
        Exit Sub
    Else
        If dtto < dtfr Then
            MsgBox "Дата начала периода не может быть больше даты окончания!", vbCritical
            Exit Sub
        End If
    End If
    
'соединение
    Set cn = CreateObject("ADODB.Connection")
    cn.ConnectionString = "Provider=SQLOLEDB.1;Persist Security Info=True;User ID=***;Password=***;" _
                          & "Data Source=***;Use Procedure for Prepare=1;Auto Translate=True"
    cn.Open
'рекордсет
    Set rec = CreateObject("ADODB.Recordset")
    rec.CursorType = adOpenDynamic
    rec.LockType = adLockOptimistic
    ' обновляем первую, сводную таблицу
    sh.PivotTables("Свод").PivotCache.CommandText = _
     "exec [dbo].[Masinev_Transport_Imput_to_InkTransportReport_check] @frDate = '" & dtfr & "',@toDate = '" & dtto & "',@branch = '" & sh2.Cells(2, 3) & "'"
    On Error Resume Next
    sh.PivotTables("Свод").PivotCache.Refresh
    
    ' обновляем вторую таблицу, предварительно очистив данные
    If sh1.Range("A2") = "" Then
    Else
        PosStr = sh1.Cells(1, 1).End(xlDown).Row
        sh1.Range("A2:D" & PosStr).ClearContents
    End If
    rec.Open "exec Masinev_Transport_Imput_to_InkTransportReport_mistakes @branch = '" & NameBook & "'", cn
    sh1.Range("A2").CopyFromRecordset rec
    rec.Close
    cn.Close
    
End Sub

Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
DenSyo, огромное спасибо, ваш вариант работает!)))))
Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
StoTisteg, заменил, не помогло, та же ошибка на той же строке
Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
Alemox, выдает ошибку:

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

При этом в базе формат ID INT и в Excel числовой...
строка :
Код
rs.Find "id=" & arr(i)
Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по ID строки
 
Уважаемый Alemox, спасибо, но Ваш вариант удаляет из текущего листа, с тем же успехом я бы мог выделять строку мышкой и просто ее удалять) Мне нужно удалять именно из таблицы, которая хранится на сервере БД.
Т.е. есть две таблицы:
1) На сервере baza.dbo.mog_корректировка_бюджета_copy;
2) Текущий лист excel с выгрузкой этой таблицы.
Необходимо отмечать галочками строки для удаления, нажимать "Удалить" и строки должны удаляться именно из таблицы на сервере))
Макрос. Удаление строк из таблицы в БД, Необходимо составить макрос для удаления строк из БД по 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
Страницы: 1
Наверх