Recordset in eine temp Tabelle schreiben...

29/06/2009 - 18:18 von Wazlav Gizycki | Report spam
'Hallo Group,

'ich habe da mal eine Frage. Ich hole mit einem SQL bestimmte Werte
aus zwei Tabellen
'und will die in eine Temporeàre Tabelle schreiben, die als Grundlage
für ein Bericht dienen soll
'der Recordset enthàlt werte aus zwei Tabellen.
'In der ersten Spalte ist ein Bezeichner. Ich möchte in der
Temporàren Tabelle erst dann eine Neue Zeile einfügen wenn sich der
Bezeichner geàndert hat(quasi sowas wie eine Pivot Tabelle machen).
Damit ich pro Bezeichner eine Zeile mit mehreren Spalten habe.
'Das mache ich deshalb weil manchmal auch Null Werte dabei sind, die
ich im Bericht nicht haben will.
'Also Jeden Datensatz in eine neue Zeile zu schreiben ist kein
Problem, aber dann habe ich Nullen drin.
'Eine Zeile immerwieder zu editieren klappt aber nicht, weil Access
immer meckert "kein Aktueller Datensatz". Weiss vielleicht Jemand aus
der Group ein Rat?
'Danke.

Set Tab1 = cDB.OpenRecordset("tab_temp_report", DB_OPEN_TABLE)
Set rst = cDB.OpenRecordset("SELECT col1, col2, col3 FROM tab2 LEFT
JOIN Tab3 ON Tab2.col5 = Tab3.col5")

'Zeiger auf ersten Datensatz bewegen
rst.MoveFirst

'Tabelle mit While für Bericht füllen
Do While Not rst.EOF

If rst.AbsolutePosition = 0 Then
Tab1.AddNew
End If

'Vergleichsvariable holen
rst.MovePrevious
If Not (rst.BOF Or rst.EOF) Then
varTemp = rst![col1]
End If
rst.MoveNext

If varTemp = rst![col1] And rst.AbsolutePosition > 0 Then
Tab1.Edit '<-Hier meckert Access immer, "kein aktueller
Datensatz"

ElseIf varTemp <> rst![col1] And rst.AbsolutePosition > 0 Then
Tab1.AddNew
Tab1![col1] = rst![col1]

End If

If rst![col3] = 1 Then
Tab1!col2 = rst![col2]

ElseIf rst![col3] = 2 Then
Tab1!col3 = rst![col2]

ElseIf rst![col3] = 3 Then
Tab1!col4 = rst![col2]
End If

'Recordset Zeiger weiter bewegen
Tab1.Update
rst.MoveNext

Loop
Tab1.Close
End Sub
 

Lesen sie die antworten

#1 Karl Donaubauer
29/06/2009 - 19:34 | Warnen spam
Wazlav Gizycki wrote:
...
'In der ersten Spalte ist ein Bezeichner. Ich möchte in der
Temporàren Tabelle erst dann eine Neue Zeile einfügen wenn sich der
Bezeichner geàndert hat(quasi sowas wie eine Pivot Tabelle machen).
Damit ich pro Bezeichner eine Zeile mit mehreren Spalten habe.
'Das mache ich deshalb weil manchmal auch Null Werte dabei sind, die
ich im Bericht nicht haben will.
'Also Jeden Datensatz in eine neue Zeile zu schreiben ist kein
Problem, aber dann habe ich Nullen drin.
'Eine Zeile immerwieder zu editieren klappt aber nicht, weil Access
immer meckert "kein Aktueller Datensatz".
...
Set Tab1 = cDB.OpenRecordset("tab_temp_report", DB_OPEN_TABLE)
Set rst = cDB.OpenRecordset("SELECT col1, col2, col3 FROM tab2 LEFT
JOIN Tab3 ON Tab2.col5 = Tab3.col5")

'Zeiger auf ersten Datensatz bewegen
rst.MoveFirst

'Tabelle mit While für Bericht füllen
Do While Not rst.EOF

If rst.AbsolutePosition = 0 Then
Tab1.AddNew
End If

'Vergleichsvariable holen
rst.MovePrevious
If Not (rst.BOF Or rst.EOF) Then
varTemp = rst![col1]
End If
rst.MoveNext

If varTemp = rst![col1] And rst.AbsolutePosition > 0 Then
Tab1.Edit '<-Hier meckert Access immer, "kein aktueller
Datensatz"

ElseIf varTemp <> rst![col1] And rst.AbsolutePosition > 0 Then
Tab1.AddNew
Tab1![col1] = rst![col1]

End If

If rst![col3] = 1 Then
Tab1!col2 = rst![col2]

ElseIf rst![col3] = 2 Then
Tab1!col3 = rst![col2]

ElseIf rst![col3] = 3 Then
Tab1!col4 = rst![col2]
End If

'Recordset Zeiger weiter bewegen
Tab1.Update
rst.MoveNext

Loop
Tab1.Close
End Sub



Wenn ich richtig verstehe, kannst du das zwischen den Deklarationen
und dem Close verwenden:

If rst.BOF Then Exit Sub

Do While Not rst.EOF

If varTemp <> rst!col1 Then
Tab1.AddNew
Tab1!col1 = rst!col1
End If

' 'Falls col3 <> 1, 2, 3 sein kann
' Select Case rst!col3
' Case 1, 2, 3
Tab1("col" & (rst!col3 + 1)) = rst!col2
' End Select

varTemp = rst!col1

rst.MoveNext

If rst.EOF Then
Tab1.Update
ElseIf varTemp <> rst!col1 Then
Tab1.Update
End If

Loop

HTH
Karl
********* Ich beantworte keine Access-Fragen per Email. *********
Access-FAQ: http://www.donkarl.com

Ähnliche fragen