larryfilou Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 Habe folgendes Programm geschrieben. ich möchte Acces dazu zu bringen, die Sätze der Tabelle "Storagetransaction" mit denen der Tabelle "Store Items" zu vergleichen, und nach gleichen Feldern "Storageposition" zu suchen. Findet er zwei glecihe Felder, soll der "Amount stored" von "Store items" in die Tabelle "Storagetransactions" übertragen werden. Aber ich bekomm nix als Compile Errors: Als erstes mag Access den "DAO.Recordset" nicht: "User defined type not defined" :eek Nehme ich das DAO raus, sagt er: "Loop ohne Do" :confused: Private Sub Lagerbestand_anpassen_Click() Dim tab1 As DAO.Recordset Dim tab2 As DAO.Recordset Set tab1 = CurrentDb.OpenRecordset("Storagetransaction") Set tab2 = CurrentDb.OpenRecordset("Store Items", Form) Do Until tab1.EOF tab1.Update Position = tab1!Storageposition Lager = tab2!Storageposition If Position = Lager Then tab1![Amount delivered] = tab2![Amount delivered] Else tab1.Update tab1.MoveNext Loop tab1.Close End Sub Kann mir jemand helfen? Zitieren
Amstelchen Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 Private Sub Lagerbestand_anpassen_Click() Dim tab1 As DAO.Recordset Dim tab2 As DAO.Recordset Set tab1 = CurrentDb.OpenRecordset("Storagetransaction") Set tab2 = CurrentDb.OpenRecordset("Store Items", Form) Do Until tab1.EOF tab1.Update [COLOR="red"]'wozu?[/COLOR] Position = tab1!Storageposition Lager = tab2!Storageposition If Position = Lager Then tab1![Amount delivered] = tab2![Amount delivered] Else tab1.Update tab1.MoveNext [COLOR="Red"]End If 'wo ist deins?[/COLOR] Loop tab1.Close [COLOR="red"]tab2.Close 'wo ist deins?[/COLOR] End Sub ausserdem gehst du genau einmal durch tab1, aber bleibst in tab2 immer beim ersten record stehen. ist das beabsichtigt? theorethisch kannst du das auch mit einem UPDATE mit JOIN machen. s'Amstel Zitieren
Der Kleine Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 Nehme ich das DAO raus, sagt er: "Loop ohne Do" :confused: Kann mir jemand helfen?if ... else ... es fehlt : End if! EDIT: zu langsam! Zitieren
larryfilou Geschrieben 23. Januar 2006 Autor Geschrieben 23. Januar 2006 Das mit dem .update ist ein Fehler, da soll eigentlich ".Edit" stehen, aber das akzeptiert er auch nicht... Das heisst, ich muss in die Schleife mit einbauen, dass er für jeden Satz des tab1 ALLE SÄtze tab2 durchläuft... Ja, macht Sinn. Das heisst, ich muss noch eine Schleife einschachteln, die ihn auffordert, die ganze tab2 zu kontrollieren, da die Storageposition eindeutig ist, kann es ja dann auch gar net zu Mehrfachergebnissen kommen, wie ich dachte, klar. Und er muss nur bis zu einem "true" Ergebniss durchlaufen, denn es kann ja nur eins geben. Auch klar. Super, da mach ich mich doch gleich mal dran... Thanx, I'll try and be back with results.. Zitieren
larryfilou Geschrieben 23. Januar 2006 Autor Geschrieben 23. Januar 2006 Aber: Warum das Problem mit dem Dim tab1 As DAO.Recordset Dim tab2 As DAO.Recordset ??? Hier mein neuer Entwurf... Private Sub Lagerbestand_anpassen_Click() Dim tab1 As DAO.Recordset Dim tab2 As DAO.Recordset Set tab1 = CurrentDb.OpenRecordset("Storagetransaction") Set tab2 = CurrentDb.OpenRecordset("Store Items", Form) Do Until tab1.EOF tab1.Edit Position = tab1!Storageposition Lager = tab2!Storageposition If Position = Lager Then tab1![Amount delivered] = tab2![Amount delivered] Else Do Until tab2.EOF If Position = Lager Then tab1!![Amount delivered] = tab2![Amount delivered] Else tab2.MoveNext End If tab1.Update tab1.MoveNext End If Loop tab1.Close tab2.Close End Sub Zitieren
Amstelchen Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 referenzierst du in deinem projekt DAO, oder etwa ADO? könntest du statt QUOTE-tags CODE-tags verwenden? *g* Zitieren
larryfilou Geschrieben 23. Januar 2006 Autor Geschrieben 23. Januar 2006 Wenn ich das richtig verstanden habe, ist das eine Frage der Version von Access, richtig? Ich nutze Access 2002. Den Quellcode habe ich mir aus einem anderen Quellcode zusammengebastelt. In einem anderen Forum hat man mich an eine Site verwiesen, in der steht, ich müsse meine Library Infos ändern, aber ich hab hier bei mir scheinbar gar keinen Zugriff darauf :confused: Ich muss aber zugeben, dass ich keine Ahnung hab, ob ich auf einen DAO oder ADO verweise.. Zitieren
Amstelchen Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 die version von ms access ist in dieser hinsicht relativ egal. wenn du im code DAO.Recordset verwendest, must du allerdings im menü extras / verweise deines vba-projektes die "microsoft DAO 3.6 object library" auswählen. wenn du mit ADO(X) arbeitest, dann halt "microsoft activex data objects 2.x library". s'Amstel Zitieren
larryfilou Geschrieben 23. Januar 2006 Autor Geschrieben 23. Januar 2006 Hab endlich die nötige "Reference" Stelle gefunden und das nötige getan. Hier ist mal der neue Code: ABER, das einbauen der Schritte in der tab2 ist noch nicht so ganz klar. Hab es in die ursprüngliche Schleife so eingebaut, aber ich fürchte, das funktioniert so net... : ElseIf tab2 <> EOF Then Do Until tab2.EOF tab2.MoveNext Loop d.h. ich WEISS dass es nicht funktioniert, hab's ja probiert. Aber wie kann ich das anders formulieren? Geht das Programm nach dem Elseif überhaupt zurück in die Hauptschleife, oder würde er einfach alle Sätze in tab2 durchgehen und DANN in die Hauptschleife zurückgehen ?! Zitieren
Amstelchen Geschrieben 23. Januar 2006 Geschrieben 23. Januar 2006 ElseIf tab2 <> EOF Then funktionieren das so? ersetze es mal mit tab2.EOF = False. ausserdem wirst du am ende der inneren schleife mit tab2.MoveFirst wieder zum ersten datensatz springen müssen, sonst bleibst du beim zweiten schleifendurchlauf von tab1 immer beim letzten DS von tab2 stehen und vergleichst nur den letzten DS. s'Amstel Zitieren
larryfilou Geschrieben 25. Januar 2006 Autor Geschrieben 25. Januar 2006 Habe das ganze jetzt mal von ner anderen Seite ngegriffen, habe das Gefühl, so besser voranzukommen... Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.