Problem bei If Bedingung

Hallo Forum,

ich möchte die Tabellen „Material“ und „Produkte“ vergleichen.
Ich habe mit ein Split() in der Tabelle „Produkte“ die Tabelleninhalte zerlegt.
Mit ein Strcomp() vergleiche ich die beiden Tabellen nach Gemeinsamkeiten.

Jetzt habe ich folgendes Problem: ich bekomme nicht hin, die Ergebnisse auf mehreren Spalten zu verteilen. In der ersten if Schleife bekomme ich die richtigen Teilergebnisse. In der nächsten if Schleife sollen die nächsten Teilergebnisse auf eine andere Spalte übertragen werden usw.
Nur das in der zweiten if Schleife die Ergebnisse der ersten Schleife übertragen werden. Hier fehlt mir ein bisschen die Logik, wie ich die Bedingung machen muss.

Kann mir jemand bitte ein Tipp geben?
Hier ist der Teil des Codings.

vergleich = StrComp(rs_ZPR_Matreial!material, ProdukteArray(i))

If vergleich = 0 Then

rs_ZPR_Ergebniss.Edit
rs_ZPR_Ergebniss!erg1 = rs_ZPR_Material!material
rs_ZPR_Ergebniss.Update

if vergleich = 0 Then

If IsNull(rs_ZPR_Ergebnis!erg1) = False Then

rs_ZPR_Ergeniss.Edit
rs_ZPR_Ergebniss!erg2 = rs_ZPR_Material!material
rs_ZPR_Ergebniss.Update
Else
End If
Else
End if
Else
End if

Danke im Voraus.

Hallo,

ich möchte die Tabellen „Material“ und „Produkte“
vergleichen.

was heißt das genau? Tabellen kann man so wie das gesagt ist, nicht „vergleichen“

Ich habe mit ein Split() in der Tabelle „Produkte“ die
Tabelleninhalte zerlegt.

auch: was heißt das genau? welche Tabelleninhalte? Meinst Du damit bestimmte Felder? Welche sind das und was steht das beispielhaft drin?

Mit ein Strcomp() vergleiche ich die beiden Tabellen nach
Gemeinsamkeiten.

Wie gesagt, es sind nur Feldwerte/Variablenwerte miteinander vergleichbar. Warum StrComp ?

Jetzt habe ich folgendes Problem: ich bekomme nicht hin, die
Ergebnisse auf mehreren Spalten zu verteilen.

Welche (mehrere) Ergebnisse erwartest Du?

In der ersten if
Schleife bekomme ich die richtigen Teilergebnisse. In der
nächsten if Schleife sollen die nächsten Teilergebnisse auf
eine andere Spalte übertragen werden usw.

eine oder mehrere weitere Spalten?

das tönt nach falschem DB-/Tabellendesign und ist nicht zielführend (vermutlich)

Nur das in der zweiten if Schleife die Ergebnisse der ersten
Schleife übertragen werden. Hier fehlt mir ein bisschen die
Logik, wie ich die Bedingung machen muss.

Ich versteh nicht die Zusammenhänge der bearbeiteten Daten. Wenn mit strComp ein String (Materialname) mit einem anderen (ProdukteArray) verglichen wird, ist das Resultat nur ja oder nein und liefert nicht die Anzahl der Treffer oder was sonst auch immer. D. H. wenn der Vergleich wahr liefert, dann steht in ProdukteArray das selbe wie in Material und es gibt gar keine weiteren Ergebnisse.

Kann mir jemand bitte ein Tipp geben?
Hier ist der Teil des Codings.

vergleich = StrComp(rs_ZPR_Matreial!material,
ProdukteArray(i))

If vergleich = 0 Then

rs_ZPR_Ergebniss.Edit
rs_ZPR_Ergebniss!erg1 = rs_ZPR_Material!material
rs_ZPR_Ergebniss.Update

if vergleich = 0 Then

If IsNull(rs_ZPR_Ergebnis!erg1) = False Then

rs_ZPR_Ergeniss.Edit
rs_ZPR_Ergebniss!erg2 = rs_ZPR_Material!material
rs_ZPR_Ergebniss.Update
Else
End If
Else
End if
Else
End if

Poste bitte den gesamten Code und erklär anhand authentischer Beispieldaten die grundlegende Aufgabe, die Du lösen willst/musst.

Viele Grüße vom Bodensee
Franz, DF6GL

Hatten wir das Thema nicht schon mal??

/t/schleifen-bildung-in-access-2003-vba/6610209

Ja, es ist was Ähnliches.
Hier ist mein echter Coding:

Option Compare Database
Option Explicit

Sub Spliten()

Dim db As DAO.Database
Set db = CurrentDb()

Dim rs_ZPR_Produkt As Recordset
Dim rs_ZPR_Material As Recordset

Set rs_ZPR_Produkt = db.OpenRecordset(„ZPR_Produkt“, dbOpenTable)
Set rs_ZPR_Material = db.OpenRecordset(„ZPR_Material“, dbOpenTable)

Dim TestArray() As String
Dim i As Integer
Dim x As Variant
Dim vergleich As String

Do While Not rs_ZPR_Material.EOF = True

Do While Not rs_ZPR_Produkt.EOF = True

TestArray() = Split(rs_ZPR_Produkt!MAT)

For i = LBound(TestArray) To UBound(TestArray)

vergleich = StrComp(rs_ZPR_Material!Mat, TestArray(i))

If vergleich = 0 Then

rs_ZPR_Produkt.Edit
rs_ZPR_Produkt!MAT = rs_ZPR_Matrerial!Mat
rs_ZPR_Produkt.Update

else if vergleich = 0 Then then

if isNUll(rs_ZPR_Produkt!MAT) = False then
rs_ZPR_Produkt.Edit
rs_ZPR_Produkt!MAT2 = rs_ZPR_Matrerial!Mat
rs_ZPR_Produkt.Update

else
end if

else
end if

Else
End If

Next i

rs_ZPR_Produktt.MoveNext
Loop

rs_ZPR_Produkt.MoveFirst
rs_ZPR_Matrerial.MoveNext
Loop

rs_ZPR_Material.Close
rs_ZPR_Produkt.Close

db.Close
Set db = Nothing

End Sub

Es werden die Tabelleninhalte verglichen, die Felder von der Tabelle Produkt „Material“ und von der Tabelle Material „Material“ werden verglichen.
Alle Felder sind vom Datentyp String.

Zum Beispiel steht in der
Tabelle Produkt: Flammenwerfer Typ 47 und in der
Tabelle Material steht Typ47
Und das Ergebnis des Vergleichs Typ 47 soll in einer neuen Spalte eingetragen werden.

Mit strComp() wird String1 mit String2 verglichen, wenn ich eine Null zurück bekomme bedeutet, dass String2 in String 1 enthalten ist.

Nur für bestimmte Produkte gibt es mehrere Treffer, in der Tabelle Produkt, die will ich dann auf mehrere Spalten verteilen.

Ich versuche die Tabellenfelder Material von der Tabelle Produkt und Material zu vergleichen. In der Tabelle Produkt gibt es mehrere Treffer und diese Treffer möchte ich in der Tabelle Material, in den Spalten Mat 1 und Mat2 verteilen und evtl. in Mat 3.

Bsp.: Tabelle Produkt: Wasser Schraube
Tabelle Material: Mat1: Wasser
Mat2: Schraube

Mit freundlichen Grßen
Arpait00

Hallo,

na gut, versuchen wir es nochmal…

tblMat:

Mat
a
b
c

tblProdukt:

Produkt Mat1 Mat2 Mat3
a,g,z a g z
x,y,z
j,k,b j k b
d,f,c d f c

















Dim rsMat As DAO.Recordset, rsProd As DAO.Recordset
Dim arrMat, i As Long, Found As Boolean

Set rsMat = CurrentDb.OpenRecordset("tblMat", dbOpenSnapshot)
Set rsProd = CurrentDb.OpenRecordset("tblProdukt", dbOpenDynaset)

Do Until rsMat.EOF

 Do Until rsProd.EOF


 If InStr(rsProd!produkt, rsMat!mat) Then

 ''Found = False
 arrMat = Split(rsProd!produkt, ",")
 ''For i = 0 To UBound(arrMat)
 ''If rsMat!mat = arrMat(i) Then Found = True
 '' Next


 ''If Found Then
 For i = 0 To UBound(arrMat)
 rsProd.Edit
 rsProd("Mat" & i + 1) = arrMat(i)

 rsProd.Update
 Next

 End If
 rsProd.MoveNext
 Loop
rsProd.MoveFirst

rsMat.MoveNext
Loop

rsMat.Close
Set rsMat = Nothing
rsProd.Close
Set rsProd = Nothing

Alternativ kannst Du das erste IF auskommentieren und die doppelt kommentierten Zeilen dagegen aktivieren.

Viele Grüße vom Bodensee
Franz, DF6GL

Ja fast, aber ich habs mir so gedacht:

tblMat:

Mat
a
b
c

tblProdukt:

Produkt Mat1 Mat2 Mat3
a g b a b
c y a c c
j k b b
c b a c b a

tbl:
Mat
Typ14
Eisen
KW
Wasser
usw.

tblProdukt:

Produkt Mat1 Mat2 Mat3
Flamme Typ14 Eisen Typ14 Eisen
Eisen KW Eisen KW
Flamme KW KW
Wasser Eisen Typ14 Wasser Eisen Typ14

Mit freundlichen Grüßen
arpait00

Hallo,

hast Du Dir das nur so gedacht, oder hat das Ganze einen tieferen Sinn? Wenn ja, dann hätte ich den gern gewußt…

Dim rsMat As DAO.Recordset, rsProd As DAO.Recordset, Db As Database
Dim i As Long
set Db = Currentdb

Set rsMat = Db.OpenRecordset("tblMat", dbOpenSnapshot)
Set rsProd = Db.OpenRecordset("tblProdukt", dbOpenDynaset)

Do Until rsProd.EOF
i = 0
 Do Until rsMat.EOF

 If InStr(rsProd!produkt, rsMat!mat) Then
 i = i + 1
 rsProd.Edit
 rsProd("Mat" & i) = rsMat!mat
 rsProd.Update
 End If
 rsMat.MoveNext
 Loop

rsMat.MoveFirst
rsProd.MoveNext
Loop


rsMat.Close: Set rsMat = Nothing
rsProd.Close: Set rsProd = Nothing
Set Db = Nothing

Viele Grüße vom Bodensee
Franz, DF6GL

Hallo,

ich will ein Datenabgleich zwischen den Tabellen Produkt und Material machen, es gibt Produkte bei denen bestimmte Materialen nicht verwendet werden.
Deswegen mache hier ich ein String Vergleich durch, damit ich sehen kann welche Materialien für ein Produkt benötigt werden.

Mit freundlichen Grüßen
arpait00