Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Jakobus am März 21, 2011, 08:47:08

Titel: Recordset
Beitrag von: Jakobus am März 21, 2011, 08:47:08
Hallo,
mit meinem Nummerierungsproblem bin ich leider noch nicht viel weitergekommen >:(, habe anhand von Literatur und Internetrecherchen doch mal einen Lösungsweg gefunden.
Meine beiden Tabellen lauten tbl_Regale (Regal_ID, RegalNr, Fachzahl) und tbl_Faecher (Fach_ID, FachNr, Fachbezeichnung)
Über ein Formular frm_Regale_Anlegen gebe ich die Nummer des Regals und dessen Fachzahl ein. Per Recordset möchte ich dann diese beiden Angaben in eine temporäre Tabelle tbl_Regale_tmp übergeben und  entsprechend der Fachzahl die entsprechende Anzahl Datensätze in tbl_Faecher generieren.
Bspl. wenn ich die Regalnummer 3 und dessen Fachzahl 4 eingebe, möchte ich in tbl_Fächer 4 Datensätze erzeugen mit der Nummerierung FachNr 1 bis 4.

Zwischenzeitlich habe ich einen Code zusammen gepfrimelt, der zwar alles beinhaltet und auch keine Fehlermeldung ergibt, es tut sich jedoch nichts:


Option Compare Database
Private Sub Form_Load()
Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim s As String
   
    Set cnn = CurrentProject.Connection
   
End Sub


Private Sub Fachzahl_AfterUpdate()
Dim anzahl As Variant
anzahl = Me!Fachzahl
DoCmd.Close
   
Regalnummer = Me!RegalNr
Fachzahl = Me!Fachzahl
   
'Löschen aller Datensätze in der temporären Tabelle
Set rst = New ADODB.Recordset
    s = "delete * from tbl_Regale_tmp"
    DoCmd.RunSQL s

   
'Recordset öffnen
   
    rst.Open "tbl_Regale", cnn, adOpenKeyset, adLockOptimistic



With rst

       
        For Z = 1 To anzahl

'Anzahl der Fächer (Fachzahl) als Zähler
'Datensatz mit der höchsten Regal_ID (zuletzt eingegebener Datensatz) in temporäre Tabelle schreiben
       
        s = "insert into tbl_Regale_tmp select RegalNr,Fachzahl from tbl_Regale Where tbl_Regale.Regal_ID In (select max(Regal_ID) from tbl_Regale Group by Regal_ID))"
        DoCmd.RunSQL s
        Next Z
'Schleife zum Durchzählen der temporären Tabelle
'Erzeugen der Fachnummer in Form einer fortlaufenden Nummerierung bis EOF (alle Datensätze erledigt)
       
        rst.Open "tbl_Regale_tmp", Connect, adOpenKeyset, adLockOptimistic
        'Verbinden
       
        FachNr = Fachzahl
        With rst
        rst.MoveFirst
    'zum ersten Datensatz navigieren
   
        While Not rst.EOF
'Schleife bis EOF

            Fachzahl = Fachzahl + 1
'FachNr um eins erhöhen
            rst("Fachzahl") = Fachzahl
            rst.Update
            rst.MoveNext
        Wend
End With
'Anzahl Datensätze entsprechend der Fachzahl in tbl_Faecher schreiben

        s = "insert into [tbl_Faecher] select * from [tbl_Regale_tmp]"
        DoCmd.RunSQL s

    'neue Anzahl übergeben
   
    Forms!frm_Regale_Anlegen![FachNr] = Fachzahl + anzahl
    DoCmd.Close
    Dim stDocName As String
    Dim stLinkCriteria As String
    stDocName = "frm_Regale_anlegen"
    DoCmd.OpenForm stDocName, , , stLinkCriteria
    Forms("[frm_Regale_anlegen]").Recordset.FindFirst "[RegalNr] = Regalnummer"
   
   
   
    rst.Close
    Set rst = Nothing
   
    Set cnn = Nothing

End Sub

Kann mir wer dabei helfen, diesen Code zum Laufen zu bringen ?

Wäre sehr dankbar dafür

Grüsse
Jakobus
Titel: Re: Recordset
Beitrag von: MzKlMu am März 21, 2011, 08:51:46
Hallo,
kannst Du mir mal verraten, wozu Du bei 4 Fächern auch 4 Datensätze brauchst?
Was soll denn in diesen 4 Fachdatensätzen erfasst werden?
Titel: Re: Recordset
Beitrag von: Jakobus am März 21, 2011, 08:58:08
kannst Du mir mal verraten, wozu Du bei 4 Fächern auch 4 Datensätze brauchst?
Was soll denn in diesen 4 Fachdatensätzen erfasst werden?


Mit dem gleichen Programmablauf möchte ich später jedem Fach eine bestimmte Anzahl Lagerplätze zuordnen, denen dann wieder Artikel zugeordnet werden sollen.
PS: hab vergessen, das Ganze mache ich in Access2003
Titel: Re: Recordset
Beitrag von: MzKlMu am März 21, 2011, 09:16:51
Hallo,
ich halte das Vorhaben für schlicht und ergreifend überflüssig bzw. falsch.

Du brauchst sonst nichts wie eine Zwischentabelle in der jedem Artikel ein Lagerplatz zugeordnet wird.
Aber nicht so wie Du das vorhast, sondern etwa so
Artikel xy, liegt in Regal 3 im Fach 2

Also nicht erfassen, was im Regal 3 in Fach 2 liegt, sondern erfassen wo der Artikel liegt.
Das Anlegen von entsprechenden Datensätzen ist somit Überflüssig.
Titel: Re: Recordset
Beitrag von: Jakobus am März 21, 2011, 09:32:25
Momentan kann noch gar nicht gesagt werden, wohin jeder Artikel kommt. Vielmehr werden in bestimmten Räumen Regale mit unterschiedlicher Anzahl Fachböden aufgestellt, die erst später befüllt werden.

Das gleiche Problem ergibt sich auch in anderer Hinsicht - stell Dir vor, es treffen jeden Tag Pakete ein, in denen jeweils eine unterschiedliche Anzahl Päckchen drin sind. Mit jedem Päckchen muss etwas geschehen und jedes Geschehnis muss später eindeutig dem Paketeingang (Datum, PaketNr) zugeordnet werden können.
Ich hab im Web hierfür eine Lösung gefunden, doch leider läuft die bei mir nicht (http://www.techonthenet.com/access/modules/sequential_nbr4.php).

Gruss
Titel: Re: Recordset
Beitrag von: MzKlMu am März 21, 2011, 09:44:09
Hallo,
ZitatMit jedem Päckchen muss etwas geschehen und jedes Geschehnis muss später eindeutig dem Paketeingang (Datum, PaketNr) zugeordnet werden können.
Und wo siehst Du da ein Problem? In einer Tabelle (z.B. tblWareneingang) erfasst Du folgende Felder:

tblWareneingangPaketNummer
Eingangsdatum
Regal
Fach

Und schon hast Du eine komplette Dokumentation, wann das pakket gekommen ist und wohin es geräumt wurde.

Ich bin nach wie vor der Auffassung, dass Du das viel zu kompliziert machst.
Titel: Re: Recordset
Beitrag von: Jakobus am März 21, 2011, 10:11:41
Prinzipiell geb ich Dir recht - die Erfahrung hat aber gezeigt, dass ...

Stell dir vor ich packe das Paket Nr. 1 vom 20.3.2011 ins Fach 3 /Regal 4 - am 23.3.2011 wird das Paket dort entnommen, geöffnet und enthalten sind 4 Päckchen, die dann separat bearbeitet werden müssen. Mein Paket 2001-001 existiert nicht mehr, dafür habe ich 4 Päckchen 2011001.1 bis 2011001.4.

Klar ist, wenn das Paket sofort geöffnet wird und 4 Päckchen zum Vorschein kommen, dass ich diese mittels Autowert eindeutig in einer Tabelle bezeichnen kann.


Kannst Du mir sagen, was in meinem Codeschnipsel falsch ist bzw. weshalb mein Code nicht funktioniert ? Es muss doch möglich sein, anhand einer Zählschleife die entsprechenden Datensätze zu erzeugen.

Gruss
Jakobus
Titel: Re: Recordset
Beitrag von: MzKlMu am März 21, 2011, 10:35:43
Hallo,
ZitatMein Paket 2001-001 existiert nicht mehr, dafür habe ich 4 Päckchen 2011001.1 bis 2011001.4.
Dann brauchst Du im Sinne einer normalisierten Datenbak eine weitere Tabelle zur Aufteilung der Pakete in einzelne Teile.
Dort wiederum wird Regal und Fach und Regal gespeichert. Die für das Paket ursprünglich erfassten Regal und Fachnummern werden dann gelöscht.
Ich versuche Dich immer noch zu einer normalisierten Tabellenstruktur zu bekehren.
Titel: Re: Recordset
Beitrag von: Jakobus am März 21, 2011, 10:46:36
 :)ch versuche Dich immer noch zu einer normalisierten Tabellenstruktur zu bekehren.

Habe ich vollstes Verständnis dafür, meine anderen Tabellen bzw. Eingabeformulare sehen nicht vor, jedes mal neue Datensätze in "Folgetabellen" zu generieren - aber in diesem einen Fall brauch ich es. Ausserdem möchte ich die Funktion des recordsets kapieren und möchte wissen, was ich bei meiner Codeschreiberei falsch gemacht habe.

Gruss