Laden...

SQL-Statement mit Variablem FROM zweig!

Erstellt von Baesler vor 15 Jahren Letzter Beitrag vor 15 Jahren 866 Views
Baesler Themenstarter:in
113 Beiträge seit 2008
vor 15 Jahren
SQL-Statement mit Variablem FROM zweig!

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??

M
198 Beiträge seit 2007
vor 15 Jahren

Schau dir mal den OPENROWSET SqlBefehl an, könnte das machen was du brauchst.

X
1.177 Beiträge seit 2006
vor 15 Jahren

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.

Baesler Themenstarter:in
113 Beiträge seit 2008
vor 15 Jahren

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??

X
1.177 Beiträge seit 2006
vor 15 Jahren

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.

Baesler Themenstarter:in
113 Beiträge seit 2008
vor 15 Jahren

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.

M
110 Beiträge seit 2007
vor 15 Jahren

Ich denke das Problem kenne ich.

Ist das Tool vielleicht etwas für Dich?

Die Filterbedingungen sind flexibel.

Gruss

Mirko

Mappen statt hacken mit Invist , dem .NET O/R Mapper - Code Generator