Access 97 - Tabellen aktualisieren

Hallo und Guten Abend,

ich bin neu hier und muss gleich eine Frage loswerden (Schöner Einstand :-} ). Vielleicht könnte jemand unter Euch mein Leben mit Access ein wenig angenehmer gestalten?

Folgendes Problem kann ich auf die schnelle nicht lösen:

Ich habe mehrere Tabellen mit unterschiedlicher Spaltenanzahl,

immer anderslautenden Spaltenbezeichnern und in den Zellen kommen NULL-Werte
(keine 0, sondern IsNull, also die Zelle ist leer) vor.

Wie kann ich diese NULL-Werte einer Tabelle mit einer Funktion auf den Wert 0 (Zahl) aktualisieren?

Ich würde mich riesig freuen, wenn ich bei Euch Hilfe bekommen könnte!

Grüsse

Andy

Ich würde ein SQL-Statement schreiben:

UPDATE Tabellenname SET Spaltenname=0 WHERE Spaltenname IS NULL;

So kann aber immer nur eine Spalte aktualisiert werden.

Vielleicht hilft es dir ja schon ein wenig.
Gruß - Sirc

Hallo Sirc,

danke für Deine Antwort - leider wollte ich aber ALLE Spalten in einem Rutsch aktualisieren.

So weit bin ich bisher gekommen:

Public Function NullenWEG()
Dim DB As Database
Dim Tbl As Recordset
Dim C As Field

Set DB = CurrentDb()

Set Tbl = DB.OpenRecordset("Tabelle1", dbOpenTable)


For Each C In Tbl.Fields

If IsNull(C.Value) Then
Tbl.Edit
C.Value = "0"
Tbl.Update
End If
MsgBox C & " Erledigt!"
Next C
Tbl.Close
DB.Close

End Function

Aber irgendwie funzt das nicht.

Erstaunlicherweise wird nur die erste Zeile!!! (1. Datensatz) der Tabelle geändert. Die Funktion geht also nicht in die zweite Zeile und macht dort weiter bis zum EOT?!?!

Hier habe ich wohl einen falschen Denkansatz oder was vergessen.

Grüsse
Andy

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Dann ergänzt du das einfach noch etwas.
Du musst in den Recordsets einfach weitergehen.
Bei mir funktioniert folgendes:

_Public Function NullenWEG()
Dim DB As Database
Dim Tbl As Recordset
Dim C As Field
Set DB = CurrentDb()
Set Tbl = DB.OpenRecordset(„Tabelle1“, dbOpenTable)

Do While Not Tbl.EOF
For Each C In Tbl.Fields
If IsNull(C.Value) Then
Tbl.Edit
C.Value = „0“
Tbl.Update
End If
MsgBox C & " Erledigt!"
Next C
Tbl.MoveNext
Loop

Tbl.Close
DB.Close

End Function_

Hoffentlich auch bei dir.
Grüße Sirc

1 Like

Dann ergänzt du das einfach noch etwas.
Do While Not Tbl.EOF
Tbl.MoveNext
Loop

Hoffentlich auch bei dir.
Grüße Sirc

Hallo Sirc,

SUUUUPER - das gibt `nen Stern! DANKE

Was so zwei Zeilen bewirken können!

Ich habe die Funktion noch ein wenig erweitert - jetzt läuft auch noch eine Stoppuhr mit.
Und siehe da, ca. 80.000 Zellen! werden innerhalb von einer Sekunde umgestellt!

Mit Excel bin ich da 5 Minuten unterwegs und muss die Tabelle wieder zurück ins Access führen. Ne Menge Zeit und Geduld gespart.

Und hier die erweiterte Funktion:

Public Function Nuller()

Dim DB As Database
Dim Tbl As Recordset
Dim C As Field
Dim Start As Date
Dim Ende As Date



Dim AnzahlZeilen As Long
Dim AnzahlSpalten As Long
Dim AnzahlZellen As Long

Set DB = CurrentDb()
Set Tbl = DB.OpenRecordset("Tabelle1", dbOpenTable)


 Start = Format(Now(), "hh:mm:ss")
 



Do While Not Tbl.EOF
For Each C In Tbl.Fields
If IsNull(C.Value) Then
Tbl.Edit
C.Value = "0"
Tbl.Update
End If

Next C
Tbl.MoveNext
Loop

AnzahlZeilen = Tbl.RecordCount
AnzahlSpalten = Tbl.Fields.Count
AnzahlZellen = AnzahlZeilen \* AnzahlSpalten


Ende = Format(Now(), "hh:mm:ss")



MsgBox "Bearbeitete Anzahl Zellen: " & AnzahlZellen & vbCrLf \_
& vbCrLf & "Start: " & Start & vbCrLf \_
& vbCrLf & "Ende: " & Ende

Tbl.Close
DB.Close

End Function

nochmals Danke sagt

Andy