PDA

Vollständige Version anzeigen : Schlaufen um nach ArtikelNr zu suchen


Hopper
02.05.2001, 10:23
Hallo

Ich arbeite erst seit einigen Tagen mit Acces und habe folgende Aufgabe zu lösen :

Schlaufe zum Durchlaufen aller Records in "T_Artikel", Artikelnbr einlesen und in T_ArtShop nach gleicher ArbNbr suchen (Schlaufe), wenn, wenn Nbr gefunden dann Felder mit Text einlesen.

Folgendes habe ich probiert, leider ohne Erfolg :

Function PutProfiToASBeschrieb()
On Error Resume Next
gRetVal = -1

Dim ws As Workspace
Dim DB1 As Database
Dim DB2 As Database
Dim ProfiBeschrieb As Recordset
Dim ASBeschrieb As Recordset

Dim MsgStatusTemp As Integer
Dim i As Integer
Dim x As Variant

Dim ProfiArtNrTmp As String
Dim ASArtNrTmp As String
Dim KatNrTmp As String
Dim NewRecordCount As Long
Dim EditedRecordCount As Long

Set ws = DBEngine.Workspaces(0)
Set DB1 = CurrentDb
Set DB2 = CurrentDb

Set ASBeschrieb = DB1.OpenRecordset("T_Artikel", DB_OPEN_DYNASET)
Set ProfiBeschrieb = DB2.OpenRecordset("T_ArtShop", DB_OPEN_DYNASET)

NewRecordCount = 0
EditedRecordCount = 0

'Hinweis und Möglichkeit zum Abbruch
x = MsgBox("Diese Funktion arbeitet nicht direkt mit Profitex." & Chr(13) & "Ich hoffe es funktioniert" & Chr(13) & Chr(13) & "Viel Spass beim warten !!", 305, PTITLE)
If x = 2 Then GoTo PutProfiToASBeschriebExit:

DoCmd.Hourglass True
'ws.BeginTrans
ProfiBeschrieb.MoveFirst

Do While Not (ProfiBeschrieb.EOF)
ASArtNrTmp = ASBeschrieb("ArtikelNr")
'ASBeschrieb.MoveFirst
'Suchen eines gleichen Records in ASBeschrieb und erneuern
Do While Not (ASBeschrieb.EOF)
ProfiArtNrTmp = ProfiBeschrieb("ArtNbr")
'Bei True bestehender Art erneuern
If ProfiArtNrTmp = ASArtNrTmp Then
ASBeschrieb.Edit
'ASBeschrieb.AddNew
ASBeschrieb("Beschrieb") = ProfiBeschrieb("Feld2")
ASBeschrieb.Update
EditedRecordCount = EditedRecordCount + 1
Exit Do
End If
ASBeschrieb.MoveNext
Loop
'bei True Profitex Artikel in ASBeschrieb neu hinzufügen mit Standardfaktoren
If ASBeschrieb.EOF = True Then
'ASBeschrieb.Edit
ASBeschrieb.AddNew
ASBeschrieb("Beschrieb") = ProfiBeschrieb("Feld2")
ASBeschrieb.Update
NewRecordCount = NewRecordCount + 1
End If
ProfiBeschrieb.MoveNext
Loop

'ws.CommitTrans
ProfiBeschrieb.Close
ASBeschrieb.Close

GoTo PutProfiToASBeschriebExit

PutProfiToASBeschriebExit:
DoCmd.Hourglass False
MsgBox "Es wurden " & EditedRecordCount & " bestehende Artikel mutiert, und " & Chr(13) & NewRecordCount & " Artikel aus Profitex neu hinzugefügt.", 48, INFOTITLE
PutProfiToASBeschrieb = gRetVal
Exit Function

PutProfiToASBeschriebErr:
On Error Resume Next
'ws.Rollback
ProfiBeschrieb.Close
ASBeschrieb.Close
gRetVal = 0
MsgBox Error$, 48, ERTITLE
Resume PutProfiToASBeschriebExit

End Function

Kann mir bitte jemand sagen, was ich falsch mache. Ich bin kurz vor dem verzweifeln.
Besten Dank und Gruss aus der Schweiz

Sabine

A.S.
02.05.2001, 10:32
Hallo Sabine,

gib uns doch einmal eine Beschreibung dessen wofür diese Abfrage sein soll. Evtl gibt es ja einen einfacheren Weg um das von Dir gewünschte Ergebnis zu erzielen.

cu Arno

Hopper
02.05.2001, 10:52
Hallo Arno

Danke für die schnelle Antwort.
Ich arbeite als WebDesignerin und habe einen Verbrauchsmaterial-Shop erstellt. Nun geht es darum, die Artikel aus unserem Buchhaltungs-/Artikelverwaltungssystems zu exportieren und in einer Access-DB zu importieren. Die Artikel (T_Artikel) konnte ich ohne grossen Probleme (mein Chef gab mir eine Vorlage) importieren. Die Beschreibungstexte werden separat exportiert und durch das gibt es eine zweite Tabelle (T_ArtShop) in der DB. Nun habe ich beide Tabellen in der DB (T_Artikel und T_ArtShop). Es geht nun darum, den Artikelbeschrieb dem entsprechenden Artikel zuzuordnen. Das einzig identische ist die ArtikelNr. Hilft Dir das weiter ?

Gruss und Danke
Sabine

A.S.
02.05.2001, 12:18
Hallo Sabine,

prinzipiell würde ich das entweder über entsprechende Anfüge- und Aktualisierungsabfragen handhaben. Vorteil: Du brauchst kein entsprechendes Coding.

Die Anzeige wieviele Sätze neu bzw. geändert sind, ist ja nicht unbedingt notwendig oder?

Es geht auch über das Coding, ich habe mir das Deinige vorhin auch angeschaut und eine entsprechende Umsetzung überlegt. Selbiges kann ich im Moment aus Zeitmangel aber nicht ausprobieren, daher habe ich Dir gerade mal eine Beispiel-DB für die Lösung via Abfragen zugeschickt.

HTH

Arno

Hopper
02.05.2001, 12:57
Hallo Arno

Danke für die DB. Ich habe sie gleich ausprobiert, sie funktioniert.
Ich versuchte nun, die Abfrage etc. auf mein Projekt umzuschreiben, dabei hatte ich leider weniger Erfolg. Aber Du hast mir trotzdem etwas weitergeholfen. Ich versuche sonst mal meinen Code (den zuoberst) dementsprechend anzupassen da es mit dem qry nicht funktioniert. Danke trotzdem.

Gruss
Sabine

Hopper
02.05.2001, 13:46
Hallo Arno

Ich habe noch ne kleine Frage. Ich habe mir das qry nochmals genau angesehen und festgestellt, dass es ein Update ist. Ich habe nun im Beschrieb Testdaten eingegeben und siehe da, es funktionierte. Wie sieht es aber aus, wenn ich noch keine Beschreibung zu einem Artikel habe, später jedoch eine dazu kommt ? Das Feld ist ja im Moment lehr und ein Update kann nicht ausgeführt werden ? Wie muss ich noch weitere Felder angeben (die Beschreibungstexte sind in 16 versch. Spalten) ? Und wie kann ich bei jeder Spalte noch einen Zeilenumbruch einfügen ? Also die Inhalte der 16 Spalten kommen in der anderen Tabelle in eine Spalte und sollten dort je mit einem Zeilenumbruch getrennt werden. So, das wärs für den Moment. Danke für Deine Hilfe

Gruss
Sabine

BTW: Um nochmals auf den Code zurück zu kommen den ich oben eingefügt habe. Gibt es irgendwo ein Beispiel damit ich sehe, wie ich die Aufgabe auf diesem Weg lösen könnte ?

A.S.
02.05.2001, 14:08
Hallo Sabine,

das ist ja ein bissl viel auf einmal ;) Das kann ich auf der Arbeit auf keinen Fall ausprobieren, so das ich hingehen muss und mir das zuhause ansehen.

Kann ein wenig dauern...

cu

Arno

Hopper
02.05.2001, 14:16
Hallo Arno

Kein Problem
Mein Chef gab mir bis heute Abend Zeit, er ist jedoch die nächsten zwei Tag nicht im Büro und dann ist ja scho wieder Wochenende.
Danke für Deine Hilfe, ich warte schon gespannt auf eine Nachricht von Dir.

cu
Sabine