Страницы: 1
RSS
Подключиться к базе данных sql или mysql без использования Power Query
 
Привет всем!
Подскажите, пожалуйста, как подключаются к базе данных из Excel без использования Power Query?
И выгрузить, например, в ячейку B2
 
Изменено: Михаил Л - 29.07.2020 21:05:32
 
Вот например тут рядом в архиве:
https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=44827
Ну или поищите ещё примеров по ADODB.Connection
DAO: https://www.planetaexcel.ru/forum/index.php?PAGE_NAME=read&FID=8&TID=34608
Изменено: Hugo - 29.07.2020 21:18:01
 
Hugo, спасибо, завтра попробую
А так сработает: в файле xlsx выполню макрос и выгружу на лист данные, а потом сохраню файл также в формате xlsx?
Вообще я рассчитывал на вариант через вкладку данные и подключение кодом для файла sql.
 
Доброе время суток
Михаил Л, из того, что у вас ИИ отнял столько постов, что по количеству вы стали как начинающий, думаю, всё же не стоит строить вопросы как начинающий. Даже если идти путём, который указал Игорь, то всё же для начала выясните: с какой сервером баз данных вы имеете дело, далее, пользуясь The Connection Strings Reference выясняете, что в Администрирование источник данных ODBC соответствующей разрядности (с OleDb несколько сложнее) определяетесь, какие из драйверов установлены в вашей системе. Если ничего, добро пожаловать на сайт разработчика сервера баз данных за их получением и установкой. Вот далее, используя данные по IP, имени сервера в сетке, имени экземпляра (если есть) конструируете и тестируете в ADODB.Connection подключение, узнав у админа сервера БД, а есть ли у вас права на доступ к серверу. Если заработало, то только тогда имеет смысл узнавать есть ли доступ: к конкретной базе данных, конкретной таблице базы данных :) . И если да, тогда писать SQL запрос.
Вариант для SQL Server LocalDb версии через odc-файл (используется Данные, существующие подключения и указываете файл из архива. Файл текстовый, поэтому сначала убедитесь, что есть такой сервер, есть такой драйвер, есть такая база, есть такая таблица. И если нет, то впишите нечто своё :) ). Тоже самое, фактически можно сделать, используя Microsoft Query (не путать с Power Query).
Изменено: Андрей VG - 29.07.2020 21:56:38
 
Андрей VG, у меня сейчас ограничен доступ к компьютеру. Завтра смогу продолжить уточнять
 
Ну я точно в этой теме начинающий (работал так пару раз и то локально в пределах офиса с базой Access).
Да и постов за 8 лет всего 6 :)
И это уже второй раз! За почти 20 лет...
Изменено: Hugo - 29.07.2020 22:27:36
 
Снова здравствуйте
Переустановил виндовс и установил воркбенч
Подключился без проблем из PQ к базам данных
Код
MySQL.Database("localhost", "sakila", [ReturnSingleDatabase=true])
                 {[Schema="sakila",Item="category"]}[Data]
                 [[name],[last_update]]

Код
Sql.Database("azuredb.powerqueryworkshop.com", "Adventureworks2012")
             {[Schema="Sales",Item="vSalesPerson"]} [Data]
             [[BusinessEntityID],[EmailAddress],[AddressLine1]]
Также пробовал в файле отсюдова  подключиться к базе данных 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, то необходимые драйвера и для макросов+др. установлены?
 
Цитата
Михаил Л написал:
вариантом с odc-файлом
С этим получилось!

Пока один вопрос остался:
Только не знаю как выбрать столбцы, а не всю таблицу грузить
Изменено: Михаил Л - 30.07.2020 11:53:05
 
Цитата
Михаил Л написал:
как выбрать столбцы
Так я и не нашел как выбрать только пару столбцов из всей таблицы
Может кто покажет?
 
CСтолбцы выбираются вот тут
SELECT t2.Pr

Должно как-то так SELECT t2.ИмяСтолбца1, t2.ИмяСтолбца2, ....
 
DrillPipe, извините что сразу не сказал. Меня уже макрос не интересует.
Раз можно через Мастер подключения, то надобности через макрос не увидел
 
Так в мастере посмотрите строку подключения

SELECT * FROM `sakila`.`category`

Можете ручками подправить
например
Код
SELECT t2.ИмяСтолбца1, t2.ИмяСтолбца2, ....
FROM `sakila`.`category` as t2
Изменено: DrillPipe - 30.07.2020 15:57:46
 
Цитата
DrillPipe написал:
t2.ИмяСтолбца1, t2.ИмяСтолбца2
Разве т2 можно писать не только в макросе?
Сейчас опробую
 
Цитата
Михаил Л написал:
Разве т2 можно писать не только в макросе?
FROM `sakila`.`category` as t2 <- тут можете дать любой псевдоним для вашей таблицы с некоторыми ограничениями по наименованию

можно вообще ничего не переименовывать просто писать каждый раз  `sakila`.`category`.ИмяСтолбца
 
DrillPipe, теперь все понятно! Спасибо большое
Проверил - работает . От души!
 
Проблемой осталось подключение к моему localhost-у по MySQL с другого компа. на том компе нет WorkBench-а. На моем - есть, но не знаю как дать внешний доступ.
Может, есть решение этой проблемы?  
 
Цитата
Михаил Л написал:
о ошибкой высвечивается строка с - Sheets("get1").Range("A1")
Михаил, а можно пример набора данных? Так вроде всё корректно, но детали...
Цитата
Михаил Л написал:
localhost-у по MySQL с другого компа
Вы подключаетесь к серверу, localhost - это ссылка на IP 127.0.0.1 - по умолчанию это ваш компьютер в виртуальной внутренней подсети компьютера (надеюсь наш админ лучше разъяснит :) ). А строке подключения должен быть указан IP вашего компьютера в той сети, в которой тот другой компьютер вас видит. А лучше не IP - моветон, а имя полное имя компьютера
Код
Driver={MySQL ODBC 5.2 UNICODE Driver};Server=192.168.1.1;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;

или
Код
Driver={MySQL ODBC 5.2 UNICODE Driver};Server=yourComputerName.subDomainName.domainName;Database=myDataBase;User=myUsername;Password=myPassword;Option=3;
 
Цитата
Андрей VG написал:
всё корректно, но детали.
Наверняка, все корректно для соответствующего примера. Базу данных прикрепил свою (какую нашел). Мне бы из таблицы data оставить два столбца, например, Brand и Mark.
Цитата
Андрей VG написал:
localhost - это ссылка на IP 127.0.0.1 - по умолчанию это ваш компьютер в виртуальной внутренней подсети компьютера (надеюсь наш админ лучше разъяснит
Стало понятнее. Все таки должна быть сеть. Я то думал, что также, как и с SQL, по интернету передается связь.
Я дома ковыряюсь - админа нет или я по умолчанию админ, но сети точно нет.

Вообще, из за чево весь шум. Два дня назад откликнулся на вакансию: требуется специалист с углубленными знаниями формул, таблиц. На собеседовании узнал что надо подключаться к базе данных (не знаю какой именно) и с ней работать и девочкам помогать с формулами. Вчера позвонили что выбрали двух кандидатов, в том числе меня. В понедельник будут тестировать нас двоих
Так как не знаю, задержусь там надолго или нет, то собираюсь первые два-три месяца подключаться не легким способом через PQ, а чем нибудь замороченным. Чтоб, в случае чего, после меня долго разбирались что к чему
Вот
 
Михаил Л, это MS Query - замороченный?  :) Ну, вы, блин, даёте. ИМХО, он гораздо более известный и прозрачный, чем вариант через PQ. К тому же учитывая его возраст имеется совместимость с совсем древнючими версиями Экселя. Пока что среди опытных юзеров гораздо больше знатоков VBA+SQL чем спецов по языку М. Так что, думаю зря вы это все затеяли. Хотя для развития, в любом случае, очень полезно.  :D
Вот горшок пустой, он предмет простой...
 
Цитата
Михаил Л написал:
Я то думал, что также, как и с 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

Цитата
PooHkrd написал:
это MS Query - замороченный?
Скорее бестолковый. Как начал с этим делом возиться, так фактически сразу перешёл на сбор связанных таблиц в Access, уже там написание View (то что там почему-то называется запрос. Гораздо удобнее, чем в этом недоделанном MS Query) и только уже View подключать сначала через MS Query, а потом как разобрался, через odc, чтобы не заниматься бессмысленным щёлканьем, когда всего лишь нужно указать строку подключения и собственно SQL запрос.
Изменено: Андрей VG - 31.07.2020 07:48:08
 
Цитата
Андрей VG написал:
осмысленнее проводите связывание. А то по тем полям, которым вы делали Join общих данных то нет
Так там Join происходит?! А я все думаю для чего там таблица на первом листе. А там джойнится к ней.
Цитата
Андрей VG написал:
А то по тем полям
А где прописаны эти поля в коде? filid - ?, lid = ?
Join так Join :D  Узнаю как джоин настроить)
Цитата
PooHkrd написал:
ИМХО, он гораздо более известный и прозрачный, чем вариант через PQ
гораздо больше знатоков VBA+SQL чем спецов по языку М
А мне PQ кажется легким по подключению к базе данных)
Как мне увиделось на собеседовании нет там таких знатоков. Словосочетание "Power Query" не слышали, зато "база SQL" слышали.
Мне главное чтоб не было объяпона, а через месяц работы я уже буду в курсе всех раскладов
 
Цитата
Михаил Л написал:
Мне главное чтоб не было объяпона
Ну, так тренируйтесь, например, Упражнения по SQL
 
Цитата
Андрей VG написал:
Ну, так тренируйтесь
Имел ввиду что через месяц работы, когда я все им настрою, мне скажут что не прошел испытательный срок
Джойнится только filid = Код
Думал что и lid задействован
Изменено: Михаил Л - 31.07.2020 12:52:56
Страницы: 1
Наверх