collapse

* Benutzer Info

 
 
Willkommen Gast. Bitte einloggen oder registrieren. Haben Sie Ihre Aktivierungs E-Mail übersehen?

* Wer ist Online

  • Punkt Gäste: 54
  • Punkt Versteckte: 0
  • Punkt Mitglieder: 0

Es sind keine Mitglieder online.

* Forenstatistik

  • stats Mitglieder insgesamt: 13953
  • stats Beiträge insgesamt: 66359
  • stats Themen insgesamt: 8942
  • stats Kategorien insgesamt: 5
  • stats Boards insgesamt: 17
  • stats Am meisten online: 415

Autor Thema: Access Frontend und MSSQL Backend  (Gelesen 762 mal)

Offline jecklan1

  • Newbie
  • Beiträge: 9
Access Frontend und MSSQL Backend
« am: März 04, 2018, 19:13:19 »
Hallo liebe Gemeinde

Folgende Situation :
MS Access DB als Frontend und eine MSSQL Datenbank als Backend mit Linked Tables.

Das funktioniert alles bestens

Das die bestehenden Tabellen Links automatisch beim Start aktualisiert werden habe ich mit einem kleinen VB Script hinbekommen.

Frage 1
---------
Ist es auch möglich Tabellen die auf dem SQL Server neu erstellt wurden automatisch zu linken? bzw. Tabellen die nicht mehr existieren oder gelöscht wurden automatisch zu entfernen?

Frage 2 :
----------
Auch würde ich die Einstellungen wie SQL Server Name, User, Pw etc. in einer Config-Table hinterlegen... sollte der SQL Server mal ändern oder die Backend Instanz. Derzeit verbinde ich mich mit einer ODBC/DSN. komischerweise musste ich diese nur beim ersten rechner eingeben (File/Datei DSN) bei den weiteren Rechnern hat er den Pfad zum SQL Server selber gefunden.... woher auch immer.... ich nehme an das wird irgendwo in der FrontEnd DB hinterlegt.

Hat einer von euch GURU's eine Idee oder evt. ein kleines Beispiel? Oder ist das so wie ich mir das vorstelle gar nicht möglich?

Besten Dank bereits im Voraus
einen schönen Sonntag Abend
Grüsse aus der Schweiz
Andy 
 

Offline PhilS

  • Administrator
  • Access-Profi
  • *****
  • Beiträge: 332
    • Tipps zu Access, VBA, SQL und Co.
Re: Access Frontend und MSSQL Backend
« Antwort #1 am: März 07, 2018, 10:27:11 »
Ist es auch möglich Tabellen die auf dem SQL Server neu erstellt wurden automatisch zu linken? bzw. Tabellen die nicht mehr existieren oder gelöscht wurden automatisch zu entfernen?
Prinzipiell ist das schon möglich. Automatisch geht das natürlich nur über eigene Programmierung. Wenn du schon VBA-Code hast, um die Tabellen beim Start zu aktualisieren (was heißt das für dich genau?), dann solltest du die Kernfunktionalität bereits haben.

In der System-View INFORMATION_SCHEMA.TABLES sind alle Tabellen der jeweiligen Datenbank auf dem SQL-Server aufgeführt. Du könntest also beim Start deiner Anwendungen eine Pass-Through-Abfrage auf diese View ausführen und alle SQL-Tabellen verknüpfen, die noch nicht in deine Access-Anwendung eingebunden sind. Analog löscht du jede lokal vorhandene SQL-Tabelle, die nicht mehr in  INFORMATION_SCHEMA.TABLES vorhanden ist.

Es stellt sich hier natürlich die Frage, ob dieses Vorgehen grundsätzlich sinnvoll ist. Tabellen stehen normalerweise ja nicht für sich allein, sondern es gibt Abfragen, Formulare und Berichte, die darauf aufbauen. Diese Abhängigkeiten entstehen durch deine Arbeit als Entwickler, so dass auch das Hinzufügen und Entfernen von verknüpften Tabellen eher als eine Teil der Entwicklungsarbeit zu sehen ist und somit der von dir gewünschte Automatismus bestenfalls als ein Entwickler-Tools zu sehen ist.


Auch würde ich die Einstellungen wie SQL Server Name, User, Pw etc. in einer Config-Table hinterlegen... sollte der SQL Server mal ändern oder die Backend Instanz. Derzeit verbinde ich mich mit einer ODBC/DSN. komischerweise musste ich diese nur beim ersten rechner eingeben (File/Datei DSN) bei den weiteren Rechnern hat er den Pfad zum SQL Server selber gefunden.... woher auch immer.... ich nehme an das wird irgendwo in der FrontEnd DB hinterlegt.
Wenn du eine DSN für die ODBC-Verknüpfungen verwendest, werden die Detailinformationen nicht in der Access-Datei gespeichert, sondern eben in der DSN. - Das ist ihr Zweck.
Wenn eine gleichnamige DSN auf jedem Rechner vorhanden ist, brauchst du aber nur einmalig die Tabellen einbinden und auf allen anderen Rechnern wird dann diese DSN für den Zugriff verwendet.

Du kannst aber die Tabellen auch ohne DSN-Verknüpfen, wenn du die wesentlichen Informationen, die sonst in der DSN stehen, direkt in dem Connection-String angibst. Dies erfordert dann die von dir bereits angedachte lokale Config-Tabelle.

 
Neues Access 2019 Feature angekündigt: Modern Charts
 

Offline Frithjiof

  • Access-User
  • *
  • Beiträge: 74
Re: Access Frontend und MSSQL Backend
« Antwort #2 am: März 08, 2018, 11:35:04 »
Hallo Andy,
ich habe vor Jahren für das Problem eine handliche Lösung erarbeitet.

Damit können sogar Verknüpfungen zu verschiedenen Datenbanken erstellt werden.

Der einzige "Nachteil": die zu verknüpfenden Tabellen müssen in die Tabelle <connected> eingetragen werden. Ich habe testweise drei Access-Datenbanken verknüpft.

Formular <frmTabelleneinbindung> aufrufen.
In der obersten Liste sind die vorhandenen Verknüpfungen .
Ein Doppelklick auf einen Eintrag öffnet den Browser und eine andere Datenbank kann ausgewählt werden.
Dann auf <Datenbank verbinden> klicken.
Die Tabellen werden, sofern in dem Feld unter <Datenbank verbinden> nicht „zeige“ eingegeben wurde, als Systemtabellen eingebunden.
Das Optionsfeld in der Mitte erlaubt die Tabellen via Odbc oder Access zu verknüpfen.

In der Regel lassen sich die Verknüpfungen auch während der Laufzeit der Anwendung verändern. Das ist praktisch wenn man mal eben was testen muss aber nicht mit den echten Daten arbeiten will.

Frithjof
 

Offline datekk

  • Access-Meister
  • ***
  • Beiträge: 701
Re: Access Frontend und MSSQL Backend
« Antwort #3 am: März 13, 2018, 15:39:03 »
Hi,

ich nutze ein SQL Server Backend und habe mir folgende Sub zusammengebaut, welche nicht nur die SQL Tabellen sondern auch die VIEWS (Abfragen) einbindet:

Public Sub TabellenVerknuepfen()
   
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim qdf As DAO.QueryDef
    Dim rst As DAO.Recordset
    Dim strSQL As String
    Dim i As Integer
    Dim z As Integer
    z = 0
   
    strSQL = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE'"


    Set db = CurrentDb
    For i = db.TableDefs.Count - 1 To 0 Step -1
        Set tdf = db.TableDefs(i)
            If Left(tdf.Connect, 4) = "ODBC" Then
                db.TableDefs.Delete tdf.Name
            End If
    Next i
   
    On Error Resume Next
    db.QueryDefs.Delete "qryAlleTabellen"
        db.QueryDefs.Delete "qryAlleAbfragen"

    Set qdf = db.CreateQueryDef("qryAlleTabellen")
    With qdf
    .Connect = p_ODBCVerbZV
    .sql = strSQL
    .ReturnsRecords = True
    Set rst = .OpenRecordset
    End With
   
    Do While Not rst.EOF
    Set tdf = db.CreateTableDef(rst!TABLE_NAME, 0, rst!TABLE_NAME)
    tdf.Connect = p_ODBCVerbZV
    db.TableDefs.Append tdf
    rst.MoveNext
    Loop
   
    Set qdf = db.CreateQueryDef("qryAlleAbfragen")
    strSQL = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS"
    With qdf
    .Connect = p_ODBCVerbZV
    .sql = strSQL
    .ReturnsRecords = True
    Set rst = .OpenRecordset
    End With
   
    Do While Not rst.EOF
    Set tdf = db.CreateTableDef(rst!TABLE_NAME, 0, rst!TABLE_NAME)
    tdf.Connect = p_ODBCVerbZV
    db.TableDefs.Append tdf
    rst.MoveNext
    Loop

       
    Application.RefreshDatabaseWindow
   
   

End Sub

Die Verbindungszeichenfolge wird über die öffentliche Variable p_ODBCVerbZV zugewiesen. Sie sieht wie folgt aus:

p_ODBCVerbZV = "ODBC;DRIVER={SQL Server Native Client 11.0};SERVER=SERVERIP;UID=BENUTZERNAME;PWD=PASSWORT;APP=SSMA;DATABASE=DATENBANKNAME;"

Beim Start meiner Datenbank lösche ich erstmal ALLE verknüpften Tabellen und Abfragen (Views):
Public Sub TabellenLöschen()

    On Error Resume Next
   
    Dim db As DAO.Database
    Dim tdf As DAO.TableDef
    Dim i As Integer
       
    Set db = CurrentDb
   
    For i = 0 To db.TableDefs.Count
       
        For Each tdf In db.TableDefs
           
            If Left(tdf.Connect, 4) = "ODBC" Then
             
            db.TableDefs.Delete tdf.Name
            db.TableDefs.Refresh
       
            End If
        Next tdf
   
    Next
End Sub

Danach binde ich alle Tabellen mit dem ersten Skript ein. Dabei werden alle Tabellen und Sichten des SQL Servers geladen und damit ja auch in Access aktualisiert - so wie Du es gewünscht hast.

LG
datekk.
 
Folgende Mitglieder bedankten sich: PhilS, jecklan1

Offline jecklan1

  • Newbie
  • Beiträge: 9
Re: Access Frontend und MSSQL Backend
« Antwort #4 am: März 17, 2018, 16:51:09 »
Danke euch allen für die tollen Antworten

Ich habe es mit der Version von datekk gelöst und es funktioniert bestens!