Hallo Forum,
ich habe ein Thema, bei dem ich Hilfe benötige:
Eine Tabelle "Artikel" besteht aus mehreren Feldern und 135000 Datensätzen.
Eine dazu verwendete Abfrage "BestellArtikel" besteht nur aus den beiden Feldern ETNR (Spalte2) und BEZ (Spalte5).
Das Formular "Kombimax" beinhaltet ein Kombinationsfeld. Dieses zeigt bei Eingabe von Zahlen die beiden Spalten der Abfrage "BestellArtikel" an. (siehe Screenshot)
Tabelle "Bestellung" besteht aus mehreren Feldern und wird vom Formular "Kombimax" befüllt
In "Bestellung" soll Feld1 = ETNR und Feld3 = BEZ gefüllt werden.
Da ein Kombifeld nur 2^16 Datensätze anzeigen kann, habe ich mir untestehende Code gebastelt - zeigt bis zu 10 Zeilen in Abhängigkeit der Eingabe:
---------------------------------------
Option Compare Database
Option Explicit
Private Sub ETNR_Change()
Dim lngGeladen As Long
Dim strSuche As String
Const cIntAnzahl As Integer = 10
Dim intPosStart As Integer
intPosStart = Me!ETNR.SelStart
If intPosStart > 0 Then
lngGeladen = cIntAnzahl
strSuche = Left(Me!ETNR.Text, intPosStart)
Me!ETNR.RowSource = "SELECT TOP " & lngGeladen & " * FROM BestellArtikel WHERE ETNR LIKE '" & strSuche & "*' ORDER BY ETNR"
lngGeladen = Me!ETNR.ListCount
Me!ETNR.Dropdown
End If
End Sub
---------------------------------------
Diese Zeilen erzeugen einen neuen Eintrag in "Bestellung" im Feld BEZ.
Private Sub ETNR_AfterUpdate()
Me.BEZ = Me.ETNR.Column(1)
End Sub
---------------------------------------
Aber es gelingt mir nicht die erzeugte Zeile in "Bestellung" aus ETNR und BEZ zu füllen.
Hallo,
135000 Artikel, sind die nicht in Gruppen eingeteilt bzw. einteilbar ?
Eigentlich wäre das sinnvoll gewesen.
Dann könnte man ganz einfach das Kombi über die Gruppen vorfiltern.
Und im übrigen sollte nur der Primärschlüssel übertragen werden, sonst keine Felder des Artikels. Die Bez. auch in die Bestelltabelle zu übernehmen ist überflüssig in die Bestelltabelle gehört nur die Zahl.
Hallo Klaus, danke für´s Zeit nehmen.
Die Tabelle Artikel wird mir von extern so gestellt und beinhaltet viele Felder für andere Abfragen. Der Sinn der oben genannte "Versuchstabellen" war, ein Problem in der tatsächlichen Anwendung zu lösen.:
Die Tabelle "Bestellung" wird normalerweise durch Eingaben in mehrere Kombifelder für die entsprechenden Tabellen-Felder befüllt. Dies funktioniert auch soweit. Nur das Feld ETNR wird auch aus einer anderen Abfrage (Verbrauch) ebenfalls befüllt. Wenn ich dann nach Öffnen des BESTELL Formulares die von Verbrauch erzeugten Zeilen ansehe, fehlen die Angaben für BEZ. Bei ETNR #1 bis zu #65535 funktioniert die Aktualisierung des Feldes BEZ durch z.B. klicken auf diese ETNR. Höhere ETNR können im Standardkombifeld nicht mehr gezeigt werden.
Bei klicken auf die normalen Kombifelder können nur die ersten 65535 möglichen ETNR angewählt werden. Daher experimentierte ich mit dem Kombimax Formular.
Hallo,
Du brauchst doch die Bez. nicht, wenn der entsprechende Fremdschlüssel gefüllt ist, hast Du über eine Abfrage auch automatisch die Bezeichnung.
Kannst Du mal ein Bild des Beziehungsfensters zeigen ?
Hallo Klaus, (ich bin übrigends Matthias),
untenstehend habe ich mal die Code der beiden Formulare gelistet. Das macht es evtl. leichter zu verstehen, was mein Begehr ist.
Das Resultat bzw. Problem ist im Screenshot2 zusehen.
Das Beziehungsbild ist ebenfalls beigefügt.
'Code im Formular Bestellung:
Option Compare Database
Option Explicit
Private Sub BEDAT_GotFocus() 'matt 30.04.17 - Bei Focus auf Bestelldat prüfen ob Bestellmenge >0
If IsNull(STÜCK) Or (STÜCK) < "1" Then
MsgBox "Bitte Bestellmenge eintragen"
Me.STÜCK.SetFocus
Else
End If
End Sub
Private Sub Befehl18_Click()
On Error GoTo Err_Befehl18_Click
DoCmd.Close
Exit_Befehl18_Click:
Exit Sub
Err_Befehl18_Click:
MsgBox err.Description
Resume Exit_Befehl18_Click
End Sub
Private Sub ETNR_AfterUpdate()
Me.BEZ = Me.ETNR.Column(1)
End Sub
Private Sub Form_Click()
SendKeys "^(')" 'matt 30.04.17 - setze 2 als Default-Liefercode
End Sub
Private Sub Form_Open(Cancel As Integer)
DoCmd.GoToRecord , , acNewRec 'matt 30.04.17 - gehe zu neuer Satz
ReSizeForm Me
End Sub
Private Sub Kombinationsfeld26_GotFocus()
SendKeys "^(')"
End Sub
Private Sub Kombinationsfeld28_GotFocus()
SendKeys "^(')"
End Sub
Private Sub HERSTELLER_AfterUpdate()
Me.ETNR = Me.HERSTELLER.Column(1)
Me.BEZ = Me.HERSTELLER.Column(2)
'Me.BEZ = BEN
End Sub
Private Sub STÜCK_AfterUpdate() 'matt 30.04.17
If IsNull(BEZ) Or (BEZ) < "1" Then
MsgBox "Bitte Benennung eintragen"
Me.BEZ.SetFocus
Else
End If
End Sub
'Code im Formnular Verbrauch:
Option Compare Database
Option Explicit
Private Sub ANLAGE_GotFocus()
If IsNull(ANLAGE) Then SendKeys "^(')"
End Sub
Private Sub Komponente_GotFocus()
If IsNull(Komponente) Then SendKeys "^(')"
End Sub
Private Sub DATUM_GotFocus()
If IsNull(DATUM) Then SendKeys "^(')"
End Sub
Private Sub Form_BeforeUpdate(Cancel As Integer)
If Me.NewRecord = True Then
Me!ErfDat = Date
Me!USER = Forms![aktUser].[USER]
Else
Me!AendDat = Date
Me!USER = Forms![aktUser].[USER]
End If
End Sub
Private Sub Form_Open(Cancel As Integer)
ReSizeForm Me
DoCmd.RunMacro "Makro1"
End Sub
Private Sub KOMP_GotFocus()
If IsNull(KOMP) Then SendKeys "^(')"
End Sub
Private Sub LAGERNR_GotFocus()
If IsNull(LAGERNR) Then SendKeys "^(')"
End Sub
Private Sub STÜCK_AfterUpdate()
If [BSTAND] - [STÜCK] < 0 Then
MsgBox "Der Verbrauch ist höher als der Bestand, bitte prüfen !"
Else
End If
End Sub
' mfG Matt
Guten Abend Klaus,
ich habe mein Problem gelöst - es lag in der Struktur weiterer Abfragen - aber nicht ohne zugeben zu müssen, daß mir die Blogs im Forum erheblich weiter geholfen hatten.
Danke dafür
MfG Matt