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/.

Użytkownik


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 … base-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 SubOczywiś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-insta … y-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



inż.
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

Użytkownik


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



Moderator




Looknij na ten artykuł:
http://webcheatsheet.com/asp/database_connection_to_MSSQL.php
Offline

Użytkownik


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 ceUstawienia
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



Moderator




Sprawdź kod na bazie accesowej, wtedy będzie jasne czy to problem kodu czy bazy
Offline

Użytkownik


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 FunctionI 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
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.
Offline