PDA

Vollständige Version anzeigen : ADO: Connectionstrings erstellen (JET & mySQL)


Julegner
27.09.2006, 16:19
Public Function BuildJetConnection(Pfad As String) As String
BuildJetConnection = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Pfad & ";Persist Security Info=False"
End Function

Public Function BuildMySQLConnection() As String
Dim rs As New ADODB.Recordset

Dim egal1 As Boolean
Dim egal2 As String
Dim SQLNr As Integer

getEinstellungen egal1, egal2, SQLNr

openRS rs, "TBL_Z_Einstellungen_mySQL"
rs.Find "ID=" & SQLNr
If rs.EOF Then
MsgBox "Fehler: In TBL_Einstellungen angegebene SQL-Nummer exisiert in TBL_Einstellungen_mySQL nicht."
End If
BuildMySQLConnection = "Data Source=" & rs.Fields("Data_Source") & ";" & _
"SERVER=" & rs.Fields("Server") & ";" & _
"PORT=" & rs.Fields("Port") & ";" & _
"OPTION=" & rs.Fields("Option") & ";" & _
"DATABASE=" & rs.Fields("Database") & ";" & _
"USER=" & rs.Fields("User") & ";" & _
"PASSWORD=" & rs.Fields("Password")


'BuildMySQLConnection = "Data Source=myodbc;" & _
' "SERVER=localhost;" & _
' "PORT=3306;" & _
' "OPTION=0;" & _
' "DATABASE=test;" & _
' "USER=test;" & _
' "PASSWORD=test"
'
' option sollte gleich 3 sein, damit Fehler in Access ausgeglichen werden (Optionen 1 und 2 aktiv)
End Function


Bei BuildJetConnection wird der Pfad zur entfernten Access-Datenbank angegeben (absoluter Pfad), für die mySQL-Connection ist eine Tabelle notwendig, in der die Werte hinterlegt werden.

FW
27.09.2006, 20:54
... naja, zu den Connection-Parametern könnte man/frau ja einiges mehr erklären, aber was mich zunächst interessiert ist, warum "für die mySQL-Connection eine Tabelle notwendig ist"? Weiter würde ich gerne wissen, was "getEinstellungen" und was "TBL_Z_Einstellungen_mySQL", "TBL_Einstellungen" und "TBL_Einstellungen_mySQL" ist? So ist der Code jedenjalls nicht benutzbar, da gibt es wohl auch noch einigen Erklärungsbedarf...

Julegner
28.09.2006, 08:12
getEinstellungen ist eine Funktion, um bestimmte Programmweite Einstellungen aus einer Tabelle zu holen

Public Sub getEinstellungen(ByRef NurTabellenErstellen As Boolean, ByRef LogPfad As String, Optional ByRef mySQLDB, Optional ByRef ProjNamenErstellen)

Dim rs As New ADODB.Recordset

openRS rs, "TBL_Z_Einstellungen"

With rs
.Filter = "Aktiv = true"
If Not .BOF And Not .EOF Then
NurTabellenErstellen = .Fields("NurTabellenErstellen") ' true: nur Struktur übernehmen, keine Daten
LogPfad = .Fields("LogPfad")
If Not IsMissing(mySQLDB) Then
mySQLDB = .Fields("mySQLDB")
End If
If Not IsMissing(ProjNamenErstellen) Then
ProjNamenErstellen = .Fields("ProjNamenErstellen")
End If
Else
MsgBox "Einstellungen nicht vorhanden oder nicht aktiv"
End If
.Close: Set rs = Nothing
End With

End Sub

Für die Connection wird aber nur die SQLNr benötigt,und die auch nur dafür, um aus der Tabelle "TBL_Z_Einstellungen_mySQL" die benötigten Parameter holen zu können.
"TBL_Einstellungen_mySQL" gibt es nicht, das ist ein Schreibfehler und die Tabelle "TBL_Einstellungen_Z_mySQL" ist gemeint, eben die Tabelle, in der die Parameter stehen.

Zu den Parametern:

Data Source ODBC-Verbindung
SERVER Servernamen angeben (wenn auf lokalem PC,localhost)
PORT Port des mySQL-Servers (Standard 3306)
OPTION Verschiedene Optionen, siehe http://www.codeproject.com/database/connectionstrings.asp#MySQL
DATABASE Datenbank auf dem mySQL-Server
USER mySQL-Benutzername
PASSWORD Passwort des Benutzers


Die Tabelle ist für die Connection natürlich nicht notwendig, ich habe aber eine Tabelle benutzt, um die Parameter zu speichern, damit die Anwender sie nicht eingeben müssen. Natürlich kann man die Parameter auch im Code oder in einer Datei speichern oder auch erst zur Laufzeit eingeben.

Gustav Kurz
02.12.2006, 20:15
...bin per Zufall auf diesen Beitrag gestoßen - kann es ev. sein das hier der Code sehr allgemein gehalten und mit allzuvielen unnötigen, auskommentierten Testzeilen versehen ist? Auch der ein oder andere strukturelle Fehler sollten beseitigt werden (Recordset wieder schließen; Nach der If Abfrage auf ein leeres Recordset geht es im Code trotzdem weiter - was dann wohl auf einenLaufzeitfehler hinauslaufen sollte...).

Jedenfalls ist er so wohl kaum nutzbar und sollte dringend ein wenig überarbeitet werden - ich jedenfalls weiß nicht wozu er so wie er ist, gut sein soll.

Grüße
Gustav