PDA

Vollständige Version anzeigen : Mehrere Tabellen, eine Abfrage ?


Johannes258
13.06.2001, 22:39
Ich habe mehrere Tabellen erstellt die ich mit einem Formular bearbeiten wollte (Die Tabellen sind miteinander verknüpft).

Das geht wohl nur über den Umweg einer Abfrage.
Problem: Ich erstelle mit dem Assistenten eine Abfrage, füge mehrere Tabellen ein und wenn ich dann die Abfrage ausführe sind plötzlich alle Daten verschwunden.Nur noch eine leere Tabelle.

Mit nur einer Tabelle klappt alles wunderbar.

Danke&Gruß
Christian

p.s.: Ich verwende Office 2000 SP2

Bernd Koch
13.06.2001, 23:25
Ja, das kann passieren.

Ich gehe mal davon aus, dass deine zwei Tabellen im Beziehungsfenster 1:N mit referentieller Integrität verbunden wurden. Dann siehst du auf der einen Seite des Verbindungsstriches die 1 und auf der anderen das Unendlichkeitszeichen (liegende 8).

So taucht das dann auch in der Abfrage auf. Wenn du nun Daten in der Tabelle hast, die die 1 hast (die Mastertabelle) und keine zugehörigen in der Tabelle mit der liegenden 8 (Detailtabelle), dann zeigt dir die Abfrage nix an, weil diese Art der Verknüpfung der beiden Tabellen in der Abfrage umgangssprachlich bedeutet: es werden nur die Datensätze angezeigt, die (über die Verknüpfung) zusammen gehören ... und davon sind dann keine da.

Jetzt gibt es zwei Möglichkeiten:

- du gibst in der Detailtabelle mal probeweise bei einem Datensatz was ein - wichtig ist, dass vor allem das verknüpfende Feld einen Eintrag hat (eine Zahl oder einen Text, der auch in der Mastertabelle im Primärschlüssel vorkommt).
Danach öffnest du die Abfrage noch mal und schaust, ob nun dieser Datensatz angezeigt wird.

- du klickst in der Abfrage mit der rechten Maustaste auf den Verbindungsstrich zwischen den beiden Tabellen, dann sollte sich ein Fensterchen öffnen mit den Einträgen "Verknüpfungseigenschaften" und "Löschen". Dort klickst du mit der linken Maustaste auf "Verknüpfungseigenschaften".
Im nächsten Fenster hast du drei Optionen, die oberste ist z.Zt. gültig.

Klicke dann mal die zweite oder die dritte an - aus dem Text geht hervor, welche du nehmen musst.

Nunmehr siehst du alle Datensätze der Mastertabelle und kannst die fehlenden Sachen eintragen. Du solltest in der Regel aber irgendwann wieder zu der ursprünglichen Einstellung zurückkehren und es nicht dauerhaft so lassen ... das kann sonst später bei anderen Aktionen Stress ergeben.

Tja, sieh mal zu, ob du auf diese Weise dein Problem lösen kannst, sonst melde dich.

Bernd

P.S.
Du schreibst von mehreren Tabellen - da kann das im Detail anders sein. Ich habe nur mal das Prinzip aufgezeigt.
Falls es noch Probleme gibt, teile mit, welche Tabellen du in der Abfrage hast, wie sie miteinander verbunden sind usw. - dann ist es leichter, dir zu helfen.
Der Hauptgrund ist aber meistens, dass in mindestens einer der Tabellen noch gar keine Daten sind.

Johannes258
14.06.2001, 11:10
Hi Bernd !

Erstmal 1000 Dank für deine ausführliche Antwort ! ..Du hast mir wirklich geholfen !
Es funktioniert jetzt.

Aber eins kapiere ich nicht: Ich habe eine Tabelle mit Kundenstammdaten, eine Tabelle mit einem Nachschlagefeld für Branchen (Rechtsanwalt,Steuerberater usw.), dann hab ich eine Tabelle mit Kunden Details Infos (z.b. Wann ich angerufen habe,Notizen zu dem Kunden usw) und ich habe eine Tabelle mit Aktionen (Z.b. Werbeaktion 14.6.01...) drunter steht dann ob die jeweilige Kundennummer an einer Aktion teilgenommen hat oder nicht.

Jetzt sind die Tabellen nur anhand der Kundennummer miteinander verknüpft.(Außer der Nachschlagetabelle "Branche")Alle Tabellen sind mit referentieller Integrität, Löschweitergabe und aktualisierungsweitergabe ist aktiviert.Vom Verknüpfungstyp sind alle mit "Beinhaltet nur die Datensätze bei denen die Inhalte der verknüpften Felder gleich sind".
D.h.: Ich habe in den Kundenstammdaten (Adressen) einen Primärschlüssel: Kundennummer.Und in der anderen Tabellen ist auch ein Feld Kundenummer.Die hab ich verknüpft -->aber wie gesagt:Nicht mit 1:n sondern mit 1:1 !
Das mit Abfrage klappt jetzt seitdem ich dass in den Verknüpfungseigenschaften von
"Beinhaltet nur die Datensätze bei denen die Inhalte der verknüpften Felder gleich sind" in „Beinhalte alle Datensätze aus Kundenstammdaten aber nur die Felder...“ geändert habe.
Allerdings habe ich dass nur in den Eigenschaften der Abfrage geändert ànicht in dem Beziehungsfenster der Tabellen.
Das ist doch richtig oder ?

Nochmal Vielen Dank für die Hilfe und Grüße
Christian

p.s.: Mit den leeren Felder hattest du auch recht !. Die waren weg, nachdem ich in jeder Tabelle etwas eingetragen hatte.

Bernd Koch
14.06.2001, 13:04
Na, da ist ja schon mal erfreulich.

Bei deinen Verknüpfungen habe ich allerdings so meine Zweifel, ob sie richtig sind. Ich steige aber auch noch nicht so ganz durch deine Beschreibung durch. Mal ein Versuch der Klärung:

Tabelle KundenStammdaten
KdNr (Primärschlüssel), BranchenNr (Zahl/LongInteger -> Verknüpfung zur Tabelle Branchen)

Tabelle Branchen
BranchenNr (Primärschlüssel, Autowert)

Tabelle Kundendetails
KdNr (Primärschlüssel)

Tabelle Aktionen
KdNr (Primärschlüssel)

Die drei Tabellen Stammdaten, Kundendetails und Aktionen sind 1:1 über KdNr miteinander verknüpft.

Frage 1:
Ist das bis hierher richtig???

Frage 2:
In der Tabelle Kundendetails gibt es ein Feld, wann du den Kunden angerufen hast. Steht da immer nur ein einziges Datum (und/oder Uhrzeit) drin oder kann es sein, dass du notierst, dass du den Kunden am 05.06. und dann noch einmal am 10.06. angerufen hast? Wenn das nicht so ist beim Feld "Anrufe", ist das dann bei einem anderen Feld der Tabelle so, dass dort mehr als ein Eintrag aufgeführt wird???

Frage 3:
Bei den Aktionen ist es doch wahrscheinlich so, dass bei Aktion A die Kunden 1, 3 und 5 angeschrieben werden und bei Aktion B die Kunden 2, 4 und wiederum 5.
Ein und der selbe Kunde kann also bei mehreren Aktionen angeschrieben werden???

Mal erst bis hierhin. Wenn du geantwortet hast, geht´s weiter.

Bernd

Johannes258
14.06.2001, 14:03
Hi Bernd !

Mal ein Versuch der Klärung:
Tabelle KundenStammdaten
KdNr (Primärschlüssel), BranchenNr (Zahl/LongInteger -> Verknüpfung zur Tabelle Branchen)
-- ja, das ist richtig.
Tabelle Branchen
BranchenNr (Primärschlüssel, Autowert)
-- jup
Tabelle Kundendetails
KdNr (Primärschlüssel)
-- ja, mit Wert „Zahl“
Tabelle Aktionen
KdNr (Primärschlüssel)
-- ja, genau
Die drei Tabellen Stammdaten, Kundendetails und Aktionen sind 1:1 über KdNr miteinander verknüpft.
Frage 1:
Ist das bis hierher richtig???
-- ja, ist genauso wie du gesagt hast.
Frage 2:
In der Tabelle Kundendetails gibt es ein Feld, wann du den Kunden angerufen hast. Steht da immer nur ein einziges Datum (und/oder Uhrzeit) drin oder kann es sein, dass du notierst, dass du den Kunden am 05.06. und dann noch einmal am 10.06. angerufen hast? Wenn das nicht so ist beim Feld "Anrufe", ist das dann bei einem anderen Feld der Tabelle so, dass dort mehr als ein Eintrag aufgeführt wird???
-- Also: Ich wusste nicht, wie ich das am besten machen soll. Also habe ich dass Problem sozusagen „umschifft“: Es gibt in der Tabelle Kundendetails folgende Felder: „Kundenummer „(Zahl,Primärschlüssel), „Bestandskunde Geschäft“, „Bestandskunde Eigen“, „Kunde wieder anrufen ?“ (Ja/nein Feld) und ein Feld: „Kunde wann anrufen ?“ (Datumsfeld) Ich weiß schon, dass das nicht so 100% Ideal ist àaber mir viel einfach nicht besseres ein ..Am besten wäre halt eine Erinnerungs bzw. Wiedervorlagen Funktion.Die ganze Geschichte muss halt auch einigermaßen einfach bleiben.
Frage 3:
Bei den Aktionen ist es doch wahrscheinlich so, dass bei Aktion A die Kunden 1, 3 und 5 angeschrieben werden und bei Aktion B die Kunden 2, 4 und wiederum 5.
Ein und der selbe Kunde kann also bei mehreren Aktionen angeschrieben werden???
---ja, so isses. Deshalb auch die Extra Tabelle „Aktionen“ Jedesmal wenn ich eine Aktion mache kommt ein neues Feld dazu. Ich mache jedes Mal ja/nein Felder ..Dann sehe ich halt dass Kd. Nr. 11 bei Aktion 1 teilgenommen hat ; bei Aktion 2 aber nicht ..
Vielleicht fällt dir ja noch was ein um die Geschichte zu verbessern :)
Viele grüße
Christian

Bernd Koch
14.06.2001, 16:48
Auf zur nächsten Runde.

Wie schon vermutet, ist deine Tabellenstruktur nicht optimal.

Für die nachfolgenden Erklärungen wäre es hilfreich, wenn du dir aus folgendem Forumsbeitrag mal was runterlädtst:

benötige Datenbank Beispiel (http://www.ms-office-forum.net/forum/showthread.php?s=&threadid=44855)

Dort habe ich an Philipp-Berlin und an Günther Kramer ein Skript und ´ne Demo-DB weiter gegeben, die man von deren homepages laden kann (die Adressen sind im viert- und im drittletzten Beitrag zu diesem Thema).

Lies dir das bitte erstmal durch und schau dir die Demo-DB an, insbesondere das Beispiel M:N-Verknüpfung.

Tabelle Aktionen
In deiner DB ist nämlich zumindest bezüglich der Tabelle Aktionen eine noch nicht aufgelöste M:N Verbindung drin und das solltest du ändern.

Tabelle Kundendetails
Bei der Tabelle Kundendetails bist du mir ein wenig die Antwort schuldig geblieben. Ich weiß immer noch nicht, ob dort Daten zu einem Kunden mehrfach eingetragen werden (sollten) - z.B. mehrere Anrufe - oder nicht.
Wenn da immer nur in den Feldern e i n e Sache pro Kunde eingetragen ist (und dir das auch reicht), so macht die Tabelle gar keinen Sinn und du solltest die Felder in der Tabelle Kunden unterbringen.
Ansonsten wäre auch bei dieser Tabelle evtl. eine M:N-Verbindung - das weiß ich halt jetzt noch nicht.

M:N auflösen
Bei der Tabelle Aktionen gilt ja offensichtlich das Prinzip:

- eine Aktion beinhaltet viele Kunden

- ein Kunde kann bei vielen Aktionen dabei sein.

Du solltest daher eine neue Tabelle zwischen Kundenstammdaten und Aktionen erzeugen und die beiden letztgenannten Tabellen nicht direkt miteinander verknüpfen.
In die neue Tabelle Kunden_Aktionen kommt zumindest die KundenNr aus Kundenstammdaten und der (neue!!) Primärschlüssel (Autowert) aus der Tabelle Aktionen.
D.h.:
- in der Tabelle Aktionen solltest du erstmal einen neuen Primärschlüssel
(AktionsID) anlegen.
- dann müsstest du noch dafür sorgen, dass natürlich auch in der neuen Tabelle die richtigen Datensätze miteinander verbunden sind (was in diesem Fall relativ leicht sein sollte)...

... aber du merkst schon, das wird hier so langsam ein Roman.

Wäre es von deiner Seite o.k., dass du mir die DB mal zuschickst und ich sie dir schnell überarbeite?

Kannst mir ja so oder so ´ne Mail mit deiner Antwort schicken.

Bernd

baerenverlag.koch@t-online.de