Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

kann SQL das besser?

Begonnen von Doming, Juli 28, 2026, 13:42:27

⏪ vorheriges - nächstes ⏩

Doming

Hallo,

ich habe im Backend (im Netzwerk) eine Tabelle fürs Material (etwa 17000 Artikel) und eine Tabelle für Zeichnungen (etwa 22000).

Die Zeichnungsdateien liegen in verschiedenen Verzeichnissen (>2000) und  beinhalten die technische Daten der Artikel. Im Dateinamen steht Artikelnummer, Zeichnungsindex und der Artikelname.

Zu Beginn meiner Arbeit mit der DB habe ich die Zeichnungen aus den Verzeichnissen ausgelesen (Pfad & Name), den Dateinamen in die Einzelteile zerlegt und in die Zeichnungstabelle eingetragen.
Danach jeden Datensatz mit der Materialtabelle verglichen, um den PK des Materials als FK in die Zeichnungstabelle einzupflegen. Das hat eine ganze Zeit gedauert.

Mittlerweile lese ich die Dateinamen wie gehabt ein, allerdings in eine lokale Tabelle, analysiere den Dateinamen und schreibe das Ergebnis dann in ein Array. Danach lese ich die Materialtabelle ebenfalls in ein Array und vergleiche die beiden dann, mit enormem Zeitgewinn.

Nun gedenke ich ja, das Backend mit einem SQL-Server zu realisieren (ob das was wird, entscheiden hier andere, aber ich spiel das gedanklich schonmal durch).

Wenn ich das bisher richtig mitbekommen habe, kann der Server viele Sachen besser alleine, ohne dass ich per VBA jeden Datensatz in die Hände nehmen muss. Die Verzeichnisabfrage wird zeitlich ja wohl so bleiben, aber wie kann man den Abgleich optimieren?

Gruß
 Doming

Bitsqueezer

Hallo,

ich würde empfehlen, in SQL Server FILESTREAMs zu aktivieren. Damit ist SQL Server in der Lage, Dateien aus Windows Dateisystem selbst zu verwalten. Damit kannst Du auch das, was in DB eigentlich verpönt ist: Die Datei selbst in einer Tabelle verfügbar machen (ohne daß sie physisch in der Datenbank liegt, aber SQL Server weiß, wo sie ist und lädt sie zusammen mit der Tabelle, wenn man sie abfragt).

Generell benötigt der Dienst, unter dem SQL Server läuft, nur Zugriff auf den betreffenden Ordner. Auf dem gleichen Windows Server kann auch der Standard-NT-Account darauf zugreifen, wenn der Server mit den Dateien woanders liegt, muß der Dienst-Account ein entsprechend berechtigter Account sein, z.B. ein Domänenuser, den man normalerweise explizit für den SQL Server Dienst anlegt. Diesem kann man dann die entsprechenden Dateirechte geben.

SQL Server kann nur über FILESTREAM auf externe Dateien zugreifen. Wenn es um unabhängige Dateien geht, dann mußt Du CLR (.NET) Zugriff aktivieren, dann kann er auch Kommandos des Betriebssystems anwenden (allerdings ist das immer ein gewisses Sicherheitsrisiko wegen möglichen Angriffen).

Je nachdem, wie die Dateien zustandekommen, ist es einfacher, die Dateinamen mit VBA in eine Zieltabelle (aber auf dem SQL Server) zu schreiben, Tabellenvergleiche macht man dann per SQL und nicht mit Arrays (nebenbei, auch in Access).

Also mit FILESTREAM wäre eine Alternative, die Zeichnungen per SQL Server direkt zu verwalten, indem die Dateien nicht mehr direkt in Windows gespeichert werden, sondern über ein entsprechendes Frontend, bei dem die User Dinge wie Material oder Anderes, was jetzt im Dateinamen kodiert ist, als Felder erfassen. Damit erübrigt sich das dann und Du hast ein Datei-Repository, daß die User nie anfassen müssen, das Frontend kann die Dateien in die SQL Server Tabelle speichern und davon laden - also ein Dokumentmanagamentsystem, daß es für alle leichter macht, wenn man es richtig aufzieht.

Gruß

Christian