lollipop
Goto Top

Zugriff auf SQL-Server: PassThrough aus MSAccess gegenüber ADO.Net aus VB Studio

Grüezi mitenand

Grundsatzfrage:

Vor Jahren habe ich mit einem Access FrontEnd (Version 2.0) auf eine SQL-Datenbank per PassThrough zugegegriffen. Die etwas kompliziertere Programmierung gegenüber eingebundenen Tabellen war aus Performancegründen angebracht.

Nun möchte ich ein neues Projekt starten und finde nirgends einen Hinweis darauf, ob die Zugriffstechnik, welche mir VisualStudio mit ADO.NET bietet, mit den Pass-Through Abfragen von Access vergleichbar ist.

Kurz gefragt: Wenn ich mit ADO.NET ein Datagrid erstellen, die Datensource auf eine Tabelle oder auf eine View lege: Werden dann fortlaufend Aktualisierungsanfragen vom Client an den Server gesendet?
Und ändere ich die Abfrage per Code auf einzelne Datensätze, wird die Abfrage auf dem Server ausgeführt oder muss ich dafür serverseitige Prozeduren anlegen?
Oder kann ich dies wie mit dem DAO-Zugriff je nach Abfrage parametrieren?

Oder spielt dies bei meiner geplanten Applikation von ca. 15 Benutzern für ein rudimentäres ERP mit einem Artikelstamm von 50'000 Artikeln und einer Auftragsverwaltung von ca. 2 Mio Datensätzen gar keine Rolle?

Finde irgendwie den Einstieg nicht.
Ob ich jetzt mit VisualStudio oder mit Access (Office 365) ein Frontend erstelle hängt von dieser Antwort ab.

Gruss
Roland

Content-ID: 345588

Url: https://administrator.de/contentid/345588

Ausgedruckt am: 08.11.2024 um 07:11 Uhr

SeaStorm
SeaStorm 07.08.2017 um 11:40:27 Uhr
Goto Top
Hi

um es vorneweg gleich zu sagen: Nimm NICHT Access face-smile

Ansonsten ist deine Frage ein bisschen ... wirr ...
Was das Programm macht, liegt am Ende natürlich in deiner Hand. Du bist ja der Programmierer.
Grundsätzlich lassen sich mit den typisierten Datasets im VS sehr schnell und Einfach Datenbanken anzapfen und im Programm darstellen & manipulieren.
Wie die sich verhalten, hängt von der Konfiguration und Programmierung ab.

Das Dataset hat eine update und Refresh methode, die entweder die aktuellsten Daten von der DB holt oder die Änderungen im Grid in die DB schubbst.

Wie man damit umgeht, musst du dir halt mal ansehen. Gibt tausende Tutorials dazu.
Pjordorf
Pjordorf 07.08.2017 um 11:54:02 Uhr
Goto Top
Hallo,

Zitat von @Lollipop:
Vor Jahren habe ich mit einem Access FrontEnd (Version 2.0)
Du meinst sicherlich vor Jahrzehnten face-smile

auf eine SQL-Datenbank per PassThrough zugegegriffen
Hier für Access 2007 https://support.office.com/en-us/article/Process-SQL-on-a-database-serve ...
https://support.microsoft.com/de-de/help/303968/how-to-create-an-sql-pas ...

Access 2013 https://www.experts-exchange.com/questions/28691796/How-to-Run-a-Pass-th ...

Allgemeines: https://msdn.microsoft.com/en-us/library/office/jj618413.aspx
https://docs.microsoft.com/en-us/sql/odbc/microsoft/microsoft-access-dat ...
https://support.office.com/en-us/article/Link-to-SQL-Server-data-0474c16 ...

Access 2016 mal testen und die Zugriffe auf dein uns ungenannten SQL Server testen. Hat sich seit Access 2.0 fast alless verändert, der Name allerdings nicht face-smile
http://www.giga.de/downloads/microsoft-office-2016/tipps/office-2016-gr ...

Gruß,
Peter
Lollipop
Lollipop 07.08.2017 um 11:57:43 Uhr
Goto Top
Das Datahandling aus VB.NET auf eine MdB. habe ich schon oft gemacht. Für lokale Anwendungen. Ist ja nicht soooo schwierig.

Zur Präzisierung meiner Frage:

Ich erkenne nicht ob VB.NET mit ADO.NET einen optimierten Datenaustausch macht oder die Datenauswertung lokal als Client berechnet.

Oder einfach gesagt:
Mit Access und Pass-Through-Abfragen:
Stelle ich einen Abfrage über Kunden mit Namen "Bünzli", wird die Abfrage auf dem SQL-Server ausgeführt und nur die "Bünzli"'s an den Client geliefert.

Wird dies in den Datasets mit ADO.NET automatisch so ausgeführt (nur die Bünzlis übertragen) oder muss ich das irgendwie speziell parametrieren (Wie ich es in Access früher auch machen musste).


Ich kann mir vorstellen, dass ich mir zu viele Gedanken darüber mache und alles performanceoptimiert abgehandelt wird. Aber ich habe eben nirgends gelesen, dass es so ist. Und mit den aktuellen, wenigen Beispieldaten kann ich das nicht relevant vergleichen.


Gruss
Roland
Lollipop
Lollipop 07.08.2017 um 12:08:10 Uhr
Goto Top
@Pjordorf

Jahrzente.... in meinem Alter möchte man dies halt nicht soooo detailgetreu erwähnen .....


Danke für die Hinweise.

Das mit dem Zugriff auf die SQL-2012 ExpressEdition mit den Pass-Through-Abfragen funktioniert problemlos. Ich war echt überrascht, dass dies mit 2016 noch genauso ausgeführt wird wie in der Access 2.0 Edition.

Aber ich meine etwas anders, wie du im Kommentar, welcher sich zeitlich überschnitten hat, sehen kannst.

Gruss
Roland
SeaStorm
SeaStorm 07.08.2017 aktualisiert um 12:26:12 Uhr
Goto Top
oh ok jetzt kommt Licht ins Dunkle face-smile

Also grundsätzlich macht das Ding eine Query, die es an den SQL gibt. Der macht dann, was du ihm sagst. Frägst du nach "Bünzli" und es gibt nur einen davon, dann bekommst du auch nur einen.

Das hängt natürlich davon ab wie du die Abfragen gestaltet hast. Liegt nach wie vor in deiner Hand face-smile

Du kannst natürlich auch ein Dataset/Grid erst mal mit allem was der SQL so hat befüllen und dann im nachhinein Filtern. Je nach dem ist das die schnellere Variante, aber halt auch recht Ressourcenintensiv
Lollipop
Lollipop 09.08.2017 um 17:21:16 Uhr
Goto Top
Danke für eure Hilfe.
Doch meine Frage ist noch nicht beantwortet:


Access:
Möchte ich mit Access eine SQL PassThrough Abfrage ausführen, muss ich dies speziell parametrieren. Mache ich das nicht mit dieser Technik, erzeuge ich mit eingebundenen Tabellen einen hohen Datenverkehr zwischen Access und SQL-Server, weil in Access aufgelistete Datensätze laufend aktualisiert werden (auch wenn sie nicht verändert wurden).
Führe ich eine "normale" Abfrage auf den Namen "Bünzli" aus, werden alle Records an Access geliefert (Bünzli und alle anderen auch) und der Client (also Access) sucht sich die Datensätze mit "Bünzli" aus und zeigt diese an.
Möchte ich, dass der SQL-Server die Datensätze ausfiltert und nur die drei vorhandenen "Bünzlis" an Access liefert, muss ich die Abfrage als Pass-Through ausführen.

VB.NET:
Wird mit ADO.NET grundsätzlich die Technik "Pass-Through" angewendet (auch wenn sich diese nicht so nennt)? Muss ich dem Server explizit mitteilen, dass die Abfrage im Server ausgewertet werden soll (wie bei Access) oder geschieht dies immer so? Ist ein Dataset eine konstante Verbindung, welche fortlaufend Datenverkehr erzeugt?
Die Gestaltung der Abfrage spielt natürlich eine Rolle (Where-Klausel, Indexierung).

Wenn ich die Daten in einem DataGrid anzeige, werden die angezeigten Daten ebenfalls in schnellem Intervall vom Server neu geladen (um Änderungen der Records vom Server sofort anzuzeigen) oder wird das nur gemacht, wenn ich einen Datensatz editiere und zurückspeichern möchte?


Habe mich nochmals durch einige Literatur gelesen, aber diese Frage wird nicht beantwortet. Vielleicht, weil es ja klar ist, dass die aktuelle Technik möglichst wenig Datenverkehr erzeugt.


Gruss
Roland
Pjordorf
Lösung Pjordorf 09.08.2017 um 22:01:03 Uhr
Goto Top
Hallo,

Zitat von @Lollipop:
erzeuge ich mit eingebundenen Tabellen einen hohen Datenverkehr zwischen Access und SQL-Server
Pobiere die verschiedene Techniken aus die dir gefallen oder nicht. Nimm dazu auch einen Wirschark und lass den nur deine Pakete mittschnüffeln wo auch deine SQl drin ist. Wireshark sagt dir auch wie wenige oder viele Bits und Bytes über deine Leitung gehen. Dann siehst du evtl. was wo wie bewirkt und ob dies deine gewünschten resultate gleichkommt,

Access über Internet = grottenschlecht
SQL über Internet kann auch grottenschlecht sein, hängt vom Programmkonzept unddessen umsetzung (Programmierung) ab.

Gruß,
Peter