ConnectionStringBuilder

Kapselung der Zugriffsmethoden (DAO, ADODB, ODBC)

ConnectionStringBuilder

Beitragvon Josef Pötzl » Di 14. Jan 2014, 19:45

Hallo!

Als Nebenprodukt der DataConnection-Lib ist eine ConnectionStringBuilder-Lib entstanden.

Grundidee:
An eine ConnectionStringBuilder-Instanz übergibt man die "ConnectionData" und diese erzeugt je nach eingestelltem DBMS die passenden Connectionstring für ODBD und ADODB/OLEDB.

Zum Ausprobieren: DataConnectionExamples


Welche DBMS sollten direkt eingebaut werden?
Anm.: die Lib will ich grundsätzlich so gestalten, dass man eigene ConnectionStringBuilder, die nicht in der ACLib enthalten sind, auch verwenden kann.

Meine Vorschläge:

Allg. ConnectionStringBuilder
  • Allg. ConnectionStringBuilder, den man den ODBC-Driver oder den OleDb-Provider übergibt.
  • OleDb-Treiber, der mit MSDASQL über ODBC läuft

ConnectionStringBuilder für spezielle DBMS
  • MSSQL
  • MySQL
  • PostrgeSQL
  • Oracle
  • DB2
... aber welche Driver/Provider-Versionen stellt man ein?

Oder ist es überhaupt sinnvoller für jedes DBMS eine eigene DLL zu erstellen?
Unschönheit bei dieser Variante: man muss jeweils ein COM-Interface gestalten.

LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016

Re: ConnectionStringBuilder

Beitragvon Sten Schmidt » Mi 15. Jan 2014, 20:29

Hallo,

Josef Pötzl hat geschrieben:Zum Ausprobieren: DataConnectionExamples


ausgehend von diesem Beispiel:

Code: Alles auswählen

Private Sub MssqlConnectionStringBuilderExample()

   Dim csb As MssqlDbConnectionStringBuilder ' oder auch DbConnectionStringBuilder
   Set csb = Libs.DataConnection.CreateObject("MssqlDbConnectionStringBuilder")
       
   Dim connDataFactory As ConnectionDataFactory
   Set connDataFactory = Libs.DataConnection.CreateObject("ConnectionDataFactory")

   Set csb.ConnectionData = connDataFactory.ConnectionData("server", "database", True)

   Debug.Print csb.Odbc.ConnectionString
   Debug.Print csb.OleDb.ConnectionString

End Sub
 


fände ich es praktisch wenn man das kürzer formulieren könnte, z.B. so wie:

Code: Alles auswählen

Private Sub MssqlConnectionStringBuilderExample2()

   Dim csb As MssqlDbConnectionStringBuilder
   Set csb = Libs.DataConnection.CreateObject("MssqlDbConnectionStringBuilder")
       csb.Init "server", "database", True

   Debug.Print csb.Odbc.ConnectionString
   Debug.Print csb.OleDb.ConnectionString
   
End Sub
 


Oder vllt. in der Art:

Code: Alles auswählen

Private Sub MssqlConnectionStringBuilderExample2()

   Dim csb As DbConnectionStringBuilder
   Set csb = Libs.DataConnection.CreateObject("DbConnectionStringBuilder")
       csb.Init "Mssql", "server", "database", True

   Debug.Print csb.Odbc.ConnectionString
   Debug.Print csb.OleDb.ConnectionString
   
End Sub
 
Sten Schmidt
Entwickler
 
Beiträge: 146
Registriert: Do 18. Mär 2010, 22:24
Accessversion: 2016
Access-Erfahrung: Experte

Re: ConnectionStringBuilder

Beitragvon Josef Pötzl » Mi 15. Jan 2014, 22:32

Hallo!

Eine Init-Funktion, die sich auf die Connection-Attribute bezieht, möche ich in DbConnectionStringBuilder nicht einbauen, da sich diese nicht um die öglichen Kombinationen kümmern sollen.
Damit vermeide ich eine Abhängigkeit der ConnectionstringBuilder von den Erstellern der DataConnection.

Aktuell ist so etwas möglich:
Code: Alles auswählen
   Dim csb As DbConnectionStringBuilder
   Dim connData As ConnectionData

   With ACLib.DataConnection
      Set connData = .CreateConnectionData.ConnectionData("server", "database", True)
      Set csb = .CreateConnectionStringBuilder.DbConnectionStringBuilder("{SQL Server}", "SQLOLEDB", connData)
   End With

   Debug.Print "ODBC", csb.Odbc.ConnectionString
   Debug.Print "OleDb", csb.OleDb.ConnectionString


Oder etwas verkürzt:
Code: Alles auswählen
   Dim csb As DbConnectionStringBuilder

   With ACLib.DataConnection
      Set csb = .CreateConnectionStringBuilder.DbConnectionStringBuilder("{SQL Server}", "SQLOLEDB", _
                     .CreateConnectionData.ConnectionData("server", "database", True))
   End With

   Debug.Print "ODBC", csb.Odbc.ConnectionString
   Debug.Print "OleDb", csb.OleDb.ConnectionString


Oder wenn man nur den Odbc-Connectionstring benötigt:
Code: Alles auswählen
   Dim csb As OdbcConnectionStringBuilder
   Dim connData As ConnectionData

   With ACLib.DataConnection
      Set connData = .CreateConnectionData.ConnectionData("server", "database", True)
      Set csb = .CreateConnectionStringBuilder.MssqlOdbcConnectionStringBuilder(connData)
   End With

   Debug.Print "ODBC", csb.ConnectionString

.. wobei ich die ConnectionData-Erstellung in eine extra Prozedur auslagern würde, da ich diese kaum manuell sondern über eine Config-Tabelle o. ä. zusammenstellen werde.
=>
Code: Alles auswählen
Private Sub ConnectionStringBuilderExample_V3()

   Dim csb As DbConnectionStringBuilder

   With ACLib.DataConnection.CreateConnectionStringBuilder
      Set csb = .MssqlDbConnectionStringBuilder(CreateConnectionData())
   End With

   Debug.Print "ODBC", csb.Odbc.ConnectionString
   Debug.Print "OleDb", csb.OleDb.ConnectionString

End Sub

Private Function CreateConnectionData() As ConnectionData
   
   Dim strServer As String
   Dim strInstance As String
   Dim strDatabase As String
   Dim bolTrustedConnection As Boolean
   Dim strUser As String
   Dim strPassword As String
   
   ' z. B. Parameter aus lokaler Tabelle lesen
  strServer = "server"
   'strInstance = "instance"
  strDatabase = "database"
   bolTrustedConnection = False
   strUser = "user"
   strPassword = "password"
   
   With ACLib.DataConnection.CreateConnectionData
   
      If Len(strInstance) > 0 Then
         If bolTrustedConnection Then
            Set CreateConnectionData = .ConnectionData_SeInDaIS(strServer, strInstance, strDatabase)
         Else
            Set CreateConnectionData = .ConnectionData_SeInDaUS(strServer, strDatabase, strUser, strPassword)
         End If
      Else
         Set CreateConnectionData = .ConnectionData(strServer, strDatabase, bolTrustedConnection, strUser, strPassword)
      End If
     
   End With
   
End Function


Odbc-Connectionstring ohne ConnectionData würde so aussehen:
Code: Alles auswählen
   Dim csb As OdbcConnectionStringBuilder

   With ACLib.DataConnection
      Set csb = .CreateConnectionStringBuilder.MssqlOdbcConnectionStringBuilder()
   End With
   
   With csb
      .Server = "server"
      .Database = "database"
      .TrustedConnection = True
   End With

   Debug.Print "ODBC", csb.ConnectionString


LG
Josef
Josef Pötzl
Moderator
 
Beiträge: 805
Registriert: Mo 30. Nov 2009, 10:08
Wohnort: Klagenfurt
Accessversion: 2016


Zurück zu DataConnection