Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Keine Beziehungen mehr in Abfragen

Begonnen von mmarschner, Januar 16, 2026, 08:14:44

⏪ vorheriges - nächstes ⏩

mmarschner

Hallo zusammen,

ich habe folgendes Problem, bei dem ich einmal einen Tipp benötige:

Ich habe um 1995 eine Datenbank auf Basis von Access entwickelt und im Laufe der Jahre dann auf Access 97 migriert. Diese Datenbank hat damals einwandfrei funktioniert.

Nun brauche ich die Datenbank wieder und wollte sie auf das aktuelle Format - accdb - migrieren. Dazu habe ich ein Testsystem aufgesetzt und Office 2003 Prof. installiert. Da mir die ursprüngliche Arbeitsgruppendatei fehlt, habe ich eine neu DB angelegt und die Objekte importiert. Die Migration auf das Access 2000 Datenformat hat auch ohne Fehlermeldung funktioniert.

Nun das Problem: Beim Öffnen der Datenbank mit Access 2003 ist die Datenbank dann gleich abgestürzt, wie sollte es auch anders sein. Bei näherer Betrachtung ist mir dann folgendes aufgefallen:

Außer den Tabellenbeziehungen in der Gesamtübersicht, sind alle anderen Beziehungen in den Abfragen verloren gegangen.

Woran kann das liegen und wie kann ich das ggf. umgehen, da ich "eigentlich" nicht alle Abfragen händisch anpassen möchte. Es sind ca. 100 Abfragen, die damals entstanden sind.

Fragende Grüße

Michael

trebuh

Hallo.
Bin jetzt kein Experte...
Vielleicht könnte es daran liegen, daß Du ein 64-Bit System hast?
oder vielleicht (in der alten Datenbank) einen Verweis auf Outlook hast, und Outlook nicht mehr installiert hast?

Kann natürlich auch andere Ursachen haben.

Gruß

mmarschner

Hallo trebuh,

es geht nicht um Verweise, es geht um Tabellenbeziehungen innerhalb von Abfragen.

Frank200

Hallo Michael,

die Beziehungsübersicht ist noch komplett, aber in der Entwurfsansicht der Abfragen fehlen die Beziehungslinien?
Das kann ich mir kaum vorstellen.
Abfragen werden lediglich als SQL-Statement (Text) gespeichert - unabhängig davon, dass Access auch das Layout der Entwurfsansicht speichert. Die Beziehungslinien in den Abfragen repräsentieren lediglich die JOINs. Und ich kann mir kaum vorstellen, dass diese aus den SQL-Statements entfernt wurden.

- sind die Abfragen in der SQL-Ansicht noch korrekt?
- gab es in Acc95/97 JOIN-Typen, die spätere Accessversionen nicht mehr darstellen können? (halte ich für unwahrscheinlich)

Sind die Indexe und PKs der Tabellen noch korrekt?

Viel Glück!
Gruß
Frank

Bitsqueezer

Hallo Michael,

um sicherzugehen, solltest Du zuerst immer die Basisobjekte importieren, also als erstes alle Tabellen. Access sollte hierbei alle Tabellenbeziehungen beibehalten.

Ich weiß nicht, was Du mit "Abfragebeziehungen" meinst. Der Beziehungseditor von Access erlaubt ja (leider) auch das Erstellen von Beziehungen zwischen Tabellen und Abfragen, was da eigentlich nicht hingehört - auf diese Art Beziehungen kannst Du komplett verzichten.

Wenn Du nach dem Import der Tabellen alle Abfragen importierst, sollte beim Öffnen einer Abfrage im Designmodus ohne Probleme auch alles an Beziehungen (eigentlich: JOINs) zu sehen sein, wie sie definiert wurden. Eine Abfrage ist nicht mehr als ein SQL-Text und dort wird definiert, welche Tabelle oder Abfrage mit welcher anderen geJOINt ist.

Der SQL-Text wird sicherlich von Access beim Import nicht angefaßt, dennoch könnte es sein, daß Access nicht vorhandene Tabellen aus der Abfrage entfernt, kann ich aber nicht sagen. Wenn Du daher die Tabellen zuerst importierst, sind sie in jedem Fall vorhanden und die Abfrage findet "ihre" Tabellen.

Bin mir nicht sicher, ob es den Befehl in A95 schon gab, ansonsten wäre ein Export der Abfragen mit "Application.SaveAsText" eine sichere Methode, den SQL-Text unverändert als Textdatei zu speichern (was man mit VBA dann für alle schnell erledigen kann).

Die Anwendung selbst muß dagegen nicht unbedingt funktionieren, auch wenn alles richtig importiert wurde. Wenn Du beispielsweise API-Funktionen in VbA verwendest, müssen diese ggf. angepaßt werden. Insbesondere bei einem Wechsel von 32 auf 64 Bit, aber das sollte bei A2003 ja noch kein Thema sein.

Ebenfalls mußt Du natürlich alle Referenzen in VBA prüfen, da werden, falls vorhanden, sicherlich viele alte DLLs referenziert, die es entweder gar nicht mehr gibt oder in einer anderen Version. Das schließt auch DAO mit ein.

Weiterhin mußt Du ggf. alte ActiveX-Objekte (Beispiel TreeView aus den Common Controls) austauschen. Was leider bedeutet, die Controls aus den Formularen zu entfernen und neu einzubauen, kann man leider nicht migrieren.

Gruß

Christian

mmarschner

Hallo Frank, hallo Christian,

ja, die Beziehungsansicht war noch komplett, lediglich ein wenig unsortiert.

ich habe erst alle Tabellen in eine neue DB importiert und anschließend die weiteren Objekte. Wenn ich nun die Abfrage in der Entwurfsansicht oder SQL Ansicht öffne, sind alle vorhandenen Feldnamen mit "Ausdr(X)" - "X" steht für eine fortlaufende Ziffer - gekennzeichnet, es sei denn, dass bereits ein Aliasname vergeben war und die Joins (nur die, die es schon immer gab - Inner Join, Left Join, Right Join) sind nicht mehr vorhanden - siehe anhängendes Bild. Das würde eigentlich auf fehlende Tabellen hindeuten, was aber leider nicht der Fall ist.

Leider habe ich kein Access vor der Version 2003 mehr und kann nicht nachsehen, ob man da schon Objekte als Text speichern konnte.

API Funktionen wurden damals nicht verwendet, ebenso wie Active X Objekte. Und das mit den Referenzen war mir klar, wobei hier nur die Office Programme zusätzlich verknüpft sind.

MichaelSie dürfen in diesem Board keine Dateianhänge sehen.

Frank200

Klick mal bitte mit der rechten Maustaste auf die Titelleiste der Entwurfsansicht der Abfrage und wähle SQL-Ansicht.
Gruß
Frank

Beaker s.a.

... und dann kopiere und poste den SQL-String.
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

PhilS

Zitat von: mmarschner am Januar 16, 2026, 11:39:07Leider habe ich kein Access vor der Version 2003 mehr und kann nicht nachsehen, ob man da schon Objekte als Text speichern konnte.
Das konnte man.

Ich verstehe dein Problem bzw. dein Vorgehen noch nicht so ganz. A2003 unterstützt doch das A97-Dateiformat noch vollständig. D.h. du kannst doch die Originaldatenbank (eine Kopie davon!) ohne jegliche Konvertierung öffnen und darin schauen, wie die Abfragen aussahen und ggfl. als Text exportieren.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

mmarschner

Hallo Christian,

leider kann ich die Datenbank nicht mehr öffnen, da die original Arbeitsgruppendatei nicht mehr vorhanden ist und eine neue nicht zum Ziel führt. Ich bekomme den Hinweis, dass mein Benutzerkonto nicht über die Berechtigungen verfügt, die Datenbank Exklusiv zu öffnen.

@Frank200, @Beaker s.a.
hier der SQL Code einer übernommenen Abfrage:

SELECT DISTINCTROW
    tblFirmen_Ausschr.Ausschr_Datum AS Ausdr1,
    tblFirmen_Ausschr.RL AS Ausdr2,
    tblFirmen_Ausschr.Angebot_vom AS Ausdr3,
    tblTAKSTROO.Baust_Str_Name AS Ausdr4,
    tblTAKSTROO.KST AS Ausdr5,
    tblTAKSTROO.Baust_PLZ AS Ausdr6,
    tblTAKSTROO.Baust_ORT AS Ausdr7,
    tblAdress_Stamm.Interne_Nr AS Ausdr8,
    tblTAKSTROO.KST_Benennung AS Ausdr9
FROM
    tblAdress_Stamm,
    tblAusschreibung,
    tblFirmen_Ausschr,
    tblTAKSTROO
ORDER BY
    tblFirmen_Ausschr.Ausschr_Datum DESC,
    tblTAKSTROO.Baust_Str_Name,
    tblTAKSTROO.KST;

Die Aliasnamen hat Access selber vergeben.

Korrekt wäre es so:

SELECT DISTINCTROW
    tblFirmen_Ausschr.Ausschr_Datum,
    tblFirmen_Ausschr.RL,
    tblFirmen_Ausschr.Angebot_vom,
    tblTAKSTROO.Baust_Str_Name,
    tblTAKSTROO.KST,
    tblTAKSTROO.Baust_PLZ,
    tblTAKSTROO.Baust_ORT,
    tblAdress_Stamm.Interne_Nr,
    tblTAKSTROO.KST_Benennung
FROM
    ((tblAusschreibung
        LEFT JOIN tblFirmen_Ausschr ON tblAusschreibung.Ausschr_Nr = tblFirmen_Ausschr.Ausschr_Nr)
        LEFT JOIN tblTAKSTROO ON tblAusschreibung.KST = tblTAKSTROO.KST)
        LEFT JOIN tblAdress_Stamm ON tblFirmen_Ausschr.Interne_Nr = tblAdress_Stamm.Interne_Nr
ORDER BY
    tblFirmen_Ausschr.Ausschr_Datum DESC,
    tblTAKSTROO.Baust_Str_Name,
    tblTAKSTROO.KST;

Leider sind in der Datenbank über 100 Abfragen und ich überlege mir gerade, ob ich mir das antun sollte, oder ob ich das nicht gleich bereinige und möglichst viel als SQL Statement in VBA ersetzte.

Bitsqueezer

Hallo Michael,

dann ist der Import wohl doch nicht korrekt erfolgt. Dein Abfragebeispiel listet einfach nur alle Tabellennamen der Originalabfrage, was der Designer korrekt als Cross Join wiedergibt (also alle Tabellen ohne Beziehung). Da der Designer offenbar die Tabellenobjekte und/oder die Feldnamen darin nicht finden konnte, hat er überall "AusdrX" eingesetzt.

Am besten probierst Du es nochmal, indem Du nach dem Import NICHT den Designer verwendest, auch nicht die SQL-Ansicht, sondern stattdessen in VBA ein QueryDef-Objekt einrichtest und dann mit der SQL-Eigenschaft den SQL-Text ausliest. Der Designer kann beim Öffnen alles prüfen/"reparieren" (oder zerstören...), wenn er die passenden Objekte nicht mehr findet, während der Direktzugriff auf die SQL-Eigenschaft des QueryDef-Objektes nichts am Inhalt ändert. So könntest Du ggf. wenigstens die SQL-Texte korrekt sichern und dann einfach selbst in eine Textdatei schreiben, mit VBA oder per Copy/Paste, wenn Du das SQL im Direktfenster ausgibst. Aber bei über 100 Abfragen wohl besser per VBA.

Sollte dabei das gleiche herauskommen, könnte es eben mit der Zugriffsdatei zusammenhängen, die Dir den Zugriff auf die Objekte verwehrt. Ich habe nie damit gearbeitet, es gibt sicher noch irgendwo Anleitungen, was man im Notfall machen kann, wenn die Datei fehlt. Aber es kann bedeuten, daß Du ohne diese Datei nicht mehr darankommst.

Gruß

Christian

Knobbi38

Ohne Workgroup Datei wird es schwierig und du wirst wahrscheinlich alles von Hand nacharbeiten müssen, wenn das überhaupt geht.

Wenn eine Workgroup Datei fehlt, kann diese mit dem Workgroup-Administrationtool angelegt und bearbeitet werden, zumindest bis ACC2010. Dabei muss man alle User und Groups mit genau derselben PersonalID bzw. WorkgroupID wieder anlegen. Das sollte reichen und dann kann man diese Workgroup beim Öffnen als Argument mitgeben.

Siehe auch:
https://mskb.pkisolutions.com/kb/305542

Ohne diese Workgroupdatei ist der Aufwand sehr hoch. Wenn die Datenbank so alt ist, hat sich wahrscheinlich so viel geändert, dass sich eine Migration nicht mehr lohnt.

Knobbi38

mmarschner

Guten Morgen Knobbi38,

die Daten aus der Workgroup Datei habe ich leider auch nicht mehr, aber ich habe noch einen Satz Installationsdisketten gefunden und versuche jetzt eine virtuelle 32-bit Maschine aufzusetzen um das dann über diesen Weg zu versuchen.

Leider benötige ich die alte Datenbank tatsächlich, da ich sie einem Kunden präsentieren soll, mit dem Ziel, dass die Datenbank dann an seine Bedürfnisse angepasst werden könnte. Dann wird diese natürlich neu entwickelt, da die Datenbank dann mit einer oder mehreren anderen Datenbanken auf einem SQL Server zusammenarbeiten muss - Datenaustausch, etc.

Michael

P.S. Wenn der 32-Bit Rechner läuft werde ich mal berichten.

Knobbi38

#13
Hallo Michael,

wenn es sich nicht um die Installationsdisketten für die Anwendung, sondern nur um die Access Disketten handelt, wird dir das nicht helfen.

Die Beziehungen sind in der Systemtabelle MSysRelationships hinterlegt, möglicherweise gab es diese auch schon unter Access'97. Vielleicht hilft das ja schon weiter.

Möglicherweise kommst du auch per Automation an die DB:
https://mskb.pkisolutions.com/kb/192919

Hier noch ein paar Hinweise, was bei einer Konvertierung beachtet werden sollte:
http://allenbrowne.com/ser-48.html

Knobbi38

Beaker s.a.

Hallo,

Das Thema des OP ist ja etwas abgedriftet, zur Workgroup-Problematik kann
ich nichts sagen.

Mir ist nur Folgendes aufgefallen, - die im Entwurf gezeigte
Abfrage kann nicht der gezeigten SQL-Ansicht entsprechen. Erstere ist eine
Anfügeabfrage. Könnte das ursprüngliche Problem der fehlenden Beziehungen
evtl. daher rühren, dass da neue AUTO-IDs gesetzt werden?

gruss ekkehard
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)