2008-09-22 8 views
3

Ich bin Re-Design eine Anwendung für ein ASP.NET CMS, die ich wirklich nicht mag. Ich habe einige Verbesserungen in der Leistung gemacht, nur um festzustellen, dass dieses CMS nicht nur MS SQL verwendet, sondern einige Benutzer "einfach" die MS Access Datenbank verwenden.Inner Join über mehrere Zugriff db's

Das Problem ist, dass ich einige Tabellen habe, die ich innerlich beitreten, dass mit der MS Access-Version in zwei verschiedenen Dateien sind. Ich darf die Tabellen nicht einfach in die andere MDB-Datei verschieben.

Ich versuche jetzt, einen guten Weg zu "inneren Join" über mehrere Zugriff db-Dateien herauszufinden?

Es wäre wirklich schade, wenn ich alle Daten und das programmatisch abholen würde!

Dank

Antwort

3

Wenn Sie den Zugriff auf die MDB-Blöcke haben, und sind in der Lage, sie zu ändern, könnten Sie die verknüpften Tabellen verwenden. Access bietet die Möglichkeit, mit externen Daten (in anderen MDBs, in Excel-Dateien, sogar in SQL Server oder Oracle) zu verknüpfen, und dann können Sie Ihre Joins mit den Links durchführen.

Ich würde dringend eine solche Option testen. Wenn es möglich ist, Benutzer der Access-Datenbanken auf ein anderes System (sogar SQL Express) zu migrieren, wäre das auch vorzuziehen - zuletzt habe ich überprüft, dass es für ODBC keine 64-Bit-JET-Treiber mehr gibt, also wenn die App jemals gehostet wird In einer 64-Bit-Umgebung werden diese Benutzer abgespritzt.

+0

Sind Sie sicher, dass Beziehungen mit Tabellen aus verschiedenen Datenbanken implementiert werden können? Ich bin nicht sicher, dass ein INNER JOIN-Befehl in einer solchen Situation erfolgreich sein würde (in der Tat bin ich überzeugt, dass Sie einen Fehler erhalten werden!) –

+0

Ja, Access hat willkürliche Beziehungen zwischen verknüpften Tabellen den ganzen Weg zurück zu Windows 3.1 erlaubt Versionen. Es holt jedoch häufig den ganzen Tisch im laufenden Betrieb, was bei großen Tischen ein Problem sein kann. – user11318

1

Innerhalb einer Zugriffs-DB können Sie "verknüpfte Tabellen" erstellen, die auf die andere DB verweisen. Sie sollten (denke ich) in der Lage sein, die Tabellen so abzufragen, als ob sie beide in derselben Datenbank existierten.

Es bedeutet Sie haben eine der DBs zu ändern, um die virtuelle Tabelle zu erstellen, aber zumindest sind Sie nicht die Daten tatsächlich zu bewegen, nur einen Zeiger darauf

0

in Access zu machen, können Sie Remote hinzufügen Tabellen über den "Linked Table Manager". Sie können die Verknüpfungen zu einer Access-Datei oder der anderen hinzufügen oder Sie können eine neue Access-Datei erstellen, die auf die Tabellen in beiden Dateien verweist. Danach sind die Inner-Join-Abfragen nicht anders als in einer einzelnen Datenbank.

11

Sie benötigen keine verknüpften Tabellen. Es gibt zwei Ansätze zur Verwendung von Daten aus verschiedenen MDBs, die ohne eine verknüpfte Tabelle verwendet werden können. Die erste besteht darin, "IN 'c: \ MyDBs \ Access.mdb'" in der FROM-Klausel Ihres SQL zu verwenden. Einer Ihrer gespeicherten Abfragen wäre wie:

SELECT MyTable.* 
FROM MyTable IN 'c:\MyDBs\Access.mdb' 

und die andere gespeicherte Abfrage wäre:

SELECT OtherTable.* 
FROM OtherTable IN 'c:\MyDBs\Other.mdb' 

Sie dann diese Abfragen speichern konnte, und dann die gespeicherten Abfragen verwenden die beiden Tabellen zu verbinden.

Alternativ können Sie das alles in einer einzigen SQL-Anweisung verwalten, indem Sie den Pfad zu der Quelle MDB für jede Tabelle also in der FROM-Klausel Angabe:

SELECT MyTable.ID, OtherTable.OtherField 
FROM [c:\MyDBs\Access.mdb].MyTable 
    INNER JOIN [c:\MyDBs\Other.mdb].OtherTable ON MyTable.ID = OtherTable.ID 

eine Sache im Auge halten, aber:

Der Jet-Abfrage-Optimierer wird nicht unbedingt in der Lage sein, die Indizes aus diesen Tabellen für den Join zu verwenden (ob es sie für Kriterien auf einzelnen Feldern verwenden wird, ist eine andere Frage), also könnte das extrem langsam sein (in meinen Tests ist es das) nicht, aber ich verwende keine großen Datensätze zum Testen). Aber dieses Leistungsproblem gilt auch für verknüpfte Tabellen.

+0

Wow. Wie oft können Sie sagen, dass Sie heute etwas Neues über Access gelernt haben? Ich habe Access seit Jahren nicht mehr benutzt, aber es ist schmerzhaft zu erkennen, wie viel Zeit mir dieses einfache Wissen damals erspart hätte. – MusiGenesis

+0

Es ist eine Schande, dass die Jet-Datenbank-Engine so einen angeschlagenen Ruf hat, da es wirklich eine bemerkenswerte Engine ist. Seine Fähigkeit, sich mit so vielen verschiedenen Arten von Daten (gleichzeitig) zu verbinden und intelligente Entscheidungen über die Optimierung des Datenabrufs zu treffen, ist bei keiner anderen Plattform unübertroffen. –