Hugo, спасибо, завтра попробую А так сработает: в файле xlsx выполню макрос и выгружу на лист данные, а потом сохраню файл также в формате xlsx? Вообще я рассчитывал на вариант через вкладку данные и подключение кодом для файла sql.
Доброе время суток Михаил Л, из того, что у вас ИИ отнял столько постов, что по количеству вы стали как начинающий, думаю, всё же не стоит строить вопросы как начинающий. Даже если идти путём, который указал Игорь, то всё же для начала выясните: с какой сервером баз данных вы имеете дело, далее, пользуясь The Connection Strings Reference выясняете, что в Администрирование источник данных ODBC соответствующей разрядности (с OleDb несколько сложнее) определяетесь, какие из драйверов установлены в вашей системе. Если ничего, добро пожаловать на сайт разработчика сервера баз данных за их получением и установкой. Вот далее, используя данные по IP, имени сервера в сетке, имени экземпляра (если есть) конструируете и тестируете в ADODB.Connection подключение, узнав у админа сервера БД, а есть ли у вас права на доступ к серверу. Если заработало, то только тогда имеет смысл узнавать есть ли доступ: к конкретной базе данных, конкретной таблице базы данных . И если да, тогда писать SQL запрос. Вариант для SQL Server LocalDb версии через odc-файл (используется Данные, существующие подключения и указываете файл из архива. Файл текстовый, поэтому сначала убедитесь, что есть такой сервер, есть такой драйвер, есть такая база, есть такая таблица. И если нет, то впишите нечто своё ). Тоже самое, фактически можно сделать, используя Microsoft Query (не путать с Power Query).
Ну я точно в этой теме начинающий (работал так пару раз и то локально в пределах офиса с базой Access). Да и постов за 8 лет всего 6 И это уже второй раз! За почти 20 лет...
Также пробовал в файле отсюдова подключиться к базе данных test.accdb по первому варианту, но ошибкой высвечивается строка с - Sheets("get1").Range("A1")
Код
Sub GetData1()
Application.ScreenUpdating = False
Dim tm!: tm = Timer
Dim sConn As String, sSQL As String
Dim pConn As Object
Dim finalRow As Long
finalRow = Sheets(1).Cells(Rows.Count, 1).End(xlUp).Row
sConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & ThisWorkbook.Path & "\test.accdb;"
Set pConn = CreateObject("ADODB.Connection"): pConn.Open sConn
sSQL = "SELECT t2.Pr " & _
"FROM [Excel 12.0;Database=" & ThisWorkbook.FullName & ";HDR=Yes].[Лист1$A1:B" & finalRow & "] AS t1 " & _
"LEFT JOIN [data] As t2 " & _
"ON (t1.Filid = t2.Filid AND t1.Lid = t2.Lid);"
Sheets("get1").Cells.Clear
Sheets("get1").Range("A1").CopyFromRecordset pConn.Execute(sSQL)
pConn.Close
Application.ScreenUpdating = True
Sheets(1).[n1].Value = Format((Timer - tm) / 24 / 60 / 60, "nn:ss")
End Sub
Как этим вариантом(макросом) и вариантом с odc-файлом подключиться к базам сверху, к которым PQ спокойно подключился? пароли: SQl - Имя пользователя: DataMonkey@ptypanama Пароль: D4t4M0nk3y! MySQL - например, Имя пользователя: root Пароль: 5555
Что то много сразу написал Еще
Цитата
Андрей VG написал: определяетесь, какие из драйверов установлены в вашей системе
Правильно ли я понял что раз могу подключиться из PQ, то необходимые драйвера и для макросов+др. установлены?
Проблемой осталось подключение к моему localhost-у по MySQL с другого компа. на том компе нет WorkBench-а. На моем - есть, но не знаю как дать внешний доступ. Может, есть решение этой проблемы?
Михаил Л написал: о ошибкой высвечивается строка с - Sheets("get1").Range("A1")
Михаил, а можно пример набора данных? Так вроде всё корректно, но детали...
Цитата
Михаил Л написал: localhost-у по MySQL с другого компа
Вы подключаетесь к серверу, localhost - это ссылка на IP 127.0.0.1 - по умолчанию это ваш компьютер в виртуальной внутренней подсети компьютера (надеюсь наш админ лучше разъяснит ). А строке подключения должен быть указан IP вашего компьютера в той сети, в которой тот другой компьютер вас видит. А лучше не IP - моветон, а имя полное имя компьютера
Наверняка, все корректно для соответствующего примера. Базу данных прикрепил свою (какую нашел). Мне бы из таблицы data оставить два столбца, например, Brand и Mark.
Цитата
Андрей VG написал: localhost - это ссылка на IP 127.0.0.1 - по умолчанию это ваш компьютер в виртуальной внутренней подсети компьютера (надеюсь наш админ лучше разъяснит
Стало понятнее. Все таки должна быть сеть. Я то думал, что также, как и с SQL, по интернету передается связь. Я дома ковыряюсь - админа нет или я по умолчанию админ, но сети точно нет.
Вообще, из за чево весь шум. Два дня назад откликнулся на вакансию: требуется специалист с углубленными знаниями формул, таблиц. На собеседовании узнал что надо подключаться к базе данных (не знаю какой именно) и с ней работать и девочкам помогать с формулами. Вчера позвонили что выбрали двух кандидатов, в том числе меня. В понедельник будут тестировать нас двоих Так как не знаю, задержусь там надолго или нет, то собираюсь первые два-три месяца подключаться не легким способом через PQ, а чем нибудь замороченным. Чтоб, в случае чего, после меня долго разбирались что к чему Вот
Михаил Л, это MS Query - замороченный? Ну, вы, блин, даёте. ИМХО, он гораздо более известный и прозрачный, чем вариант через PQ. К тому же учитывая его возраст имеется совместимость с совсем древнючими версиями Экселя. Пока что среди опытных юзеров гораздо больше знатоков VBA+SQL чем спецов по языку М. Так что, думаю зря вы это все затеяли. Хотя для развития, в любом случае, очень полезно.
Михаил Л написал: Я то думал, что также, как и с SQL, по интернету передается связь.
Можно и по интернету Только настраивать нужно. А как - это скорее всего поискать в инете, спросить https://www.sql.ru/forum/mysql
Цитата
Михаил Л написал: Мне бы из таблицы data оставить два столбца, например, Brand и Mark.
Да пожалуйста, только осмысленнее проводите связывание. А то по тем полям, которым вы делали Join общих данных то нет В основном в SQL при соединении таблиц почти тоже самое что и в Power Query, только гибче местами, можно связывать сразу несколько таблиц, можно и нужно указывать какие поля каких таблиц нужны в результирующем выводе, включая их переименование, а также фильтрацию по ходу, и, если нужно, группировку, а также задание необходимого порядка вывода, если нужно Правда, следует учесть, что Access SQL связывание нескольких таблиц требует расстановки скобок
Код
Select Table1.TimeStart, Table1.TimeFinish, Table1.FromCity, Table1.ToCity, Table2.ModelName, Table3.PersonName As [Фамилия Имя Отчество]
From (
Table1 Inner Join Table2 On (Table1.FKey2 = Table2.PKey2)
) Inner Join Table3 On (Table1.FKey3 = Table3.PKey3)
Where Table2.ProductName = 'Паровоз' And Table3.PersonType = 'Машинист'
Order By Table1.FromCity
Скорее бестолковый. Как начал с этим делом возиться, так фактически сразу перешёл на сбор связанных таблиц в Access, уже там написание View (то что там почему-то называется запрос. Гораздо удобнее, чем в этом недоделанном MS Query) и только уже View подключать сначала через MS Query, а потом как разобрался, через odc, чтобы не заниматься бессмысленным щёлканьем, когда всего лишь нужно указать строку подключения и собственно SQL запрос.
А где прописаны эти поля в коде? filid - ?, lid = ? Join так Join Узнаю как джоин настроить)
Цитата
PooHkrd написал: ИМХО, он гораздо более известный и прозрачный, чем вариант через PQ гораздо больше знатоков VBA+SQL чем спецов по языку М
А мне PQ кажется легким по подключению к базе данных) Как мне увиделось на собеседовании нет там таких знатоков. Словосочетание "Power Query" не слышали, зато "база SQL" слышали. Мне главное чтоб не было объяпона, а через месяц работы я уже буду в курсе всех раскладов
Имел ввиду что через месяц работы, когда я все им настрою, мне скажут что не прошел испытательный срок Джойнится только filid = Код Думал что и lid задействован