Aus 4 mach 1

Pfaelzer

Grünschnabel
Hi,

Ich möchte mit c# auf 4 Access-DB's (Mdb) zugreifen und Select's über alle 4 DBs ausführen.
Ist sowas möglich ?
Wenn nicht, könnte ich mir auch vorstellen die nötigen Tabellen aus den 4 DB's in eine Neue DB zu exportieren / importieren und dann die SQLs auszuführen.

Hat jemand einen Ansatz für mich ?

Gruß
 

Deletemaster

Erfahrenes Mitglied
Ich denke, du wirst wohl die zweite Methode nehmen müssen.
Da der Connection-String nur eine DB beinhalten kann und somit eine Query nur aus den Tabellen einer DB möglich ist.
Du könntest allerdings 4 verschiedene connstrings verwenden, jeweils die querys ausführen, die Werte wiederum jeweils in Variablen speichern und weiterverarbeiten
MACHT ABER KEINEN SINN
Bei der Erzeugen der Datenbanken soltest du dir VORHER Gedanken machen:
WER
braucht
WELCHE Werte
Lies doch mal dazu ein wenig über das "Noramlisieren" (1. Normalform, 2. Normalform, 3. Normalform)
Weitere Stichwörter "Redundanzen", "Integrität"
Logisch ist: 1 Datenbank mit beliebig vielen Tabellen (Normalform beachten)
 

MFC openGL

Erfahrenes Mitglied
Würde die BCNF Normalform empfehlen...

Mal davon abgesehen, es kann durchaus manchmal sinnvoll sein, mehrere Datenbanken zu haben. Z.B. wenn mehrere kleine Firmen sich einen Server teilen, was schon mal vorkommt. Dann hat jeder seine eigene DB, nach einiger Zeit wollen sich evtl 2 Firmen geschäftlich verbinden, dann ist das schon sinnvoll seine DB dem Anderen zu öffnen, aber der einfacheren Trennung im Notfall doch die DBs so beizubehalten.

Aber mal davon abgesehen, dafür gibts zumindest in Oracle den VIEW, weiß jetzt nicht ob es sowas auch für Access gibt. Aber erkundigen kostet nix ;)

Gruss

MFC OpenGL
 

Pfaelzer

Grünschnabel
hallo,

leider kann ich das Design der 4 Mdb's nicht ändern und muß das so hinnehmen wie es ist.
Ich brauch auch nur einen Bruchteil der Daten die in den 4 DB's sind.
Wie ist es möglich in eine Leere DB DB Tabellen aus anderen DB's zu importieren. ?
Ich hatte folgenden Ansatz hier im forum gefunden, dazu müßte ich aber alle Tabellen in der Ziel-Mdb inkl. Spalten anlegen und den Fehler beseitigen in der Zeile :

da2.Update(ds2,"Customer");

"Zusätzliche Informationen: Aktualisieren erfordert einen gültigen InsertCommand, wenn
eine DataRow-Auflistung mit neuen Zeilen weitergegeben wird."

Geht es nicht einfacher ?


---------------------- schnipp -------------------------
DataSet ds1 = new DataSet();
DataSet ds2 = new DataSet();

string strCONN = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + DBFrom + ";User Id=Admin;";

OleDbConnection aConnection = new OleDbConnection(strCONN);
aConnection.Open();

OleDbDataAdapter da1 = new OleDbDataAdapter("Select * from " + Table,aConnection);

da1.AcceptChangesDuringFill = false;
da1.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da1.Fill(ds1, "Customer");

OleDbDataAdapter da2 = new OleDbDataAdapter("Select * from "+Table,this.TargetConn);

da2.AcceptChangesDuringFill = false;
da2.MissingSchemaAction = MissingSchemaAction.AddWithKey;
da2.Fill(ds2, "Customer");
ds2.Merge(ds1);
da2.Update(ds2,"Customer");


--------------------------------------------------------------------------------------------------------------------------------
 

Deletemaster

Erfahrenes Mitglied
Also bei Access:
Neue DB anlegen
Datei --> Externe Daten importieren --> *.mdb auswählen
aus folgenden Dialog auswählen: Tabellen, Abfragen, Formulare...
fertig (ist natürlich nur die Access-Oberfläche)
diese Aktion aber in Code zu verpacken ist sicher viel umständlicher...
 

Pfaelzer

Grünschnabel
ok, ok ich muß weiter ausholen.

ich muß eine immer wiederkehrende Datenübernahme programmieren.
Auf dem Quellsystem sind 4 MDB's auf dem Ziel - System eine DB2.
Weder auf dem Quell noch auf dem Zielsystem ist Access installiert.
Das Zielsystem ist Win2003 mit .Net . Da liegt es natürlich auf der Hand
das ganze mit c# zu programmieren.

Gruß
 

Neue Beiträge