Seite 1 von 1
MySQL - MyODBC
Verfasst: 28.04.2006 19:47
von PBFetischist
Hallo zusammen,
es geht hier nicht nur um PB aber der Zusammenhang ist gegeben und zwar so:
Ich möchte über die ODBC Funktionen von PB eine MySQL Datenbank ansprechen. Das mache ich über MyODBC 3.51. Klappt super.... wenn ich diese MySQL Datenbank lokal installiert habe. Leider nur dann.
Problem: Wenn ich auf eine MySQL Datenbak zugreifen möchte, die auf meinem WEBspace liegt, bei Evanzo, dann bekomme ich den Hinweis:
Access Denied for user
testuser@adsl-dsl241.helinet.de
Eine Lösung wäre ja, diesen User anzulegen aber mein Hostname ist ja dynamisch. Also mein Clientname, der mir, von meinem Provider zugewiesene. Ich müsste also bei jeder neuen Internetverbindung erst den neuen Benutzer anlegen.
Hat jmd dafür einen Lösungsansatz ? Kann ich mich vielleicht ohne Hostname anmelden ?
Ich hoffe, ich habe mich verständlich ausgedrückt...
Grüße
Heiko
Verfasst: 28.04.2006 23:31
von ABBKlaus
Am besten über den ODBC-Datenquellen-Administrator testen und dann die Werte über die registry auslesen.
z.B.
HKCU/Software/ODBC/ODBC.INI/db1234_12345
hab das mal mit meinem SQL Server probiert, und hat problemlose geklappt.
Daten von deinem Provider bitte entsprechen eintragen :
Datenbankname = DSN
Benutzer = UID
Passwort = PWD
Host = SERVER
MfG Klaus
Code: Alles auswählen
#ODBC_ADD_DSN = 1 ; Add Data source
#ODBC_ADD_SYS_DSN = 4 ; Add SYSTEM Data source
#ODBC_CONFIG_DSN = 2 ; Configure (edit) Data source
#ODBC_REMOVE_DSN = 3 ; Remove Data source
#ODBC_REMOVE_SYS_DSN = 6 ; Remove SYSTEM Data source
#SQL_SUCCESS = 0
#SQL_SUCCESS_WITH_INFO = 1
#SQL_ERROR = -1
#SQL_NO_DATA = 100
#SQL_MAX_MESSAGE_LENGTH = 512
Procedure.s GetSQLError()
Protected SQLError.w
Protected ErrorMSGLen.w
Protected pfErrorCode.l
Protected iError.l
Protected ODBCLib.l
Errortext$=""
ODBCLib=OpenLibrary(#PB_Any,"ODBCCP32.DLL")
If ODBCLib
For SQLError=1 To 8
pcbErrorMsg=0
iError=SQLError
cbErrorMsgMax=#SQL_MAX_MESSAGE_LENGTH
pfErrorCode=0
ErrorMSGBuf=AllocateMemory(cbErrorMsgMax)
If ErrorMSGBuf<>0
SQLResult=CallFunction(ODBCLib,"SQLInstallerError",iError,@pfErrorCode,ErrorMSGBuf,(cbErrorMsgMax-1),@ErrorMSGLen)
;SQLResult=SQLInstallerError_(iError,@pfErrorCode,ErrorMSGBuf,(cbErrorMsgMax-1),@ErrorMSGLen)
Debug Str(SQLError)+" : Res="+Str(SQLResult)
Select SQLResult
Case #SQL_SUCCESS
Debug "ODBC : SQL SUCCESS"
Case #SQL_SUCCESS_WITH_INFO
Debug "ODBC : SQL SUCCESS WITH INFO"
Case #SQL_NO_DATA
Debug "ODBC : SQL NO DATA"
Case #SQL_ERROR
Debug "ODBC : SQL ERROR"
EndSelect
If ErrorMSGLen<>0
ErrorMsg$=PeekS(ErrorMSGBuf,ErrorMSGLen)
Errortext$+Str(iError)+"="+ErrorMsg$+Chr(13)
Debug "ODBC : Fehler "+Str(iError)+"="+ErrorMsg$
EndIf
FreeMemory(ErrorMSGBuf)
EndIf
Next
CloseLibrary(ODBCLib)
EndIf
If Errortext$<>""
MessageRequester("SQL Error",Errortext$,#PB_MessageRequester_Ok)
EndIf
ProcedureReturn Errortext$
EndProcedure
Procedure.b MakeConnection(Driver$,Attributes$)
Protected ODBCLib.l
Debug "ODBC : '"+Attributes$+"'"
MyMemory=AllocateMemory(Len(Attributes$))
If MyMemory
CopyMemory(@Attributes$,MyMemory,Len(Attributes$))
For L=1 To Len(Attributes$)
If PeekB(MyMemory+l-1)=Asc(";")
PokeB(MyMemory+l-1,0)
EndIf
Next
Result=SQLConfigDataSource_(0,#ODBC_ADD_DSN,Driver$,MyMemory)
If Result=#False
Debug "ODBC : SQLConfigDataSource fehlgeschlagen"
GetSQLError()
EndIf
FreeMemory(MyMemory)
EndIf
ProcedureReturn Result
EndProcedure
If InitDatabase()=#False
Debug "ODBC : InitDatabase fehlgeschlagen"
End
EndIf
DRIVER$="MySQL ODBC 3.51 Driver"
SERVER$="mysql.xxxx.de"
DSN$="db1234_12345"
UID$="mysql1234_12345"
PWD$="123456"
ATTRIB$="DSN="+DSN$+";"
ATTRIB$+"DATABASE="+DSN$+";"
ATTRIB$+"DESCRIPTION="+DSN$+";"
;ATTRIB$+"DRIVER=C:\WINDOWS\system32\myodbc3.dll;"
ATTRIB$+"PWD="+PWD$+";"
ATTRIB$+"SERVER="+SERVER$+";"
ATTRIB$+"UID="+UID$+";"
ATTRIB$+";"
If MakeConnection(DRIVER$,ATTRIB$)
Debug "ODBC : MakeConnection OK"
If OpenDatabase(1,DSN$,UID$,PWD$)
Debug "ODBC : OpenDatabase OK"
Else
Debug "ODBC : OpenDatabase fehlgeschlagen"
EndIf
Else
Debug "ODBC : MakeConnection fehlgeschlagen"
EndIf
Verfasst: 01.05.2006 12:09
von aspicza
Hallo!
Wenn diese Fehlmeldung kommt, dann ist einfach nur damit gmeint, dass der Benutzer 'testuser' keinen Zugriff hat. Die Angabe des Hostes ist rein informativ.
Es ist unter MySQL möglich, Benutzern nur von einem bestimmten Host aus den Zugriff zu gewähren.
Provider wie zum Beispiel 1&1 lassen Zugriffe auf die Datenbank nur über Skripte zu, die direkt bei denen auf dem Webserver liegen.
Ich gehe bei Deinem Problem davon aus, dass Dein Provider aus Sicherheitsgründen externe Zugriffe auf den Datenbankserver nicht zulässt.
Dein Problem hat nichts mit dem ODBC-Treibr zu tun!
Schöne Grüße