Neuigkeiten:

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

Mobiles Hauptmenü

Feldinhalt aus anderen Tabellen übernehmen!

Begonnen von wombl, April 11, 2011, 12:02:25

⏪ vorheriges - nächstes ⏩

wombl

Hallo,
bis jetzt habe ich meine Firmenkundenadressen in EINER Tabelle gespeichert gehabt, und das ganze hat soweit auch gut Funktioniert!

Da es aber aus Firmeninternengründen Notwendig ist, muss ich nun das ganze neu aufbauen und stehe da irgendwie total an:

Die Datenbank ist wie folgt aufgebaut

Tabelle1:

Firmenadresse inkl. Daten der Geschäftsleitung,letzter Kontakt, usw.

Tabelle2:

Adressen der Niederlassungen inkl Niederlassungsleiter


Tabelle3:
Daten der weiteren Ansprechpartner(in der Zentrale)

Tabelle 4 bis 10

Daten der weiteren Ansprechpartner der einzelnen Niederlassungen

DIe Formulare hab ich erstellt, und funktioniert eigentlich auch alles ganz gut.

ABER

ich schaffe es einfach nicht das wenn ich eine NEUE Firma anlege, das in den Tabellen 2 bis 10 diese Firma auch übernommen wird.

Beispiel: ich gebe im Formular 1(Tabl 1) eine neue Fimra ein und möchte hierzu gleich eine Niederlassung angeben, offne also das Formular2(tabl2) so ist das Feld für den Firmennamen leer. Dort sollte aber, und daran scheitert es der gleiche Firmenname stehen wie eben in Tabl1

Habe es mit Beziehungen versucht...klappt nicht, zwar gibt es in der Entwurfsansicht der Tabellen den Punkt "Verknüpfung von" aber ich habe KEINE AHNUNG wie das funktioniert.
Kann mir da bitte jemand sagen wie ich das hinbekomme?
wäre wirklich wichtig, das ich das schnell schaffe, mein chef sitzt mir im Nacken und ich brauche diese Datenbank :)


Achja ich habe es natürlcih auch vso versucht das ich am Formular2 einfach das Feld [Firma] von der Tabelle1 nehme, aber das funkt auch nicht, da ja im tägl. Betrieb dann beim öffnen des Formular2 nach Fimra gefiltert werden soll (es steht beim öffnen automatisch die gl. Firma wie am Hauptformular(1). wenn ich das also so mache, tut sich gar nix.. das Formular bleibt einfach leer!??
LG
wombl

DF6GL

Hallo,

öffne die anderen Formulare mit dem Openargs-Parameter:

Docmd.Openform "frmTab2",Openargs:=Me!Firmenname

und im frmTab2:

Sub Form_Load()
If not isnull(Me.Openargs) then Me!Firmenname.Defaultvalue="""" & me!Openargs & """"
End Sub



Ob Deine (neue) Tabellestruktur aber Dich , bzw. Deinen Chef glücklich macht , wage ich erst mal zu bezweifeln...

database

Hallo,

bezgl. Tabellenkonstrukt darf ich mich der Meinung von DF6GL anschließen.
Ich denke du solltest mit insgesamt 5 Tabellen das Auslangen finden!
Was wäre denn wenn sich die Zahl der zu erfassenden Firmen auf 100 erhöht? Dann hättest du nach deionem Konzept 100 Tabellen ....

Also so geht's nicht ...  ;)

Du solltest dich DRINGEND mit der Planung und Implementierung von relationalen Datenbanken beschäftigen!

Für dein Tabellenkonstrukt siehe Anhang - ein schemenhaftes Beispiel...

[Anhang gelöscht durch Administrator]

wombl

hallo,

erst mal danke für eure Hilfe.

Ich denke hier ist ein Missverständniss passiert.

Eben um zu vermeiden das ich zuviele Tabellen bekomme, habe ich die Anzahl der Niederlassungen auf 6 Stk limitiert (also 1 Niederlassungstabelle, 7AnsprechpartnerTabellen inkl Zentrale, 1 Zentraltabelle. insgesamt also 9 Tabellen)
Im wesentlichen also so wie das was da am Bild (danke für den Aufwand) vorgeschlagen wurde. Nur habe ich halt die anspr.partner der niederlassungen und der Zentrale auf separaten Tabellen.

Derzeit sind in der Datenbank 7000 Firmen registriet und es funktioniert eigentlich problemlos. Nur eben das mit der Firma hat nicht gefunkt, aber auch das Problem habe ich ja dank eurer Hilfe nun gelöst!

Lg
Wombl

Hondo

Hallo,
warum für jede Niederlassung separate Tabellen? Das ist nicht sehr sinnvoll.
Ich würde die Tipps meiner vorredner befolgen, sie führen zum Ziel.

Andreas

wombl

Hallo,

ich gleich nochmal.

Das Funktioniert nicht!

bis jetzt öffne ich die verschiedenen Formulare mit folgendem Befehl:

DoCmd.OpenForm "Weitere Ansprechpartner", , , "Firma='" & Me!Firma & "'"

Das funktioniert für bestehende Firmen die ich aus der alten Datenbank übernommen und auf die diversen Tabellen aufgeteilt habe sehr gut.

Werde mir überlegen ob ich die Tabellenzusammenführe, was aber alles nichts bringt, wenn ich dieses Problem beim öffnen nicht löse

lg
wombl

[Anhang gelöscht durch Administrator]

wombl

ZitatEben um zu vermeiden das ich zuviele Tabellen bekomme, habe ich die Anzahl der Niederlassungen auf 6 Stk limitiert (also 1 Niederlassungstabelle, 7AnsprechpartnerTabellen inkl Zentrale, 1 Zentraltabelle. insgesamt also 9 Tabellen)

Ich habe nur eine Tabelle für die Niederlassungen!

Die jeweiligen Ansprechpartner der einzelnen Niederlassungen sind aufgeteilt auf eigene Tabellen

Macht also 6 Tabellen für Ansprechpartner der Niederlassungen PLUS 1 Tabelle für die Ansprechpartner der Zentrale PLUS 1 Tabelle der Zentrale selbst PLUS 1 Tabelle für die Niederlassungen

Wenn mit jemand erklärt was es bringt die ANsprechpartner der Niederlassungen und die Ansprechpartner der Zentrale zusammen zu legen, bin ich gerne bereit das zu machen, aber ich halte es halt für übersichtlicher wenn das getrennt bleibt!

Wenn das irgendeinen einfluß auf die Funktion hat, dann änder ich das sofort um!

lg
werner

database

#7
Hallo,

beim Tabellenkozept einer relationalen Datenbank geht es nicht darum was du für übersichtlicher erachtest sondern darum, dass die Datenhaltung den Regeln und Gesetzmäßigkeiten des relationalen Datenbankdesigns entspricht.
Das Gedankengut, das bei deiner Vorstellung einer Datenbank zum Tragen kommt stammt m.E. aus Überlegungen in Bezug auf Excel.
Von der Vorstellung, dass eine Exceltabelle einer Access-Datenbank gleichzusetzen ist, kannst du dich gleich verabschieden.

"Wenn mit jemand erklärt was es bringt die ANsprechpartner der Niederlassungen und die Ansprechpartner der Zentrale zusammen zu legen"

Das Tabellenkonstrukt entspräche den Normalisierungsregeln, die bei der Erstellung einer relationalen Datenbank zum Tragen kommen.
Dieses sind Vorschriften und Regeln, die es emöglichen mit den Daten in effizienter Weise zu arbeiten.
Damit sind auch Regeln gemeint, die es ermöglichen Daten in eine Datenbank zu schreiben und danach aus dieser auch wieder heraus zu bekommen.

So sollten z.B. wie bereits mehrmals erwähnt ALLE Ansprechpersonen in einer einzigen Tabelle gespeichert werden - sie haben
ja auch alle die gleichen Attribute - denke ich mal. Zur Unterscheidung erhält jeder Datensatz den Primärschlüssel der Niederlassungstabelle
als Femdachlüssel - somit kann JEDE Ansprechperson EINDEUTIG einer Niederlassuing zugeordnet werden.
Aber es geht ja nicht nur um die Ansprechpersonen, das Gleiche gilt für die Firmen und die Niederlassungen und zieht quer durch eine gesamte Datenbank.
Das Datenmodell auf dem die Formulare dann aufgesetzt werden, MUSS widerspruchsfrei funktionieren sonst ist JEDE investierte Minute in dei Entwicklung ohne Wert!

ZitatWenn das irgendeinen einfluß auf die Funktion hat ...
Worauf du einen lassen kannst!

Schau dir mal die Links #1, #1a und ev. #2 in der Signatur von DF6GL sowie den Link #5 in meiner Signatur an.
Dort wird in leicht verständlicher Weise erklärt, wie und warum Tabellen normalisiert werden.
Du wirst nicht darum herum kommen dich mit dem Design einer relationalen Datenbank in all seinen Einzelheiten
zu beschäftigen, wenn du eine effizeint funktionierende Datenbankanwendung erstellen willst.

HTH (ein wenig)

wombl

hi,

danke für die Ausführlich erklärung :)

Bin ja kein lernverweigerer, sitze nun im Büro und hab JETZT einfach keine Zeit um mir die Seiten ausführlich anzusehen. Habe nur mal einen kurzen Blick drauf geworfen (mein chef schaut schon böse).

Werde aber, und das ist fix. die Seiten genau Studieren um meine Accesskenntnisse zu verbessern.

Bin jetzt in den letzten 3 Monaten, seit ich an dieser Datenbank arbeite echt auf den Geschmack gekommen und es macht mir wirklich Spass.

So nun aber trotzdem zu meinem Problem für das ich immer noch eine Lösung brauche!

Nochmal zur erklärung der IST zustand (werde ich dann sicher ändern aber so is es nun mal im moment!)

JEDE der Tabellen hat ein Feld mit dem Namen FIRMA dort stehen JETZT alle firmen die in der DB gespeichert sind drinnen (jetzt eben 9Tabellen mit jeweils ALLEN Firmen)

Zwar erkenne ich nun den Sinn der zusammenlegung, aber das kann ich nunmal nicht JETZT machen.

Solange ich KEINE neuen Firmen eingebe funktioniet alles toll. die einzelnen Formulare werden automatisch mir der richtigen Firma geöffnet.
Sobald ich aber am Hauptformular(Kontakte) eine neue Firma anlege, und dann für DIESE neue Firma eine Niederlassung oder einen weiteren Ansprechpartner anlegen will, und das gleichnamige Formular öffne ist das Feld Firma leer.
Das ist zwar logisch weil in der dazugehörigen Tabelle der eintrag der neuen firma ja fehlt, aber das muss sich doch irgendwie lösen lassen das der Wert des Feldes "Firma" von der Tabelle "Kontakte" in das Feld "Firma"von der Tabelle"Niederlassungen" übernommen wird. Sozusagen eineKopie der Daten in das Feld gemacht wird!

Wenn jetzt jemand eine Idee hat wie ich diese "Kopie" machen kann bitte bitte schreibt es mir hier her. ist wirklich wichtig für mich!

Lg
Werner der Access Azubi :)

database

#9
Hallo,
auch wenn der Chef böse schaut - selbst durch eine Exploion seinerseits wird eine Datenbank nicht funktionieren, wenn sie nicht ordnungsgemäß geplant und erstellt wird - also ist der Gesichtsausdruck eines Chefs kein Garant für die Funktionalität einer Datenbank - soviel von meiner Seite zum Thema Chef.

ZitatSobald ich aber am Hauptformular(Kontakte) eine neue Firma anlege, und dann für DIESE neue Firma eine Niederlassung oder einen weiteren Ansprechpartner anlegen will, und das gleichnamige Formular öffne ist das Feld Firma leer.
Wie du richtig bemerkt hast kommt das daher, dass die neue Firma noch nicht in der Tabelle steht - daher kann dein Formular auch keinen Bezug herstellen.
Was passiert denn, wenn du im Firmenformular nach der Eingabe des neuen Firmennamens mal einen Daensatz zurück und dann wieder nach vor scrollst, sodass die neue Firma wieder angezeigt wird und dann eine Ansprechperson erfasst?

Und ... freilich ist es möglich per VBA und SQL kreuz und quer in die Tabellen zu schreiben nur kann ich da keinen konkreten Vorschlag machen, da ich die Tabellennemen nicht kenne, die bei Firma XY dann zu beschreiben wären. Wobei ich darauf nochmals poche, dass das ein irrsinniger Pfusch ist!
Der Befehl würde in Etwa so lauten:

DoCmd.RunSQL ("INSERT INTO DeineTabelle (FeldfürFirma)VALUES('" & Me!FeldFirma & "')")


wombl

hallo,

danke das du dir trotz des von mir gemachten pfusches die zeit nimmst und mir hilfst.

Hoffe du verstehst meine fragen nicht flasch das ich nerven will, bin einfach neugierig und wenn mir jemand tipps gibt, dann frgae ich halt gerne nach warum und wehalb.

Bin wirklich nicht stur und werde sobald die DB läuft in meiner freizeit an einer besseren Version arbeiten!
Bin da mehr oder weniger wie die Jungfrau zum Kind gekommen.

Die Datenbank wird benötigt, und da ich die Original Datenbank erstellt habe (glaube mir das war noch mehr Pfusch hatte zur gänze alles mit Makros gemacht und ALLE DATEN in EINER Tabelle) hat mein Chef einfach gemeint ich soll auch die neue machen)

ZitatDoCmd.RunSQL ("INSERT INTO DeineTabelle (FeldfürFirma)VALUES('" & Me!FeldFirma & "')")


Wird also zu:
DoCmd.RunSQL ("INSERT INTO Weitere Ansprechpartner "Firma VALUES('" & Me!Firma & "')")

Weitere Ansprechpartner ist die Tabelle und Firma ist das Feld

würde das dann so stimmen?

und wenn ja, WO muss ich das hin? Nach der Aktualisierung des Feldes FIRMA in der Tabelle Kontakte klappt es nicht!
und beim Laden des Formulars Weitere Ansprechpartner auch nicht.

Ich hoffe ich nerve DIch nicht zu sehr, aber wie gesagt ich lerne erst und werd erst in den nächsten Tagen zeit finden mich intensiv mit der Materie zu beschäftigen, bis dahin bin ich leider von eurer Hilfe abhängig. Und da das wirklich das einzige Problem ist, das ich noch lösen muss, damit ich diese "Pfusch" DB fertig bekomme, wäre es echt wichtig für mich das fertig zu stellen!

LG
werner

database

Hallo,

ZitatNach der Aktualisierung des Feldes FIRMA in der Tabelle Kontakte klappt es nicht
Das glaube ich dir aufs Wort - die Syntax ist falsch!

DoCmd.RunSQL ("INSERT INTO [Weitere Ansprechpartner](Firma)VALUES('" & Me!Firma & "')")
Durch diesen Befehl wird ein neuer Datensatz in die Tabelle 'Weitere Ansprechpartner' geschrieben und ins Feld 'Firma' der Inhalt aus dem Formularfeld 'Firma' eingetragen.
Wobei aber immer noch nicht gewährleistet ist, dass die Firma auch in der Firmentabelle steht!
Diese kannst du aber so nicht in die Firmentabelle eintragen, weil das Formular, welches auf der Firmentabelle aufsetzt geöffnet ist.

Man vermeide Leerzeichen, Sonderzeichen, Umlaute und reservierte Wörter für Feld-, Variabelen- und / oder Objektbezueichungen!

wombl

Hallo,

Danke für die Hilfe und für den richtigen Code.

Es Funktioniert. :)

Werde gleich heute abend damit beginnen mich mit den von Dir vorhin angeführten Seitne zu beschäftigen und versuchen die Datenbank zur gänze NEU nach den dort beschriebenen Reglen zu erstellen.

Falls Interesse besteht, werde ich dann wenn ich den NEUEN entwurf fertig habe hier mal vorstellen damit ihr seht das ich sehr wohl ernfähig bin und nicht mit absicht so nen Pfusch gebaut habe :)

ganz liebe Grüße aus Wien

Werner

database

#13
Hallo,

ZitatEs Funktioniert
...hattest du was anderes erwartet?  ;)

ZitatFalls Interesse besteht
Naja das Interesse sollte bei dir bestehen - wir können uns dann deinen Entwicklungsstand gerne ansehen um Fehler bereits im Vorfeld auszuschließen.

Wenn deine Frage hiermit beantwortet ist bitte den Thread in DEINEM ersten Beitrag auf 'gelöst' setzen - DANKE!

Ebenfalls Grüße aus Wien