So nach mehr als einem Jahr darf ich wieder an die Datenbank.
Ich habe die Tabellen neu erstellt und Beziehungen erstellt, das hat auch soweit alles geklappt hoffe ich.
(Sind noch überflüssige Daten in den Tabellen werden aber später bereinigt)
Ich arbeite jetzt an einem Formular, das mir über mehrere Kombifelder Auswahlmöglichkeiten bietet mit denen ich eine interne Teilenummer erstelle.
Die Teilenummer wird in einem Textfeld angezeigt und baut sich Schritt für Schritt auf bestehend aus 4 Teilen.
Die Teile 1-3 klappen gut, weil die ersten beiden sind Einzeltabellen und die dritte kommt aus der tblAllParts.
Jetzt ist es möglich, weil die Benennungen in tblAllParts/G_Item gleich sein können (zB Fanggitter 4x) aber in tblAllParts/SG_Item noch Unterkategorien auffweisen können (zB Schwedengitter, Schräggitter....), das der dritte Teil der Nummer übernommen wird(funktioniert auch schon :D ). Nun sollen im letzen Kombifeld alle auftauchen, die im G_Item "Fanggitter" haben. Das bekomme ich nicht hin trotz suche durch viele Foren und Versuche mit unterschiedlichen Lösungsansätzen.
Im letzen Kombifeld wird nichts angezeigt wenn ich auf die DropDownListe gehe oder etwas eingebe.
mein letzer momentaner Versuch ist dies
SELECT [tblAllParts].[ITS_InterneNummer], [tblAllParts].[SG_Item_German] FROM tblAllParts WHERE [SG_Item_German] = Forms!frm_Neuteil_anlegen!cbo_frm_Neuteil_anlegen_G_Item;
unter Datensatzherkunft im letzen Kombifeld.
Bitte wo kann hier der Fehler sein, ist bestimmt nur ne Kleinigkeit die ich übersehe seit Gestern Mittag :'(
Ich hoffe Beschreibung ist verständlich.
Mfg
Cord
Hallo,
die Kleinigkeit, die fehlt, ist der Screenshot des Beziehungsfensters.
Wenn nichts angezeigt wird, dann gibt es vermutlich keinen Wert in "SG_Item_German", der dem in "cbo_frm_Neuteil_anlegen_G_Item" entspricht.
Oder das Kombi hat falsche/unpassende Einstellungen.
Tipp:
Kopiere den SQL-String und füge ihn in die SQL-Ansicht des Abfrageentwurfs ein. (Oder klick in im Formularentwurf auf die Pünktchen bei "Datensatzherkunft" des betreffenden Kombis.
Dann kannst Du an der Abfrage herumspielen...
Hallo
habe mit dem Generator rumgespielt aber nix geht leider.
Wenn ich nur die tblAllParts als Quelle hinterlege wird alles angezeigt, das heisst für mich die Tabelle ist richtig ausgewählt aber die Spezifizierung über das cbo_frm_Neuteil_anlegen_G_Item funktioniert nicht. Das Feld gibt aber das aus was in G_Item sein soll.
Vielleicht liegts ja an den Einstellungen des Feldes ich hänge die auch mit den Beziehungen als Screenshot an.
In Ereignis ist nichts enthalten.
Cord
Hallo,
sehe ad hoc keine Problemstelle.
Kann nur wie schon gesagt vermuten: Den Wert in Spalte 0 von "cbo_frm_Neuteil_anlegen_G_Item" gibt es in "tblAllParts.SG_Item_German" nicht..
Habe die Spalte auf 1 gewechselt war natürlich falsch ist ja die interne Nummer und den Code angepasst nach dem WHERE
SELECT [tblAllParts].[ITS_InterneNummer], [tblAllParts].[SG_Item_German] FROM tblAllParts WHERE [G_Item_German] = Forms!frm_Neuteil_anlegen!cbo_frm_Neuteil_anlegen_G_Item;
Ergebnis ist aber immer noch das gleiche :(
Cord
Ps kann ich dir die Datenbank zukommen lassen ?
Wenn ich zuviele Daten lösche kann das sonst ja nicht funktionieren
Hallo,
Du kannst ja soweit reduzieren, dass nur ein paar DS in der All-Tabelle enthalten sind. Das reicht vermutlich. Db reparieren/komprimieren, zippen und hier hochladen.
Hab einen Großteil gelöscht und hochgeladen.
Ich hoffe das hilft.
Cord
Hallo,
ZitatPrivate Sub cbo_frm_Neuteil_anlegen_G_Item_AfterUpdate()
strGit1 = Me!cbo_frm_Neuteil_anlegen_G_Item.Column(1)
strGit = Mid(strGit1, 7, 3)
Me!txt_frm_Neuteil_anlegen_Nummer = (strWsop) & "-" & (strMgr) & "-" & (strGit)
Me!cbo_frm_Neuteil_anlegen_SG_Item.Requery
End Sub
ZitatSELECT [tblAllParts].[G_ITEM_German], [tblAllParts].[ITS_InterneNummer] FROM tblAllParts ORDER BY G_ITEM_German;
Hallo
ZitatPrivate Sub cbo_frm_Neuteil_anlegen_G_Item_AfterUpdate()
strGit1 = Me!cbo_frm_Neuteil_anlegen_G_Item.Column(1)
strGit = Mid(strGit1, 7, 3)
Me!txt_frm_Neuteil_anlegen_Nummer = (strWsop) & "-" & (strMgr) & "-" & (strGit)
Me!cbo_frm_Neuteil_anlegen_SG_Item.Requery
End Sub
wenn ich das so ändere schreibt er mir in die Nummer statt der Zahlen einen Teil der Benennung rein, weil er dann ja im ersten cbo die falsche Spalte hat.
Aber das sagt mir, das ich nicht das Ergebnis des cbo nehmen kann, weil das mit der Prodezur nach Update ausgetauscht wird(ist also nicht mehr G_Item_German sondern zB 019 oder in diesem Fall bsa)
Dann wird das wohl kaum so gehen wie ich mir das vorstelle, dadurch das ich die dritte Stelle der internen Nummer damit fülle.
Cord
Hallo,
es geht schon, nur nicht mit der Verwendung der Formularreferenz.
entweder Du schreibst eine Public-Funktion, die den Wert aus der erforderlichen Spalte ausliest und im SQL-String (anstelle der Form-Referenz) zurückgibt oder Du setzt die Rowsource des Kombis gleich mit einem per VBA zusammengesetzten SQL-String.
Insgesamt dürfte die Ursache (wie bei den 99 % der hier geposteten Probleme) an der fehlenden Normalisierung der Tabelle(n) liegen.
Ok das Auslesen habe mit einer Public gemacht und den Wert strGit2 sehe ich im Direktbereich zeigt auch das richtige an.
Private Sub cbo_frm_Neuteil_anlegen_SG_Item_Enter()
strGit2 = Me.cbo_frm_Neuteil_anlegen_G_Item.Column(1)
Debug.Print cbo_frm_Neuteil_anlegen_G_Item.Column(1, strGit2)
End Sub
in der SQL habe ich statt allem vorher jetzt strGit2 eingetragen, aber immer noch keine Anzeige
SELECT tblAllParts.SG_ITEM_German, tblAllParts.ITS_InterneNummer FROM tblAllParts WHERE (((tblAllParts.[G_Item_German])=[strGit2])) ORDER BY tblAllParts.[G_Item_German];
den SQLString habe ich über den Abfragegenerator nochmal neu erstellt um Schreibfehler auszuschliessen
SELECT tblAllParts.SG_ITEM_German, tblAllParts.G_ITEM_German, tblAllParts.ITS_InterneNummer FROM tblAllParts WHERE (((tblAllParts.G_ITEM_German)=[strGit2]));
Leider keine Änderung.
Cord
Hallo,
Du solltest genauer lesen:
Zitateine Public-Funktion, die den Wert aus der erforderlichen Spalte ausliest und im SQL-String (anstelle der Form-Referenz) zurückgibt
Heißt, dass die
Funktion im SQL-String
aufgerufen werden muss, die den Wert liefert, nicht das Einsetzen einer String-Variablen.
Zudem schreibst Du
keine Public-Function-...
Hallo Franz hat etwas gedauert,
da ich anderweitig eingebunden war.
Hast natürlich recht lesen hilft :)
Ich habe das abgeändert
Public Function Get_strGit2(strGit2 As String)
strGit2 = Me.cbo_frm_Neuteil_anlegen_G_Item.Column(1)
Debug.Print cbo_frm_Neuteil_anlegen_G_Item.Column(1, strGit2)
'Me!cbo_frm_Neuteil_anlegen_SG_Item.Reload
End Function
Namen der Funktion musste ich natürlich auch ändern, weil sonst eine Fehlermeldung kam.
Was ich nicht hinbekomme ist das Aufrufen der Funktion über SQL um das in die Abfrage einzufügen.
Ich habe schon gesucht aber nichts gefunden.
Muss ich das in ein eigenes Modul einfügen oder kann ich das direkt aufrufen irgenwie ?
Danke
Cord
Ps ich hoffe nicht wieder was übersehen zu haben
Hallo,
richtig ist es noch nicht... ;)
Public Function Get_strGit2()
Get_strGit2 =Forms!MeinFormname!cbo_frm_Neuteil_anlegen_G_Item.Column(1)
End Function
SELECT SG_ITEM_German,G_ITEM_German, ITS_InterneNummer FROM tblAllParts WHERE G_ITEM_German= Get_strGit2 ()
Aber wie gesagt, sowas ist nicht das Gelbe vom Ei...
Bekomme die Fehlermeldung aus dem Bild wenn ich das so eingebe.
Muss ich da nicht noch ein DIM einbringen ? Hatte das schon unter OptionExplicit aber keine Änderung.
WHERE G_ITEM_German= Get_strGit2 ()
hätte auch gedacht, das das starten komplizierter ist, aber hier scheint ja noch was zu fehlen in den Klammern ?
Cord
Hallo,
vermutlich hat die Public-Funktion noch ein Argument zwischen den Klammern. Entferne dies. (Lies nochmal meinen zuletzt geposteten Code..)
Ok lesen(in den Fehlermeldungen) = lösen
letzter Fehler durch Dopplung passiert.
Asche auf mein Haupt.
Richtige Lösung ist und bleibt was Franz geschrieben hat.
Danke für deine Hilfe nicht nur für die Lösung sondern auch das du mich lernen läßt.
Cord