Seite 2 von 3

Verfasst: 01.07.2007 17:35
von Bisonte
MSSQL_ODBC-DSN_on-the-fly.pb

Das krieg ich auch nur zum laufen, wenn der Treiber mit Username und Passwort eingegeben wurde...

Naja dann werd ich mal wieder schauen ob ich das mit der dll hinbekomme...

vielleicht lags ja nur an der version der dll....

Verfasst: 01.07.2007 19:07
von Velz
na wenn du das sagst...

ist halt schon etwas her.. dass ich das mit odbc gemacht habe.. aber es sollte so sein, dass du die DSN eben on the fly erstellst. Und somit auch Username und passwort mitgibst.

what ever..

Ich arbeite seit längerem mit der libmysql.. das geht sehr gut. ist aber etwas aufwändiger als mit odbc.

Verfasst: 02.07.2007 12:06
von bobobo
Das On-the-Fly-Ding hatte ich auch immer benutzt, bis mir dann
aufgegangen ist , dass eine hinterlegte REG-Datei mit den
entsprechenden Einstellungen genausogut zur Einrichtung einer
ODBC-Verbindung taugt (zumindest bei win2k bis XP hat das bisher
immer bestens funktioniert).
Diese Reg-Datei dann mit
'regedit -s dateiname.reg'
in die Registrierung einpflegen.
Wirkt instant.
Die RegDatei exportiert man sich dazu mal aus der Registrierung.
Wo die Einträge in der Registrierung liegen, sollte man sich dazu mal
selber aus der Registrierung raussuchen.

@Velz
Und Username und Passwort werden nicht in der ODBC-Verbindung
angegeben, sondern dort nur für eine optionale Testverbindung
optional gebraucht und zum Einrichten von dB-spezifischen Geschichten.

Die ODBC-Verbindung enthält eigentlich nur die Treiberangabe, den Ort
der Datenbank (ist Treiberspezifisch) und ein paar Sachen bezüglich
des Datenaustauschs per ODBC.
Letztlich wird der Username und Passwort bei der Ansprache
mit den PB-Database-Funktionen erst gebraucht. (und natürlich beim
Einrichten der Datenbank selber)

Verfasst: 10.08.2007 03:46
von Bisonte
eieiei... nun kann ich dir endlich folgen ;) allerdings wenn ich in

->Verwaltung->Datenquellen eine DSN anlegen will, MUSS ich zumindest einen Benutzer und so weiter eingeben, sonst lässt der mich nicht auf Ok klicken.... allerdings das PW Feld darf freibleiben... (das ich das nich schon vorher probiert hab... :oops: )

Registry schlüssel ... ok ich bin schon etwas älter und die brille find ich nicht ;) wo steckt denn der.... ?

Verfasst: 10.08.2007 05:11
von Bisonte
Hach... Selbsterkenntnis....

Hab "MSSQL_ODBC-DSN_on-the-fly.pb" nun doch zum laufen bekommen...

War ein kleines Problem mit den Anmeldedaten... die sind aber auch konfus durcheinander da drin ;)

Ausserdem steht der Eintrag dann nicht in Benutzer DSN sondern in System DNS...

Änderungen :

Code: Alles auswählen

DRIVER$="SQL Server"
SERVER$="MEIN-MS-SQL-SERVER"
ADDRESS$="127.0.0.1,1433"
ändern in ...

Code: Alles auswählen

DRIVER$="MySQL ODBC 3.51 Driver" ; Der Name des Treibers...
SERVER$="localhost" ; Server wo die DB ist...
ADDRESS$="localhost,3306" ;Der Standardport MySQL ist 3306 !!!
XAMPP lässt grüssen (funktioniert natürlich auch per I-Net ;) )

und nun funktionierts... boah schwere Geburt ;)


:allright: Danke bobobo

Verfasst: 11.08.2007 22:06
von mk-soft
Suche MySQL hätte gereicht :mrgreen:
Gerade erst Upgedatet
http://www.purebasic.fr/german/viewtopi ... ight=mysql

FF :wink:

Verfasst: 12.08.2007 05:51
von Bisonte
Genau diesen Fred hatte ich ja auch gefunden... nur mit PB3.30 geht das nicht ;)

Verfasst: 12.08.2007 12:49
von Kiffi
Bisonte hat geschrieben:Genau diesen Fred hatte ich ja auch gefunden...
:lol:

Grüße ... Kiffi

Verfasst: 12.08.2007 13:54
von mk-soft
Wer lesen kann ist im Vorteil, Sorry :roll:

EDIT + UPDATE (StringField)

Zur Entschuldigung das ganze mal für PB 3.30

Code: Alles auswählen

;-TOP
; Kommentar : DSN Helper für Purebasic 3.30
; Version   : v1.03
; Author    : Michael Kastner
; Datei     : DsnHelper.pb
; Erstellt  : 28.09.2006
; Geändert  : 03.08.2007

; ***************************************************************************************

;Enumeration 1
  #ODBC_ADD_DSN = 1             ; // Add data source
  #ODBC_CONFIG_DSN = 2          ; // Configure (edit) Data source
  #ODBC_REMOVE_DSN = 3          ; // Remove data source
  #ODBC_ADD_SYS_DSN = 4         ; // add a system DSN
  #ODBC_CONFIG_SYS_DSN = 5      ; // Configure a system DSN
  #ODBC_REMOVE_SYS_DSN = 6      ; // remove a system DSN
  #ODBC_REMOVE_DEFAULT_DSN = 7  ; // remove the default DSN
;EndEnumeration

; ***************************************************************************************

Procedure.s AddDSN(databasename.s, user.s, pass.s, driver.s, server.s) ; Result DSN
  Protected name.s, strDriver.s, strAttributes.s
  Protected L.l, result.l
  Protected *buffer
 
  ; Serer Default
  If server = ""
    server = "localhost"
  EndIf
  
  ; Databasename erzeugen (DSN)
  name.s = GetFilePart(databasename)
  name = Left(name.s, Len(name.s) - 4)
  name = "Pure" + UCase(name)
  ; Bei fehlenden driver automatisch wählen
  If driver = ""
    driver = GetExtensionPart(databasename)
  EndIf
  ; Datenbanktreiber auswählen
  Select UCase(driver)
    Case "MYSQL"
      name = "Pure" + UCase(databasename)
      strDriver.s = "MySQL ODBC 3.51 Driver"
      ; Attributes zustellen
      strAttributes.s = "Server=" + server
      strAttributes.s + ";Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DATABASE=" + databasename
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Case "MDB"
      strDriver.s = "Microsoft Access Driver (*.mdb)"
      ; Attributes zustellen
      strAttributes.s = "Server=APServer;Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DBQ=" + databasename
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Case "XLS"
      strDriver.s = "Microsoft Excel Driver (*.xls)"
      ; Attributes zustellen
      strAttributes.s = "Server=APServer;Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DBQ=" + databasename
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Case "DBF"
      strDriver.s = "Microsoft dBase Driver (*.dbf)"
      ; Attributes zustellen
      strAttributes.s = "Server=APServer;Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DBQ=" + GetPathPart(databasename)
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Case "TXT"
      strDriver.s = "Microsoft Text Driver (*.txt; *.csv)"
      ; Attributes zustellen
      strAttributes.s = "Server=APServer;Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DBQ=" + GetPathPart(databasename)
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Case "CSV"
      strDriver.s = "Microsoft Text Driver (*.txt; *.csv)"
      ; Attributes zustellen
      strAttributes.s = "Server=APServer;Description=" + name
      strAttributes.s + ";DSN=" + name
      strAttributes.s + ";DBQ=" + GetPathPart(databasename)
      strAttributes.s + ";UID=" + user
      strAttributes.s + ";PWD=" + pass + ";"
    Default
      strDriver.s = driver
  EndSelect
 
  *buffer = @strAttributes
  For L = 0 To Len(strAttributes) - 1
    If PeekB(*buffer) = Asc(";")
      PokeB(*buffer, 0)
    EndIf
    *buffer + 1
  Next L                                                         ; Check the next byte

  result = SQLConfigDataSource_(0, #ODBC_ADD_DSN, strDriver, @strAttributes)   ; Call the function you need from the ODBC library with the right details
   
  If result
    ProcedureReturn name
  Else
    ProcedureReturn ""
  EndIf

EndProcedure
 
; ***************************************************************************************

Procedure.l RemoveDSN(databasename.s, user.s, pass.s, driver.s)
  Protected name.s, strDriver.s, strAttributes.s
  Protected L.l, result.l
  Protected *buffer
 
  ; Databasename erzeugen
  name = GetFilePart(databasename)
  name = Left(name, Len(name) - 4)
  name = "Pure" + UCase(name)
  ; Bei fehlenden driver automatisch wählen
  If driver = ""
    driver = GetExtensionPart(databasename)
  EndIf
  ; Datenbanktreiber auswählen
  Select UCase(driver)
    Case "MYSQL"
      name = "Pure" + UCase(databasename)
      strDriver.s = "MySQL ODBC 3.51 Driver"
    Case "MDB"
      strDriver = "Microsoft Access Driver (*.mdb)"
    Case "XLS"
      strDriver = "Microsoft Excel Driver (*.xls)"
    Case "DBF"
      strDriver = "Microsoft dBase Driver (*.dbf)"
    Case "TXT"
      strDriver = "Microsoft Text Driver (*.txt; *.csv)"
    Case "CSV"
      strDriver = "Microsoft Text Driver (*.txt; *.csv)"
    Default
      strDriver = driver
  EndSelect
  ; Attributes zustellen
  strAttributes = "DSN=" + name + ";"
 
  *buffer = @strAttributes
  For L = 0 To Len(strAttributes) - 1
    If PeekB(*buffer) = Asc(";")
      PokeB(*buffer, 0)
    EndIf
    *buffer + 1
  Next L                                                         ; Check the next byte

  result = SQLConfigDataSource_(0, #ODBC_REMOVE_DSN, strDriver, @strAttributes)   ; Call the function you need from the ODBC library with the right details
 
  ProcedureReturn result

EndProcedure
 
; ***************************************************************************************

Procedure.s GetTables(Datenbank)

  Protected hwnd.l, r1.l, len.l
  Protected *buffer
  Protected result.s
  
  hwnd = UseDatabase(Datenbank)
  result.s = ""
  If hwnd
    r1 = SQLTables_(hwnd,0,0,0,0,0,0,0,0) & $FFFF
    If r1 = 0 Or r1 = 1
      *buffer = AllocateMemory(0,256)
      SQLBindCol_(hwnd,3,1,*buffer,256,@len)
      While SQLFetch_(hwnd) & $FFFF = 0
        result + PeekS(*buffer, len) + ";"
      Wend
      FreeMemory(0)
    EndIf
  EndIf
  ProcedureReturn result
  
EndProcedure


; ***************************************************************************************

; test

Procedure.s StringField(Quell.s, Trenn.s, Pos.l)

  Protected pos_start, pos_end, len, i
  
  pos_start = 0
  pos_end = 0
  While i < pos
    i + 1
    pos_start = pos_end + 1
    pos_end = FindString(Quell, Trenn, pos_start)
    If pos_end = 0
      pos_end = Len(quell) + 1
    EndIf
  Wend
  
  len = pos_end - pos_start
  ProcedureReturn Mid(Quell, pos_start, len)
  
  
EndProcedure

InitDatabase()

temp.s = AddDSN("information_schema", "root", "admin", "mysql", "")

Debug temp

If OpenDatabase(0, temp, "root", "admin")
  list.s = GetTables(0)
  Repeat
    i + 1
    temp.s = StringField(list,";", i)
    Debug temp
  Until temp = ""
Else
  Debug "Not Found" 
EndIf

RemoveDSN("information_schema", "root", "admin", "mysql") 
FF :wink:

Verfasst: 12.08.2007 18:08
von Bisonte
Ach wie wird man hier verwöhnt ....

@Kiffi: Fred = Thread ... die Sache mit dem Th im Englischunterricht und das Spucken ;) so spricht sich das doch leichter :mrgreen: