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

)
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

Danke bobobo
Verfasst: 11.08.2007 22:06
von mk-soft
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...
Grüße ... Kiffi
Verfasst: 12.08.2007 13:54
von mk-soft
Wer lesen kann ist im Vorteil, Sorry
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

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
