Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Witam
Nie wiem czy to jest właściwe forum na pytania o technologie MS ale na chwilę obecną nie mam konta na żadnym związanym z windowsami ;-)
Obiecałem kogoś nauczyć tworzenia makr dla excela przeczytałem sobie to poniżej i język jak język odrobinę dziwna składnia ale do zrozumienia
http://msdn.microsoft.com/en-us/library/ee441152%28v=office.12%29.aspx
tutaj natomiast jest excel object model czasami się tam gubię ale też do zrozumienia do czego jeszcze wrócimy ;-)
http://msdn.microsoft.com/en-us/library/bb149081.aspx
ale jak to zwykle bywa gdy zabieram się za coś konkretnego i wymagającego użycia biblioteki a nie tylko samego języka to kończy się nieciekawie.
Chciałem pobrać jakieś dane z bazy mysql znalazłem to http://stackoverflow.com/questions/13558921/how-can-vba-connect-to-mysql-database-in-excel
następnie zainstalowałem to http://dev.mysql.com/downloads/connector/odbc/ bo doszedłem do wniosku, że jest potrzebne ;-)
Stworzyłem coś takiego
Option Explicit Sub getDataFromDataBase() Dim con As Object, rs As Object 'con to jakiś tam obiekt polaczenia a rs obiekt recordset jak opisane tutaj http://www.w3schools.com/asp/ado_intro.asp Set con = CreateObject("ADODB.Connection") Dim conArgs As String conArgs = "DRIVER={MySQL ODBC 5.3.4 Driver};" & _ "SERVER=localhost;" & _ "DATABASE=vba;" & _ "USER=tomasz;" & _ "PASSWORD=pass123;" & _ "OPTION=3" 'MsgBox conArgs On Error GoTo SQLCONERROR con.Open conArgs con.Close SQLCONERROR: Dim ce As Object For Each ce In con.Errors MsgBox ce Next ce End Sub
Oczywiście jest tutaj tylko próba (nieudana) połączenia nad pobieraniem danych posiedzę później.
Powyższy kod skutkuje następującym komunikatem (to jest ta część po etykiecie sqlconerror)
[Microsoft][Menedżer sterowników ODBC] Nie można odnaleźć nazwy źródła danych, a nie ma podanego sterownika domyślnego
Teraz nie wiem czy ten sterownik mysql odbc jest zainstalowany poprawnie gdyż w panelu sterowania -> narzędzia administracyjne -> odbc nie ma nic związanego z mysql ani na liście ani po kliknięciu opcji dodaj, gdzie jest tylko sql server od ms i nie wiem czy ten instalator od mysql odbc robi coś źle czy trzeba jakie dodatkowe usługi windows uruchomić aby cokolwiek zaczęło działać.
Mysql odbc zainstalowało się w jakimś katalogu w program files, którego nie zmieniałem zostało tak jak chciał instalator i nie wiem czy mam próbować dodawać do zmiennej path bo tutaj (http://dev.mysql.com/doc/refman/5.0/es/myodbc-installation-binary.html#myodbc-installation-binary-windows-dll ) pisze, że niby instaluje do windows\system32 i rejestruje wszystkie potrzebne składniki (cokolwiek to znaczy) i już sam nie wiem gdzie mam szukać błędu.
MySQL w wersji 5.5.34 z jakiegoś xampp działa jak należy z "czarnego okienka" (cmd) mogę sobie tworzyć bazy, tabele itd.
Offline
Strzał: masz do źródło dodane w źródłach danych OBDC w Narzędziach Administracyjnych? IMO powinno być dodane bo to się tak fajnie dubluje ;)
Offline
Możesz jaśniej?
Wspominałem już że na liście "składników" do dodania nie ma nic co chociażby trochę przypominało mysql -> http://www.h9k.republika.pl/odbc.png jeżeli o to chodzi. Nie wiem czy to niewłaściwy plik pobrałem czy ( http://dev.mysql.com/downloads/connector/odbc/ ) ale nie ma tam nic na tej liście do dodania chyba, że to nie to okienko.
Edycja:
Zainstalowałem wersje x64 i w końcu się pojawiło na liście, dodałem źródła do tego connectora ale w tym "programiku" vba dalej ten sam błąd.
Ostatnio edytowany przez HAL9000 (2014-09-20 15:35:53)
Offline
Looknij na ten artykuł:
http://webcheatsheet.com/asp/database_connection_to_MSSQL.php
Offline
Nie wiem albo ja jestem niepełnosprytny (dość prawdopodobne) albo coś jest nie tak nie wiem z czym
Kod:
Option Explicit Public Sub getDataFromDatabase() Dim con As Object, rs As Object Dim conArgs As String, queryStr As String queryStr = "SELECT userName FROM vba WHERE userID = 1" conArgs = "DRIVER={MySQL ODBC 5.3 Unicode Driver};" & _ "USER=root;" & _ "PASSWORD=;" & _ "DATABASE=vba;" & _ "PORT=3306;" & _ "OPTION=3;" 'MsgBox conArgs 'ThisWorkbook.Sheets(1).Cells(1, 1).Value = conArgs Set con = CreateObject("ADODB.Connection") On Error GoTo SQLERRORS con.Open conArgs con.Close con = Nothing SQLERRORS: Dim ce As Object For Each ce In con.Errors MsgBox ce Next ce
Ustawienia
http://www.h9k.republika.pl/odbc.png
Skutek
http://www.h9k.republika.pl/error.png
Dodane
Szukam i szukam w sieci w czym moze byc problem i gdzieś tam ktoś pisał, że architektura tego sterownika mysql powinna być identyczna jak excela, ustaliłem, że excel jest 32bitowy a mysql odbc x64 bo jak już wspomniałem tego 32bitowego w ogóle nie było można dodać w tym okienku od odbc w narzędziach administracyjnych ma to jakikolwiek sens? I co ewentualnie zrobić aby ta 32bitowa wersja była widoczna aby na początek można ją było dodać do źródeł.
Ostatnio edytowany przez HAL9000 (2014-09-20 18:19:07)
Offline
Sprawdź kod na bazie accesowej, wtedy będzie jasne czy to problem kodu czy bazy
Offline
Z accessem działa bez problemu ale tam jest zupełnie inny "connectionstring"
Option Explicit Dim DataBaseCon As Object Dim RstUsers As Object Public Sub main() Dim QueryString As String QueryString = "SELECT * FROM Users" Dim ConState As Integer ConState = OpenDataBaseConnection() If ConState Then MsgBox "Nie udalo sie nawiazac polaczenia z baza " & ConState Exit Sub End If Set RstUsers = CreateObject("ADODB.Recordset") RstUsers.Open QueryString, DataBaseCon MsgBox RstUsers.RecordCount Dim wyniki As Variant wyniki = RstUsers.GetRows() Dim r As Integer, c As Integer If RstUsers.RecordCount <> 0 Then For r = 0 To UBound(wyniki, 2) For c = 0 To UBound(wyniki, 1) ThisWorkbook.Sheets(1).Cells(r + 1, c + 1).Value = wyniki(c, r) Next c Next r End If RstUsers.Close Set RstUsers = Nothing Call CloseDataBaseConnection End Sub Private Function OpenDataBaseConnection() As Integer Set DataBaseCon = CreateObject("ADODB.Connection") Dim ConString As String ConString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=J:/excel2010/Simple.accdb;" & _ "Persist Security Info=False;" On Error GoTo SQLCONHANDLER DataBaseCon.Open ConString DataBaseCon.cursorlocation = 3 If DataBaseCon.State = 1 Then OpenDataBaseConnection = 0 'Exit Function End If OpenDataBaseConnection = 1 Exit Function SQLCONHANDLER: If Not DataBaseCon Is Nothing Then If DataBaseCon.State = 1 Then DataBaseCon.Close End If Set DataBaseCon = Nothing Dim ce As Object For Each ce In DataBaseCon.Errors MsgBox ce Next ce End Function Private Function CloseDataBaseConnection() On Error Resume Next DataBaseCon.Close Set DataBaseCon = Nothing End Function
I jeszcze takie pytanie bo niby doszedłem jak to ładnie "ułożyć" w komórkach excela ale niemniej nie wiem czy dobrze to zrozumiałem
The first subscript identifies the field and the second identifies the record number[/quote]
to z metody getrows czyli jeżeli w w tabeli sql dane sa w formacie
id | imie | adres
------------------
1 | jas | krakow
2 |karol | warszawa
to ten 1 wiersz z bazy jest zwracany jako kokumna?
Bo niby RecordCount zwraca 2 ale ubound(wynik,1) zwraca 2 czyli niby 3 wiersz a ubound(wynik, 2) zwraca 1 czyli niby 2 kolumny chyba, że czegoś tutaj nie zrozumiałem.
For some reason I'm thinking I'm still 25 but I act like I'm 12.
Offline
Time (s) | Query |
---|---|
0.00009 | SET CHARSET latin2 |
0.00004 | SET NAMES latin2 |
0.00130 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.138.135.4' WHERE u.id=1 |
0.00060 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.138.135.4', 1732453282) |
0.00026 | SELECT * FROM punbb_online WHERE logged<1732452982 |
0.00076 | DELETE FROM punbb_online WHERE ident='18.118.140.78' |
0.00058 | DELETE FROM punbb_online WHERE ident='54.36.148.43' |
0.00018 | SELECT topic_id FROM punbb_posts WHERE id=276030 |
0.00019 | SELECT id FROM punbb_posts WHERE topic_id=26440 ORDER BY posted |
0.00027 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=26440 AND t.moved_to IS NULL |
0.00023 | SELECT search_for, replace_with FROM punbb_censoring |
0.00085 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=26440 ORDER BY p.id LIMIT 0,25 |
0.00076 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=26440 |
Total query time: 0.00611 s |