Neuigkeiten:

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

Mobiles Hauptmenü

access2010 tabelle mit Kombinationsfeld für große Datenmenge füllen

Begonnen von Raffnix2013, Mai 04, 2017, 21:58:22

⏪ vorheriges - nächstes ⏩

Raffnix2013


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.


MzKlMu

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.
Gruß Klaus

Raffnix2013

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.

MzKlMu

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 ?
Gruß Klaus

Raffnix2013

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


Raffnix2013

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