PDA

Vollständige Version anzeigen : Probleme zwischen Abfragen & Beziehungen, glaub ich - Need Help


agmesia
24.01.2008, 14:40
tachchen, nun bin ich auch mal wieder dran.

Ich habe versucht was ich konnte und ich komme net drauf, daher auch die db als anhang, so kleins wies nur ging.

Problem:

Ich habe eine übersicht (öffnet sich gleich automatisch), in der ich Kundenbesuche verwalte.
Je nachdem welche Firma ich Links auswähle, bekomme ich rechts die daten, sogar was besuchte Gesprächspartner angeht, alles super.
wenn ich nun aber, eine person ein zweites mal besuche, so wird dieser auch ein weiteres mal angelegt. was man im Adressbuch sehr schön erkennen kann.

Ich habe gerade dedoctort wie ein irrer, aber ich komm einfach net auf die lösung.

Alleine weil er mir immer sagt das die tabelle tbl_KundenPersonal mit dem derzeitigen datensatz in beziehung stehen soll, nachdem was ich gesehen habe stehen die in einer beziehung. Das ist aber halt ein Fehler beim Rumprobieren gewesen und kommt in dieser Version nicht vor.

Ziel ist:
Jede Gesprächsperson wird nur einmal angelegt (über Dropdown mit "Nur in Liste = nein)
Je nach auswahl der Firma sind auch nur die Personen in dem Dropdown zu sehen, welche zur Firma gehören(klappt im moment, aber später???)

Bitte hilf mir da einer, sonst werd ich noch kirre.

PS: tbl_Maschinentyp & tbl_Maschinenkategorie sind unbenutzt

Anne Berg
24.01.2008, 15:27
Jede Gesprächsperson wird nur einmal angelegt (über Dropdown mit "Nur in Liste = nein)Wenn du das unter Kontrolle haben willst, musst du JA wählen und das NotInList-Ereignis nutzen.
Beispiel findest du in der Access-Hilfe.

agmesia
24.01.2008, 15:38
habs gerade getestet, beläuft sich auf das selbe ergebnis
Private Sub Kombi_Nachname_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl_Kundenpersonal", dbOpenDynaset)

rs.AddNew
rs!Nachname = NewData
rs.Update

rs.Close: Set rs = Nothing
Set db = Nothing
End Sub

ändert nix daran das wenn ich bei einem neuen gespräch "Gale" auswähle, das sie dann auch ein weiteres mal eingepflegt wird, obwohl ich doch die gleich "Gale" wie aus dem ersten gespräch meine.

Anne Berg
24.01.2008, 15:47
Dann stimmt wohl etwas nicht mit der Datenherkunft des Kombifeldes.

agmesia
24.01.2008, 15:53
das kann gut sein, das kombifeld kommt aus einer abfrage, da ich ja nur die anzeigen will die auch zu der firma gehören, wenn ich herkunft nun auf die tabelle lege, würde es vieleicht gehen, doch wüsst ich nicht wie ich dann nur die anzeigen lasse, die auch zu der firma gehören.

kann es nunmal nicht brauchen das nach 1 jahr 7000 einträge in einem dropdown stehen.

(Jeder außendienstmitarbeiter hat ca 2500-3000 Firmen, und bei jeder firma ca 3 ansprechpartner, daher die sorge.)

Anne Berg
24.01.2008, 15:59
Dann musst du halt ein wenig mehr Aufwand mit dem Anfügen eines neuen Namens betreiben und nicht einfach blindlinks einfügen bei NotInList.

agmesia
24.01.2008, 16:06
du sagst ein bischen mehr aufwand, ich bin ja schon am rätseln wie ein irrer, udn ich bin immernoch dabei, auch wenn hier eine frage von mir steht.

Ich warte hier ja net auf eine komplettlösung, hoffe halt nur das mir ma einer sagen könnte, wo ich vieleicht was falsch mache, oder was ich möglicherweise ändern muss.

ich weis das die tabellen genau so sind wie ich sie haben möchte,
an sich klappt alles, bis auf das eine Problem, was ich einfach net gebacken kriege.
Und das mit dem blindlinks möchte ich mir verbieten, immerhin bin ich davon ausgegangen das er nur dann angefügt wird, wenn er nicht in der liste ist, was aber doch der fall ist.
versuche gerade schon auf das "personen nur vom kunden" zu verzichten und das kombifeld mit den daten der tbl_KundenPersonal zu füllen, und das so immerhin ans laufen zu bringen, aber auch da schreitere ich kläglich.

CptChaos
24.01.2008, 16:27
Ich glaub ich hab das Problem noch nicht ganz erfasst.
Wenn ich heute ein Gespräch mit Ansprechpartner A und B habe und morgen eins mit A dann habe ich selbstverständlich und korrekterweise den Ansprechpartner A 2x in der Liste der Gespräche stehen.

Bzgl. der Auswahl des Namens der Ansprechpartner würde ich als Datenherkunft nicht die Abfrage verwenden, die auch für die Berichte verwendet wird sondern eine seperate Abfrage die mir nur die Ansprechpartner zurückliefert.

Diese sollten an sich auch in einer eigenen Tabelle mit der zugehörigen FirmenID (die fehlt momentan in tbl_KundenPersonal) stehen.
In der Berichtstabelle steht dann nur die AnsprechpartnerID

agmesia
24.01.2008, 16:42
das mit 2x der gesprächspartner in der berichtsliste soll ja auch, also das hab ich nie bestritten, was mich ganz simpel stört ist halt

2 Gespräche mit 1 und der selben person = 2 Einträge in tbl_Kundenpersonal

CptChaos
24.01.2008, 16:47
Das liegt aber an der falschen/unvollständigen Struktur der Tabellen und/bzw. an der Datenherkunft des Kombifelds (s. Anne´s Post #4 und mein Post #8).

gpswanderer
24.01.2008, 17:34
Hallo,
nach meiner Auffassung gehört die Kundenpersonaltabelle an die Kunden gehängt. In dieser Tabelle wird noch ein Schlüsselfeld zur KundenID gebraucht. Ein Kunde viele Namen = 1:n. Auf eine Beziehung zwischen Kundenpersonal und Berichtsdaten würde ich ganz verzichten und die Kundenpersonal_ID per Kombi auswählen. In diesem Kombi die Datenherkunft einschränken, dass nur die Namen zum entsprechenden Kunden angezeigt werden.

Warum eigentlich 2 Tabellen für Firma und Kunde?

agmesia
25.01.2008, 07:08
guten morgen

danke fuer eure antworten, arbeite halt nur von 8-17 uhr, und gestern ne überstunde, daher keine antwort mehr.

ich werde mal versuchen die beziehungen anders zu setz, ich geb feedback wenn ich ne lösung gefunden habe

MfG Aggi

agmesia
25.01.2008, 11:04
so mal wieder was von mir:

Ich meine ich bin fast am ziel, nur schläg das "NichtInListe" event nicht wirklich an.
Das problem ist, er lässt mich ins kombifeld was schreiben, sagt mir dann "dein geschreibsel ist net in der liste du depp":rolleyes:
und sagt mir ich soll was aus der liste auswählen, ABER er schreibt es trotzdem in die tabelle tbl_KundenPersonal
dazu kommt das problem, das er das hinzugefügte net so richtig der firma zuordnet mit der id, was warscheinlich daran liegt das die ID dabei net gesetzt wird.
wenn ich z.B. erst eine Anrede bei einem neuen gespräch wähle, wird diese andrede auch entsprechend zugeordnet, aber net das vom kombi, das kommt dank der Sub, dahinter wieder in ein neuen eintrag dessen ID net zugeordnet wird, wäre dankbar wenn man kurz guck, mich auslacht, und mir dann hilft.

Hab die DB so wie ich sie zurechtgebastelt habe, im anhang, dabei hab ich das adressbuch erstmal vernachlässigt, geht nur um das erste formular, das dort alles passt. Das Kombifeld ist nun von einer abfrage abhängig qry_FirmenPersonalFilter
fragt mich net warum auf einerm FirmenPersonal, habs einfach geschrieben^^

PS: Das mit dem auslachen ist ok, bin n harter junge :mrcool:

CptChaos
25.01.2008, 11:57
Das Kombifeld holt sich immer noch die Daten abhängig von derBerichtstabelle.
Das war, ist und bleibt falsch.

Du benötigst eine Tabelle aus der die KundenID und die Ansprechpartner des Kunden.

agmesia
25.01.2008, 12:04
wie kann ich das denn am besten machen?

hab immer im kopf das wenn ich das an die kunden tabelle koppel, dass ich dann bei 3 kunden auch nur 3 einträge habe wo die kundenpersonalid drinstehen kann.

wäre ja ungefähr so(nur als beispiel was ich im Kopf habe):

ID_Kunde:::Firma_ID:::KundenPersonal_ID
----1----:::---1---:::---1---

was in meinem köpfchen zur folge hätte, das ich bei drei ansprechpartnern, 3 einträge von der selben firma hätte.

ich find es gut das du mir sagst was ich falsch habe, könntest du aber vieleicht sagen warum das anders besser wäre. sonst hab ich keine ahnung warum und wie ich das ändern muss.

stehe da gerade wirklich aufm schlauch, tut mir leid:(

CptChaos
25.01.2008, 12:29
Beispielhaftes Konstrukt einer Kundenverwaltung wie ich sie anlegen würde:

tblFirmen
FiID, FiName, FiOrt, FiAdresse, ...

tblAnsprechpartner
APID, FiID (Fremdschlüssel aus tblFirmen!), APName, APTelefonnummer, ...

tblKontakte
KoID, KoAPID (Fremdschlüssel aus tblAnsprechpartner), KoDatum, KoThema, ...

Im Formular gibt es dann ein Kombinationsfeld das sich die Daten aus tblAnsprechpartner in Abhängigkeit der angezeigten Firma ausliest.
Im Not_In_List-Ereignis wird ein Formular zur Erfassung des neuen Ansprechpartners geöffnet (FiID wird vorbelegt aus dem Hauptform).
Nach der erfolgreichen Anlage wird das Kombinationsfeld per Me!Kombifeld.Requery aktualisert und der soeben angelegte Ansprechpartner (APID kann z.B. in einer (globalen) Variablen gespeichert werden) angezeigt.

In den Kontakten wird nur der Ansprechpartner über die ID erfasst.
Durch die Abhängigkeiten kann ich dann z.B. in einer Abfrage oder einem Bericht die Firmendaten dazu holen.

Klar soweit?

agmesia
28.01.2008, 07:52
guten morgen,

ich hab meine tabelle nun komplett umgemodelt, sieht gut aus und läuft auch gut, bis auf ein kleines problem was ich noch habe.

ich wollt nochmal versuchen einen neuen kunden anzulegen bei "Nicht in Liste" vom kombifeld. Wenn ich da keine aussichten habe werde ich es mit einem formular machen, aber das ist mir erstmal net so wichtig, da man gleich am anfang des gespräches nicht nach geburtstag und telefonnummer fragen wird, daher finde ich es besser sowas später einzutragen, und nur fuer den nachnamen ein formular zu öffnen fänd ich etwas komisch, und würde mit sichérheit auch so aussehen.

also, wenn ich nun versuche ein neues gespräch zu erstellen, und mit dem:

Private Sub APNachname_NotInList(NewData As String, Response As Integer)
Response = acDataErrAdded

Dim db As DAO.Database
Dim rs As DAO.Recordset
Set db = CurrentDb
Set rs = db.OpenRecordset("tbl_Ansprechpartner", dbOpenDynaset)

rs.AddNew
rs!APNachname = NewData
rs.Update

rs.Close: Set rs = Nothing
Set db = Nothing
End Sub

arbeite, bekomme ich eine Fehlermeldung das ein neuer datensatz nicht angelegt werden kann, da eine Beziehung zur tbl_Firmen gefordert wird.
aber die stehen doch irgendwie in beziehung, oder was hab ich da wieder falsch? Screenshots von fehlermeldung und beziehungen hab ich hochgestellt.

MfG: Aggi

CptChaos
28.01.2008, 08:11
Wenn Du nur den Nachnamen (APNachname) erfasst, fehlt natürlich die APFirmen_ID und somit der Bezug zur Tabelle tbl_Firmen.

Zum Zeitpunkt der Anlage des APs müsstest Du also schon wissen welcher Firma der AP angehört und die entsprechende ID mit übergeben/anlegen.

agmesia
28.01.2008, 08:28
hmm, das ist komisch, ich hab ja nun mein feld "APFirmen_ID" aus der tabelle "tbl_Ansprechpartner"

wenn ich das auf dem unterformular einfüge, und dann im hauptformular die firma per kombifeld wechsle , wechselt auch dort die ID, da ich sie über das utnerformular miteinander verknüpft habe.

und selbst wenn ich es mit einer funktion versuche und in APFirmen_ID die ID reinschreibe, taucht der fehler weiterhin auf.

das mache ich dann so:
Private Sub neu_Click()
On Error GoTo Err_neu_Click
If Forms!frm_Kunden!ufrm_Berichtsdaten!APAnrede <> "" Or Forms!frm_Kunden!ufrm_Berichtsdaten!APNachname <> "" Then
Me!BDLetzter_Besuch = Date
Me!BDUhrzeit = Time
DoCmd.GoToRecord , , acNewRec
Me.APFirmen_ID = Forms!frm_Kunden!ID_Firmen
Else
MsgBox "Anrede und Name muss ausgefüllt sein"
End If
Me!lst_Berichtsliste.Requery
Exit_neu_Click:
Exit Sub
Err_neu_Click:
'MsgBox "Anrede und Name muss ausgefüllt sein"
MsgBox Err.Number & " " & Err.Description
Resume Exit_neu_Click
End Sub

der code an sich macht keinen fehler, hab wiedermal bildchen gemacht.

CptChaos
28.01.2008, 08:38
:confused:
Was ist aus der obigen Funktion geworden?
Die APFirmen_ID musst Du im NotInList-Ereignis mit anlegen.
rs.AddNew
rs!APNachname = NewData
rs!APFirmen_ID = Me!FeldXY
rs.Update

gpswanderer
28.01.2008, 08:46
Hallo,
ich bin nach wie vor der Meinung, dass die Beziehungen falsch sind. In die Berichtstabelle gehört ein Fremdschlüssel zur Firmentabelle, denn die Berichtsdaten sind ja bezogen auf die Firma. Als 1:n von Firma zu Bericht. Weiterhin muss es eine Beziehung geben (1:n) zwischen Firma und Firmenpesonal. Es gibt keine Beziehung zwischen Firmenpersonal und Berichtsdaten. Da Kombi für den Namen muss beim Aufklappen gefiltert werden mit der angezeigten Firmenid. Durch die Beziehung kriegt man dann nur Namen zur Auswahl die zur Firma passen. Wenn jetzt ein mit dem Ereiegnis "Nicht in Liste" ein neuer Namen hinzugefügt wird, muss in die Tabelle Bericht die ID des neuen Namens eingetragen werden und gleichzeitig die Firmenid in die Tabelle mit den Namen.

agmesia
28.01.2008, 08:47
ok, daran habe ich nun garnicht dedacht, aber nun kommt eine andere fehlermeldung.
tut mir leid wenn ich dich damit belaste, aber ich habs noch net so mit beziehungen, wundert mich auch das nun diese meldung kommt, da ich weis das die IDs vorhanden sind, und die beziehungen auch...

CptChaos
28.01.2008, 08:52
Von der Meldung her hast Du versucht einen Wert auf der n-Seite einzugeben, den es auf der 1-Seite nicht gibt.

Also eine FirmenID in die tbl_Ansprechpartner die in der tbl_Firmen nicht vorhanden ist.

agmesia
28.01.2008, 09:04
das hab ich mir gedacht, aber es gibt sie, habe nur ID_Firmen 1-3

und habe mir das feld ja auch extra anzeigen lassen, die ID von den firmen her stimmen.

ich frage mich nur gerade ob es an den BDAnsprechpartner_ID liegen kann, das ich beim eintragen in das kombifeld, versuche eine Ansprechpartner ID einzutragen, also eine neue, welche aber in der tbl_Berichtsdaten nirgends benutzt wird, könnt es daran liegen?
ich meine die Beziehungen stehen ja oben, würde es dort ein problem geben?

Habe nämich gesehen das in meine tbl_Ansprechpartner unvollständige einträge sind, dort steht dann aber auch APFirmen_ID | 1
also stimmt es was dort steht, sogar der nachname wurde eingetragen, aber sieht so aus als wäre keine zugehörigkeit zu den berichtsdaten da.

dazu mal ein auschnitt meiner abfrage fuers unterformular, und wie die beziehungen in der abfrage sind.

edit: Bei den beziehungen zwischen AP und BD habe ich normalerweise nicht den zweiten beziehungstyp "den pfeil" habe ich gerade nur zur verdeutlichung. An sich wird nur der erste datensatz auf dem ersten screenshot gezeigt und taucht in dem Listenfeld im formular auf

gpswanderer
28.01.2008, 09:53
Hallo,
anbei eine funktionierende Version. Ausgehend von Deiner Beispieldb.

agmesia
28.01.2008, 10:10
hehe, also wenn ich meinen ersten klick auf das listenfeld mache sagt er mir

"Das Microsoft Jet-Datenbankmodul erkennt 'ID_Berichtsdaten' nicht als gültigen Feldnamen oder -ausdruck."

und wenn ich ins adressbuch gucke sehe ich 4 einträge vom Ansprechpartner "Keimer" nichts fuer ungut, aber so hatte ich das nicht dedacht :D

anbei mal mein aktuell gemodeltes. vieleicht hilf das ja sogar weiter.

gpswanderer
28.01.2008, 10:23
Hallo,
ich kann sowohl in meiner als auch in Deinem letzten Beispiel keinen Fehler erkennen. Beide Versionen funktionieren doch wie gewünscht. Es erfolgen auch keine Doppeleinträge, ich kriege auch bei meiner Version keine Fehlermeldung. Das Du die Namen mehrfach siehst, hängt an der Abfrage für das Adressbuch, dort gehört die Tabelle mit den Berichtsdaten nicht rein.

und wenn ich ins adressbuch gucke sehe ich 4 einträge vom Ansprechpartner "Keimer" nichts fuer ungut, aber so hatte ich das nicht dedachtDas kommt nicht durch mich, sondern durch die falsche Abfrage für das Adressbuch.

PS:
Mäßige Dich in Deiner Ausdrucksweise, ich versuche gerade Dir bei Deinen Problemen zu helfen. Wenn Du meine Hilfe nicht willst, musst Du es nur sagen, ich habe keine Lust mich auch noch anmachen zu lassen.

agmesia
28.01.2008, 10:52
so war das nun wirklich nicht gemeint,

ich dachte halt das du auch was bei dem adressbuch gemacht hast, und dementsprechen dachte ich dann, da ich die einträge nicht gesehen habe wie ich es mir dachte, das du mich vieleicht falsch verstanden hättest.

und ich glaube das "Nichts fuer ungut" schon eine gemäßigte ausdrucksweise ist, da ich hier niemandem etwas will, und gerne hilfe entgegen nehme. Hoffe bist mir net böse wenn es vieleicht anders rüber kam.

zu den fehlern, ich weis auch net woran das liegt, und bei meiner version kann ich net in ruhe*...nochma nachschau und komisch guck*

öh ja....
vorhin hat er mir noch immer die fehlermeldung gegeben das da was anders muss, jetzt hab ich gerade nochmal geschaut, und das "NotInList" event macht wirklich keinen fehler?! wie kommt das denn nun aufmal?

ah doch!

wenn ich erst eine Anrede auswähle, wird warscheinlich ein neuer datensatz angefange, und wenn ich dann eine unbekannte person in dem kombifeld eintrage, damit das "NotInList" ansetzt, kommt wieder so ein beziehungsfehler, kannst mir vieleicht verraten wie ich das am besten bewerkstellige?

MfG Aggi

gpswanderer
28.01.2008, 11:35
Hallo Aggi,
Du siehst, was der eine als gemäßigt empfindet, ist für den andern ein Problem.
Aber ich will ja nicht übertreiben, bin vieleicht zu empfindlich.
Zum Problem:
Kann ich auf die schnelle auch nicht klären. Werde es mir ansehen, aber erst später (heute Abend). Muss jetzt erst mal weg.

CptChaos
28.01.2008, 12:26
Hab kurz mal in das Beispiel von Klaus reingeschaut.
Ich vermute das liegt an der Beziehung zur tbl_Berichtsdaten.

Soll die so überhaupt vorliegen bzw. was ist der Grund für diese Beziehung?

agmesia
28.01.2008, 12:35
bin mir über die beziehung selber nicht so ganz in klaren, in der DB von ihm.

Muss aber sagen, dass das wie es in meiner DB ist, schon gut gefällt, müsste halt nur noch das eine prob gelöst bekommen mit dem anrede, warscheinlich passiert das bei jedem anderen feld außer dem nachname kombinationsfeld auch.

CptChaos
28.01.2008, 13:03
Ob es (Dir) gefällt oder nicht ist erstmal nebensächlich.
Die Frage ist vielmehr ob die Beziehung so Sinn macht bzw. richtig ist.

Ich erstelle Dir mal eine BeispielDB, wie ich es mir vorstellen würde bzw. wie es m.E. richtig ist.

Nachtrag:
BeispielDB attached.

Ich würde hier dennoch zusätzlich ein seperates Form machen zur kompletten Pflege der Ansprechpartnerdaten.

agmesia
29.01.2008, 07:10
hmm. deine db funzt bei mir net, sagt mir was von Projekt oder Bibliothek net gefunden. Liegt bei den verweisen daran das Microsoft DAO 2.x / 3.x nicht vorhanden ist.

hab dann versuch dao 3.6 anzuschalten, aber dann sagt er mir das der in konflikt mit einem anderen verweis steht, obwohl ich den haken bei dem anderen DAO ausgemacht habe...

edit: ok, hab das dao an laufen bekommen, nu scheint es zu funzen, schau mir das ma an

agmesia
18.03.2008, 14:52
Es hat zwar gedauert bis ich mich wieder diesem Thema zuwende konnte, doch ich habe mein Problem nun gelöst, und es funktioniert wie ich mir das vorgestellt habe.

Ich bedanke mich herzlichst fuer die Hilfe!

Anbei meine Version!