Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

rs.fields("Feldname")

Forumthread: rs.fields("Feldname")

rs.fields("Feldname")
28.02.2003 12:54:45
Stefan
Hi,

wie weiße ich diesem Feld einen Wert zu? Wenn ich auf Access
zugreife, und dann z.B. sage WERT1 = rs.fields("Feldname"), dann
wird die Variable WERT1 mit dem Inhalt von rs.fields("Feldname") gefüllt. Aber anders herum, also: rs.fields("Feldname") = WERT1
funktioniert nicht, wie geht das?

Gruß Stefan

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
Re: rs.fields("Feldname")
28.02.2003 12:58:06
Nike

Hi,
müßtest du den Recordset nicht über ne Aktualisierungsabfrage
"bestücken"?

Bye

Nike

Re: rs.fields("Feldname")
28.02.2003 12:58:41
Michael Scheffler

Hallo,

warum soll das nicht gehen?

Gruß

Micha

Re: rs.fields("Feldname")
28.02.2003 13:02:20
Stefan

weil es nicht funktioniert.
WERT1 = rs.fields("Feldname") -> funktioniert
rs.fields("Feldname") = WERT1 -> funktioniert nicht

Der Beweis dafür ist, dass es nicht funktioniert ist, wenn
ich jetzt sage:
WERT2 = rs.fields("Feldname") -> WERT2 ist leer, obwohl eigentlich der Wert aus WERT1 drin stehen müsste.

Wie kann ich hier vorgehen? Ich will doch nur das dämliche Datenbankfeld updaten.

Gruß Stefan.

Anzeige
Re: rs.fields("Feldname")
28.02.2003 13:03:51
Stefan

ich weiß nicht ob ich das muss?

Hier mein Tool mit SQL-String:

SQL = "SELECT Ports.Nummer, Hardware.Namen " & _
"FROM HardwareTypen INNER JOIN (Ports " & _
"INNER JOIN (Aufträge INNER JOIN Hardware " & _
"ON Aufträge.Auftrag_ID = Hardware.Auftrag_ID) " & _
"ON Ports.Port_ID = Aufträge.Port_ID) ON HardwareTypen.HardwareTyp_" & _
"ID = Hardware.HardwareTyp_ID;"

Set RS = Conn.Execute(SQL)

For I = 2 To LstRef
PIDRef = Workbooks(RefDat).Sheets(1).Cells(I, 2).Value
PIDRef = Left(PIDRef, 8)
RNamRef = Workbooks(RefDat).Sheets(1).Cells(I, 1).Value
Do Until RS.EOF
PIDDB = RS.Fields("Nummer")
RS.MoveNext
If PIDDB = PIDRef Then
NameDB = RS.Fields("Namen")
If NameDB = "" Then
RS.Fields("Namen") = RNamRef
End If
End If
Loop
Application.StatusBar = I & " von " & LstRef & " Datensätzen importiert..."
Next I

Anzeige
Re: rs.fields("Feldname")
28.02.2003 13:18:34
Nike

Hi,
jo, das is ne ganz einfache Auswahlabfrage...
Um da jetzt wieder was reinzunüdeln müßte das Ganze mit
update anfangen, dann den entsprechenden RS rausfummeln
und dann den Wert updaten...

Mehr zu Access findest du u.A. hier...

Bye

Nike

Anzeige
Kein Beweis!
28.02.2003 13:25:09
Micahel Scheffler

Hallo,



Re: Kein Beweis!
28.02.2003 13:47:06
Stefan

Hi, danke für Deine Hilfe. Nur wie gehe ich bei deinem Vorschlag mit dem SQL-String vor. Ich mache ja eine Abfrage in Access, und ziehe mir den gewünschten Recordset raus und will ihn füllen. In deinem Beispiel verknuddelst du ja Daten aus nem TXT-File.

Stefan

Anzeige
Re: Kein Beweis!
28.02.2003 14:08:53
Michael Scheffler

Hallo,

wo siehst Du ein Textfile? Ich mache ein Update einer Acess-Datenbank mit Daten einer UserForm!

Gruß

Micha

Re: Kein Beweis!
28.02.2003 14:12:57
Stefan

Hi,

ja, du hast ja Recht, hab erst später gesehen, dass Du mit ner Userform arbeitest. Ich meinte eigentlich eher deine Vorgehensweise, die Du ja nicht über SQL tätigst.

Gruß Stefan.

Anzeige
;
Anzeige

Infobox / Tutorial

rs.fields in VBA: Werte zuweisen und aktualisieren


Schritt-für-Schritt-Anleitung

  1. Recordset erstellen: Bevor Du mit rs.fields arbeiten kannst, musst Du ein Recordset in VBA erstellen. Verwende dazu den folgenden Code:

    Dim Conn As Object
    Dim RS As Object
    Set Conn = CreateObject("ADODB.Connection")
    Set RS = CreateObject("ADODB.Recordset")
  2. Datenbankverbindung herstellen: Stelle eine Verbindung zu Deiner Access-Datenbank her.

    Conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=DeineDatenbank.accdb;"
  3. SQL-Abfrage ausführen: Führe eine SQL-Abfrage aus, um das Recordset zu füllen.

    RS.Open "SELECT * FROM DeineTabelle", Conn
  4. Werte zuweisen: Um einen Wert zu einem Feld im Recordset zuzuweisen, musst Du sicherstellen, dass das Recordset im Editiermodus ist. Dazu kannst Du den folgenden Code verwenden:

    RS.Fields("Feldname").Value = WERT1
  5. Änderungen speichern: Vergiss nicht, die Änderungen zu speichern, indem Du die Methode Update aufrufst:

    RS.Update
  6. Recordset schließen: Schließe das Recordset und die Verbindung, wenn Du fertig bist.

    RS.Close
    Conn.Close

Häufige Fehler und Lösungen

  • Fehler: Kein Wert wird zugewiesen: Wenn Du rs.fields("Feldname") = WERT1 ausführst und es nicht funktioniert, stelle sicher, dass Du das Recordset im Editiermodus hast. Füge RS.Edit vor der Zuweisung hinzu:

    RS.Edit
    RS.Fields("Feldname") = WERT1
    RS.Update
  • Leere Werte: Wenn nach der Zuweisung von WERT1 zu rs.fields("Feldname") der Wert nicht gespeichert wird, überprüfe, ob das Recordset auch tatsächlich Daten enthält und ob das Feld beschreibbar ist.


Alternative Methoden

Wenn die direkte Zuweisung über rs.fields nicht funktioniert, kannst Du auch die Execute-Methode verwenden, um eine Update-Abfrage auszuführen:

Dim SQL As String
SQL = "UPDATE DeineTabelle SET Feldname = '" & WERT1 & "' WHERE Bedingung"
Conn.Execute SQL

Diese Methode umgeht das Problem mit rs.fields und aktualisiert die Daten direkt in der Datenbank.


Praktische Beispiele

Hier ist ein Beispiel, das zeigt, wie Du Daten aus einer Excel-Tabelle in ein Access-Recordset übertragen kannst:

Dim PIDRef As String
Dim RNamRef As String
Dim SQL As String

' SQL-Abfrage zum Füllen des Recordsets
SQL = "SELECT * FROM Hardware"
RS.Open SQL, Conn

For I = 2 To LstRef
    PIDRef = Workbooks(RefDat).Sheets(1).Cells(I, 2).Value
    RNamRef = Workbooks(RefDat).Sheets(1).Cells(I, 1).Value

    Do Until RS.EOF
        If RS.Fields("Nummer") = PIDRef Then
            If RS.Fields("Namen") = "" Then
                RS.Edit
                RS.Fields("Namen") = RNamRef
                RS.Update
            End If
        End If
        RS.MoveNext
    Loop
Next I

RS.Close
Conn.Close

Tipps für Profis

  • Verwende With-Blöcke: Um den Code lesbarer zu machen, kannst Du With-Blöcke verwenden, um mehrere Felder im Recordset zu bearbeiten.

    With RS
        .Edit
        .Fields("Feldname") = WERT1
        .Update
    End With
  • Fehlerbehandlung: Implementiere Fehlerbehandlung in Deinem Code, um Probleme beim Zugriff auf die Datenbank zu erkennen und zu beheben.

    On Error Resume Next
    ' Dein Code hier
    If Err.Number <> 0 Then
        MsgBox "Ein Fehler ist aufgetreten: " & Err.Description
    End If

FAQ: Häufige Fragen

1. Warum kann ich den Wert in rs.fields nicht zuweisen?
Stelle sicher, dass das Recordset im Editiermodus ist, bevor Du versuchst, einen Wert zuzuweisen. Verwende RS.Edit, bevor Du rs.fields("Feldname") zuweist.

2. Wie kann ich mehrere Felder auf einmal aktualisieren?
Nutze einen With-Block, um mehrere Felder im Recordset zu aktualisieren, nachdem Du RS.Edit aufgerufen hast.

3. Was ist der Unterschied zwischen rs.fields und rst.fields?
Es gibt keinen funktionalen Unterschied - es handelt sich lediglich um unterschiedliche Schreibweisen. Verwende diejenige, die Du bevorzugst oder die in Deinem Projekt konsistent ist.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige