Access DB OleDB
Hallo und guten Abend,
ich habe da volgendes Problem.
Ich muss bestimmte Daten aus einer DB laden, die aber jeweils unterschiedlich heißen kann.
Den Pfad und den Namen der DB such ich mir zuvor in meinem Quellcode aus dem System.
Das ist auch nicht dass Problem.
Das Problem ist, wie ich die DB bzw. Tabelle in der FROM Klausel variabel zuweisen kann,
Mein Statement würde wenn es statisch ist, so aussehen:
SELECT DISTINCT ROW tblMieter.MI_Name1, tblMieterMI_Vorname1, tblMieter.MI_Straße FROM [Meine DatenBank].[tblMieter] WHERE MI_Nummer IN (SELECT MI_Nummer FROM [Daten.mdb].[tblMieter] WHERE MI_MA_zlr = {0} AND MI_OB_zlr = {1} )
"FROM [Meine DatenBank]" möchte ich aber Variabel zuweisen.
Geht dass??
Schau dir mal den OPENROWSET SqlBefehl an, könnte das machen was du brauchst.
huhu,
"FROM [Meine DatenBank]" möchte ich aber Variabel zuweisen.
Geht dass??
das klingt ja erstmal gut, denn variable Daten als Parameter zu verwenden ist immer gut (auch wenn dein {0} her nach einem string.Format() aussieht!!) - aber leider wird da immer auch der Unterschied zwischen Befehls- und Datenkanal festgelegt. Das SQL ist ein Befehl und die Parameter sind Daten. Deswegen ist es nicht möglich z.B. Tabellen im "Befehl" durch "Daten" (variabel) zu ersetzen. (also ein ->Select * from ?0<- geht nicht)
Hier darf man imho wirklich auf ein string.Format() zurückgreifen um die richtige Tabelle anzugeben.
Inwiefern MaXeMs Openrowset hilft weis ich nicht. Mein Post war eher allgemein gedacht.
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Ich könnte mir aber auch (ist mir heute Morgen so eingefallen ) das Statement
je nach DB_Name in einer Case Anweisung zusammenbauen.
Der DB_Name folgt da einem Muster.
z.B.
DAT06708.mdb, DAT06707.mdb oder DAT00405.mdb
Erklährung:
DAT = Datei
ersten drei Zahlen nach DAT sind Mandantenzahl
Letzten zwei Zahlen sind Jahreszahlen.
Bin ich damit auf dem richtigen Weg??
Solange Du sicherstellst, dass die "Namen" nicht von aussen, durch eine Textbox oder so kommen, wäre das in Ordnung. Damit würde in meinem Augen ja nur der Befehl erzeugt werden. Aber niemals dürfen Daten - egal woher, ob Textbox oder meinetwegen Webservice-Eingabe - in den Befehl wandern.
siehe auch [Artikelserie] SQL-Befehle: auch bei Formatproblemen sicher durch Parameters
😃
Xynratron
Herr, schmeiss Hirn vom Himmel - Autsch!
Die Erfahrung zeigt immer wieder, dass viele Probleme sich in Luft auslösen, wenn man sich den nötigen Abstand bzw. Schlaf gönnt.
Nein, Daten würden da niemals einfließen.
Es handelt sich wirklich nur um den reinen DB Namen aus dem System.
Nix mit Textbox oder Webservice.
Ich denke das Problem kenne ich.
Ist das Tool vielleicht etwas für Dich?
Die Filterbedingungen sind flexibel.