Zum Inhalt springen

Empfohlene Beiträge

Geschrieben

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?

Geschrieben

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

Geschrieben

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.. :)

Geschrieben

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

Geschrieben

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.. :(

Geschrieben

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

Geschrieben

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? :rolleyes:

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 ?!

Geschrieben

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

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.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...