powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение таблиц из MySQL и Excel
14 сообщений из 14, страница 1 из 1
Сравнение таблиц из MySQL и Excel
    #35576390
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Прошу совета по следующей проблеме. Сразу предлагаю кусок кода:

Dim mine As New ADODB.Connection
Dim testmysql As New ADODB.Connection
Dim rs As New ADODB.Recordset
testmysql.ConnectionString = "Provider=MSDASQL.1;" & _
"Persist Security Info=False;Data Source=testmysql"

mine.Open "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DATABASE=mine;" & _
"User=root;Password=root;PORT=3306;OPTION=3;"

testmysql.Open

Set rs = New ADODB.Recordset

rs.Open "select kod, f, i, o from zoom, tesmysql" & _
" where zoom.kod=testmysql.kod", mine

Т.е у меня есть таблица testmysql в XL для простоты с одним полем kod и одним значением. И мне нужно вытянуть данные с MySQL таблицы zoom с таким кодом. Как это сделать в VBA пока не имею понятия. Т.е. как я вижу при открытии рекордсета можно ему задать только одно соединение, а таблицу testmysql, которая в XL-e VBA не видит (ругается VBA короче). Мож кто-нить подкинет идею или разъяснить как это толково сделать.
Заранее спасибо за рекомендации !
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35577463
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: strike1
> Всем привет. Прошу совета по следующей проблеме. Сразу предлагаю кусок кода:
>
> rs.Open "select kod, f, i, o from zoom, tesmysql" & _
> " where zoom.kod=testmysql.kod", mine
>
> Т.е у меня есть таблица testmysql в XL для простоты с одним полем kod и одним
> значением. И мне нужно вытянуть данные с MySQL таблицы zoom с таким кодом. Как это
> сделать в VBA пока не имею понятия. Т.е. как я вижу при открытии рекордсета можно ему
> задать только одно соединение, а таблицу testmysql, которая в XL-e VBA не видит
> (ругается VBA короче). Мож кто-нить подкинет идею или разъяснить как это толково
> сделать.
> Заранее спасибо за рекомендации !


Например, пройтись по всем значениям столбца kod и составил бы такой запрос:
select kod, f, i, o from zoom where zoom.kod in (1,2,3,6,9,66,234,122,56, ...,57), где
цифры в скобках это значения из столбца kod.

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35578918
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ОК. Пасиба уже разобрался. У меня вообще проблема была не с самим запросом, а с обращением к двум таблицам из разных баз данных.
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35578927
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: strike1
> ОК. Пасиба уже разобрался. У меня вообще проблема была не с самим запросом, а с
> обращением к двум таблицам из разных баз данных.


Это я понял :)
Не знаю насчет MySql, есть ли там фишка как в акцессе Externel Table(по-моему) или Linked
Server как в MSSQL, если есть, то можно попробовать задействовать её. Но это так, на
будущее :)

Удачи

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35579278
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо за инфо ! Но я сделал иначе. Перед тем как сделать запрос к мускулу, в VBA выгружаю таблицу как csv тут же ее гружу в мускул (через командную строку) и даю запрос на сравнение таблиц из того же VBA :) Не знаю, короче несколько нестандартно наверно. Другого ничего в голову не пришло !
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35579284
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Теперь другая проблема. ДАнные по ходу не успевают выгрузится в рекордсет после запроса к мускулу. Пошагово делаю все нормально, а в реале не работает. Результаты запроса на лист XL не попадают.
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35579426
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strike1Спасибо за инфо ! Но я сделал иначе. Перед тем как сделать запрос к мускулу, в VBA выгружаю таблицу как csv тут же ее гружу в мускул (через командную строку) и даю запрос на сравнение таблиц из того же VBA :) Не знаю, короче несколько нестандартно наверно. Другого ничего в голову не пришло !
или) Загружай XL таблицу в скуль средствами VBA, через Connection.Execute(),
затем уже обратно получай выборку через тот же коннект.
или) Загружай скулевскую таблицу в рекордсет (а потом и прямо на лист XL)
и делай выборку уже через коннект к XL

Разберись с кодом подключения на VBA, ибо раннее и позднее связывание для одного
объекта в пределах процедуры - излишество.

Для XL самое простое (и притормаживающее) решение по получению данных из разных
источников - .Query, поскольку потом все данные находятся в одной книге, куда и
строишь сложные запросы.

Вообще, такие запросы надо делать (если Офисом) - из Акцесса, там можно одновременно
подключить представления ко всем источникам - и вперед и с песнями...
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35579719
Фотография Игорь Горбонос
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> Автор: strike1
> Теперь другая проблема. ДАнные по ходу не успевают выгрузится в рекордсет после
> запроса к мускулу. Пошагово делаю все нормально, а в реале не работает. Результаты
> запроса на лист XL не попадают.


Данные не могут не выгрузится в рекордсет. Пока запрос не выполнится, в программу не
возвращается управление, разве что работаешь в асинхронном режиме, что вряд ли.

Может проблема с драйвером, и стоит его обновить?

Попробуй показать теперешний вариант кода, потому что у меня запросы из екселя что в
MSSQL, что в Yaffil выполняются нормально, и данные я получаю

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35580184
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
автор или) Загружай XL таблицу в скуль средствами VBA, через Connection.Execute(),
затем уже обратно получай выборку через тот же коннект.

Попробую возразить. С тем чтобы мне загрузить таблицу в MysQL, надо использовать load data. Коннектор ругается , мол пишет, что не поддерживается такая команда (когда из ВБА пробую). Попробовал создать в мускуле такую процедуру и потом поднять ее из ВБА и опять подстава. Нельзя в мускуле ее сохранять (т.е. load data в процедуре). Пришлось использовать командную строку и mysqlimport опять же из ВБА.

Я хотел бы спросить следующее. Ситуация такая, пример кода:

....

rs.open " некий скул запрос ", connect_to_mysql ...

range("A1"").copyfromrecordset rs

....

Если ставлю в отладчике точку останова на 1-ой строчке, и потом пошагово все работает.
На 2-ой не работает, с рекордсета ничего не копится. Мож у него свойство есть какое, чтоб его проверить и потом давать запрос к mysql ? ? ?
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35581653
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Игорь Горбонос
> Автор: strike1
> Теперь другая проблема. ДАнные по ходу не успевают выгрузится в рекордсет после
> запроса к мускулу. Пошагово делаю все нормально, а в реале не работает. Результаты
> запроса на лист XL не попадают.


Данные не могут не выгрузится в рекордсет. Пока запрос не выполнится, в программу не
возвращается управление, разве что работаешь в асинхронном режиме, что вряд ли.

Может проблема с драйвером, и стоит его обновить?

Попробуй показать теперешний вариант кода, потому что у меня запросы из екселя что в
MSSQL, что в Yaffil выполняются нормально, и данные я получаю

--
С уважением Горбонос Игорь Леонидович

Posted via ActualForum NNTP Server 1.4

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
Declare Function OemToChar Lib "user32" Alias "OemToCharA" (ByVal lpszSrc As _
String, ByVal lpszDst As String) As Long

Sub mysql_query()

Dim path_nam As Object
Dim get_fold As Object
Dim script_nam As Object
Dim path_t As String

path_t = "C:\"

Set path_nam = CreateObject("scripting.filesystemobject")
Set get_fold = path_nam.getfolder(path_t)


Dim test As New ADODB.Connection

Dim rs As New ADODB.Recordset

Dim rs1 As New ADODB.Recordset

Dim string1 As String

Dim string2 As String

Dim string3 As String

Dim proc

test.Open "Driver={MySQL ODBC 5.1 Driver};Server=localhost;DATABASE=test;" & _
"User=root;Password=root;PORT=3306;OPTION=3;"

rs.Open "truncate child_all", test
rs.ActiveConnection = Nothing

string1 = "mysqlimport --user=root --password=root "
string2 = "--fields-terminated-by=" & """" & "," & """"
string3 = " test " & """" & "c:\child_all.csv" & """"

prID = Shell("cmd.exe /k" & string1 & string2 & string3,  6 ) 

' думаю проблема здесь , надо как-то проверить prID, что команда successfully finished


Set rs = New ADODB.Recordset

sour = "select fam, name from child_all"

With rs
.ActiveConnection = test
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
.Source = sour
End With

rs.Open sour, test

rs.ActiveConnection = Nothing

ActiveSheet.Range("A2").CopyFromRecordset rs

ActiveSheet.Columns("A:I").AutoFit

killString = "taskkill /F /pid " & prID
Call Shell(killString, vbHide)

path_nam.Deletefile "c:\child_all.csv"

End Sub

Но прежде чем запустить процедуру mysql_query. Есть такой код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
...

With expbook
    .SaveAs Filename:="c:\child_all.csv", FileFormat:=xlCSV
    .Close savechanges:=False
End With

' или здесь надо сделать проверку на complete, типа что все ОК. Не пойму пока.
...

...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35581659
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот выложил кусочек прожки. Готов выслушать любую критику и полезные рекомендации тож ...
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35582012
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
strike1range("A1"").copyfromrecordset rs
А если выгрузить через массив?
Код: plaintext
1.
2.
3.
4.
5.
6.
    rst.MoveFirst
    myArr = rst.GetRows()
    For i = LBound(myArr,  1 ) To UBound(myArr,  1 )
        For j = LBound(myArr,  2 ) To UBound(myArr,  2 )
            ActiveSheet.Cells( 1 , 1 ).Offset( 1  + j, i).Value = myArr(i, j)
        Next
    Next
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35582043
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, тестовик такой, что прямо через край...

Начнем сначала.
Выложи файлом: пример листа XL с данными (с именами полей) +
пример таблицы MySQL с данными (можно тоже в виде листа XL) +
пример нужного тебе SQL-запроса (алиасы не забудь указать у полей!)

После этого получишь процедуру, которую будешь тестить из отдельного чистого XL файла
...
Рейтинг: 0 / 0
Сравнение таблиц из MySQL и Excel
    #35584206
Фотография strike1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM
А если выгрузить через массив?


Толку выгружать, если:

rs.recordcount = 0

Пасиба за советы, но вот добавил пару строк и все работает, что называется, в реале:


Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
Do While i <  1 

rs.Open sour, test
i = rs.RecordCount
rs.ActiveConnection = Nothing
ActiveSheet.Range("A2").CopyFromRecordset rs
rs.Close

Loop


AndreTMКстати, тестовик такой, что прямо через край...

В смысле тестовик ?
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Сравнение таблиц из MySQL и Excel
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]