MySQL - MyODBC

Für allgemeine Fragen zur Programmierung mit PureBasic.
PBFetischist
Beiträge: 55
Registriert: 26.10.2004 19:42

MySQL - MyODBC

Beitrag 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
Benutzeravatar
ABBKlaus
Beiträge: 61
Registriert: 15.03.2006 22:09
Wohnort: Ratingen
Kontaktdaten:

Beitrag 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
PureBasicPower TailBite Printer_Lib / PDFBarcode / PrintBarcode / ExcelWriter
aspicza
Beiträge: 11
Registriert: 18.04.2006 07:23
Kontaktdaten:

Beitrag 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
Antworten