Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: hase198312 am April 23, 2015, 12:08:20

Titel: Abfrage zwei Datenbanken
Beitrag von: hase198312 am April 23, 2015, 12:08:20
Hallo zusammen,
folgende Frage:
ich habe zwei verschiedene Datenbanken, in beiden Datenbanken werden Projekte Angelegt. Meine Aufgabe ist, eine Abfrage zu erstellen, die eine Übersicht über angelegte und nicht angelegte Projekte in beiden Datenbanken wiedergibt. Demnächst mochte ich mit dieser Abfrage Formulare usw. erstellen.
Meine Vorgehensweise:
Ich erstelle eine Verknüpfung zu den Datenquellen, indem ich verknüpfte Tabellen erstelle (Siehe Abbildung_1(1-3)). Als nächstes erstelle ich zwei Abfragen. Erste Abfrage (Abb_1:Bild_1) beinhaltet alle Projekte aus DB1 (Bild_2) und zweite Abfrage (DB2) (Bild_3) beinhaltet alle Projekte aus DB2. In beiden DBanken werden eigentlich gleiche Projekte angelegt, es kommt aber manchmal vor, dass in einer DB ein Projekt falsch benannt wird, oder gar nicht eingetragen. Und nächste Abfrage muss Übersicht über alle bzw. nicht angelegte Projekte geben.
Also ich erstelle eine Abfrage, wo ich Abfragen DB1 und DB2 versuche zu verknüpfen (Siehe Abbildung_2(1-3)):
Variante 1: Meine Abfrage beinhaltet nur die Datensätze, bei denen die Inhalte beider Tabellen gleich sind
Variante 2: beinhaltet alle Datensätze aus DB1 und nur DSätze aus DB2, bei denen die Inhalte der verknüpften Tabellen gleich sind
Variante 3: beinhaltet alle DSätze aus DB2 und nur die DSätze aus DB1, bei denen die Inhalte der verknüpften Felder beider Tabellen gleich sind.
Und keine der oben genannte Variante liefert mir leider eine gewünschte Ansicht von Daten (Abbildung_2)
Meine Frage ist, ob es überhaupt möglich die Abfrage so zu erstellen wie in der Abb.2- gewünschte Ansicht. Könnte vielleicht SQL-Anweisung weiterhelfen? Ich bin leder nur ein Anfänger, daher brauche ich hilfe um dieses Problem zu lösen

Gruß Hase
Titel: Re: Abfrage zwei Datenbanken
Beitrag von: DF6GL am April 23, 2015, 14:15:43
Hallo,

zunächst:  Crossposting ist unerwünscht:   http://forum.freeaccess.de/YaBB.pl?num=1429782898

Sinnvoll wäre es, die Abfrage-SQL-Strings zu posten...


M. E. sind die beiden ersten Abfragen überflüssig. Sobald die Tabellen aus beiden DB's in einer (dritten) DB verlinkt sind, können gleich über die Schlüsselfelder (Projectno) verknüpfende Abfragen mit dem gewünschten Ergebnis erstellt werden.
Titel: Re: Abfrage zwei Datenbanken
Beitrag von: MaggieMay am April 23, 2015, 16:14:35
Hallo,

du könntest die Tabellen im ersten Schritt (qry_uni) zusammenführen:
Select PROJECTNO As ID, PROJECTNO, PROJECTNAME, Projektstatus1, NULL As shortname, NULL As longname, NULL As fk_State
FROM DB1
UNION
Select shortname, NULL, NULL, NULL, shortname, [name], fk_state
FROM DB2

und darauf aufbauend zusammenfassen:
Select ID, Max(ProjectNo) As ProNo_1, Max(ProjectName) As ProName_1, Max(Projektstatus1) As ProStat_1, Max(shortname) As ProNo_2, Max(longname) As ProName_2, Max(fk_state) As ProStat_2
From qry_uni
Group By ID
Order By ID
Titel: Re: Abfrage zwei Datenbanken
Beitrag von: hase198312 am April 23, 2015, 21:58:55
Zitat von: DF6GL am April 23, 2015, 14:15:43
Hallo,

zunächst:  Crossposting ist unerwünscht:   http://forum.freeaccess.de/YaBB.pl?num=1429782898

Sinnvoll wäre es, die Abfrage-SQL-Strings zu posten...




Ich wusste leider nicht, dass Crossposting unerwünscht ist :-[
Titel: Re: Abfrage zwei Datenbanken
Beitrag von: hase198312 am April 23, 2015, 23:36:40
Zitat von: MaggieMay am April 23, 2015, 16:14:35
Hallo,

du könntest die Tabellen im ersten Schritt (qry_uni) zusammenführen:
Select PROJECTNO As ID, PROJECTNO, PROJECTNAME, Projektstatus1, NULL As shortname, NULL As longname, NULL As fk_State
FROM DB1
UNION
Select shortname, NULL, NULL, NULL, shortname, [name], fk_state
FROM DB2

und darauf aufbauend zusammenfassen:
Select ID, Max(ProjectNo) As ProNo_1, Max(ProjectName) As ProName_1, Max(Projektstatus1) As ProStat_1, Max(shortname) As ProNo_2, Max(longname) As ProName_2, Max(fk_state) As ProStat_2
From qry_uni
Group By ID
Order By ID


Danke für den tollen Tipp....Union-Abfragen das ist etwas neues für mich, habe wieder was neues dazu gelernt!
Es hat alles super geklappt, nur in der Spalte ID_2 erscheinen keine ID-Nummern. Habe ich etwas falsch geschrieben?

Union-Abfrage:
SELECT MOV_PROJECTS.PROJECTNO AS ID, MOV_PROJECTS.PROJECTNAME AS Name, IIf([PROJECTSTATE]=0,"keine Angabe",IIf([PROJECTSTATE]=10,"unvollständig",IIf([PROJECTSTATE]=20,"auf Freigabe wartend",IIf([PROJECTSTATE]=30,"Freigabe erhalten",IIf([PROJECTSTATE]=40,"in Bearbeitung",IIf([PROJECTSTATE]=50,"Abgeschlossen",IIf([PROJECTSTATE]=60,"Storniert",IIf([PROJECTSTATE]=70,"Ruhend")))))))) AS Status, NULL As ID_2, NULL As Name_2, NULL As Status_2
FROM MOV_PROJECTS
WHERE (((MOV_PROJECTS.PROJECTNO)>2015));
UNION
SELECT public_psp.shortname AS ID_2,NULL,NULL,NULL, public_tree.name AS Name_2, public_tree.fk_state AS Status_2
FROM public_tree INNER JOIN public_psp ON public_tree.oid = public_psp.oid
WHERE (((public_psp.shortname)>="201503000" And (public_psp.shortname)<"201504000"));

zusammengefasst SQL:
SELECT OrgaMax_Projekte.ID, Max(OrgaMax_Projekte.Name) AS Name, Max(OrgaMax_Projekte.Status) AS Status, Max(OrgaMax_Projekte.ID_2) AS ID_2, Max(OrgaMax_Projekte.Name_2) AS Name_2, Max(OrgaMax_Projekte.Status_2) AS Status_2
FROM OrgaMax_Projekte
GROUP BY OrgaMax_Projekte.ID
ORDER BY OrgaMax_Projekte.ID;

ich bedanke mich im voraus

Hase


Titel: Re: Abfrage zwei Datenbanken
Beitrag von: MaggieMay am April 24, 2015, 02:06:18
Hi,

du musst einfach nur mal meinen Vorschlag mit dem vergleichen was du daraus gemacht hast, dann solltest du eigentlich darauf kommen wo der Fehler liegt.

Hinweis:
Ein Aliasname ist in nachfolgenden Select-Statements ohne Bedeutung.

Der Fehler liegt hier:
SELECT
public_psp.shortname AS ID_2,
NULL,
NULL,
NULL,

da ist einfach eine NULL zu viel!
Titel: Re: Abfrage zwei Datenbanken
Beitrag von: hase198312 am April 27, 2015, 00:20:46
Zitat von: MaggieMay am April 24, 2015, 02:06:18

Der Fehler liegt hier:
SELECT
public_psp.shortname AS ID_2,
NULL,
NULL,
NULL,

da ist einfach eine NULL zu viel!

Super!!!
Danke, hat alles super geklappt :)

SELECT
public_psp.shortname,
NULL,
NULL,

Gruß
Hase