Добрый день, коллеги! Столкнулся с проблемой добавления данных в другой файл средствами ADO.
Описание задачи: Есть текущий файл с "лист1". средствами VBA ADO добавляются данные в последнюю строку. Необходимо чтобы эти данные добавлялись и в другую книгу Excel (C:\Книга2.xlsb) на "лист2" через SQL, где есть точно такая же по структуре таблица.
На текущий момент имею код, который VBA пропускает, но данные не перемещает.
Код
Sub dobavit()
adress2 = "C:\Книга2.xlsb" 'адрес новой книги
Set rst = CreateObject("ADODB.Recordset")
rst = "INSERT INTO [Лист2$] IN '" & adress2 & "' 'Excel 12.0;' SELECT * FROM Лист1" 'из текущего листа1 в книгу2.лист2
End Sub
Sub vstrechaREFRESH()
Dim str As String
Set cnSrc = CreateObject("ADODB.Connection")
cnSrc.Open ("Provider=Microsoft.ACE.OLEDB.12.0; Data Source=C:\Users\admin\Desktop\Работа\Тест Шаблон.xlsb; Extended Properties=""Excel 12.0;HDR=NO;IMEX=1""")
strSQL = "SELECT * INTO [Excel 12.0;Database=" & ThisWorkbook.FullName & "].[Встречи] FROM [Встречи]"
cnSrc.Execute strSQL
End Sub
C:\Users\admin\Desktop\Работа\Тест Шаблон.xlsb - новая книга Встречи - название листа в обоих книгах
cnSrc.Execute strSQL - ошибка: Объект "Встречи не найден ядром СУБД Microsoft Access. Убедитесь, что объект существует, а его имя и путь к нему указаны правильно. Если объект "встречи" не является локальным, проверьте сетевое подключение или обратитесь к администратору сервера.
Доброе время суток. Что-то вы как-то не так запрос на добавления записей в существующую таблицу формируете. Последняя версия так вообще создание таблицы из запроса, и имена листов указываете не верно. Пример на статичных путях к файлам
Код
Public Sub test()
Dim pConn As Object
Dim sSQL As String
Set pConn = CreateObject("ADODB.Connection")
pConn.Open "DBQ=c:\Path\Тест Шаблон.xlsb;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=0;"
sSQL = "Insert Into [Встречи$]"
sSQL = sSQL & " Select * From [Excel 12.0;Database=c:\Path\Первый файл.xlsb].[Встречи$]"
pConn.Execute sSQL, 128
pConn.Close
End Sub
Добрый день! Сделал аналогичный запрос на изменение конкретной ячейки в другом файле .xlsm с общим доступом. Проблема в том, что непосредственно после выполнения команды файл можно открыть только для чтения. Вычитал, что это происходит из-за того, что метод .Close() не выгружает файл из памяти, а лишь закрывает к нему открытое соединение. При этом, обнаружилось, что в открытом только для чтения (изменённом) файле изменённая ячейка не изменена. Она меняется спустя некоторое время, предполагаю, что только после выгрузки из памяти файла, то есть, когда он становится доступным. Кто-то сталкивался с такой проблемой? Можно ли как-то выгрузить файл из памяти после .Close() ?
Код
Public Sub TabNExchange()
Dim pConn As Object, sName As String, sTabel As String, sSQL As String, sCommandText As String
sName = Worksheets("Работник").Range("F9")
sTabel = InputBox("Введите таб.N " & sName, 1)
sCommandText = "UPDATE [TBN$] SET TabelN ='" + sTabel & "' WHERE Rabotnik ='" + sName & "'"
Set pConn = CreateObject("ADODB.Connection")
pConn.Open "DBQ=\\Server\FTP\rabtab.xlsm;Driver={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};ReadOnly=0;"
sSQL = sCommandText
MsgBox (sSQL) 'проверяем строку запроса SQL
pConn.Execute sSQL, 128
pConn.Close
Set pConn = Nothing
End Sub
документацию на Execute изучил, видел, что у Вас не хватает запятой, но добавляя её ничего не меняется, в Execute важен только CommandText, поэтому пришёл к выводу, что одна или две запятых не влияет результат...
Попробовал через ADODB.Command - эффект тот же...
Кстати, вы добавили ещё pConn.CursorLocation = 3 изначально его тоже не было, но и это не влияет Также не влияет значение Options "-1" в Execute...
Добрый день! У меня такой вопрос. Мне нужно из хранимой процедуры одного сервера SQL записать данные в таблицу на другой сервер SQL. Я попробовал Sub Test()
Dim conn As String Dim data_base As String Dim period As String Dim datasource As String Dim object_id As String Dim dt As Integer Dim day_start As String Dim date_beg As String Dim date_end As String
Sub Query(connStr As String, jsonParams As String)
Dim cnDB As New ADODB.Connection Dim rc As New ADODB.Recordset cnDB.CommandTimeout = 360 cnDB.Open connStr
Dim params As Object Set params = JsonConverter.ParseJson(jsonParams)
Dim period As String Dim object_id As String Dim day_start As String Dim date_beg As String Dim date_end As String Dim data_source As String Dim dataseg As String Dim day1 As String Dim month1 As String Dim year1 As String Dim dt As String
Dim cn1DB As New ADODB.Connection Dim rc1 As New ADODB.Recordset cn1DB.CommandTimeout = 360 cn1DB.Open "Provider=SQLOLEDB.1;Password=ASRMB;Persist Security Info=True;User ID=ASRMB;Initial Catalog=dbm_asrmb_knpz_20190129;Data Source=KNPZ-ASRMB-N1\MSSQLASRMB1"
Dim sql2 As String
sql2 = "Insert INTO [dbm_asrmb_knpz_20190129].[dbo].[tsd] (id_prod, prod_name, prod_okp,prod_ksm, id_transType, transtype, id_owner, owner, m_netto, shipDT) From rsADO"