Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Recordset Field-Name mit String-Varibale?

Forumthread: Recordset Field-Name mit String-Varibale?

Recordset Field-Name mit String-Varibale?
01.09.2003 19:42:55
Peter
Hallo!

Ich habe da wieder eine Frage an die ADO-Spezialisten unter euch.

Ich versuche mit

...
while not recordset.EOF

Combobox1.additem recordset! String-Variable

Wend
...

Daten in eine Combobox einzulesen, wobei ich als Feldnamen eine Varibale benutze, die den "echten" Feldnamen enthält. Klappt nicht!

Auch die Schreibweise

... recordset.Fields( String-Variable ).value

klappt nicht. Jedes Mal kommt die Fehlermeldung, dass das Element nicht gefunden wurde!

Und

... recordset.fields(0).value

liest mir vier mal den Namen des Feldes in die Combobox ein (obwohl die Spalte/Feld zur Zeit nur zwei Einträge in der Datenbank hat)?!?

Wer weiß Rat?

Gruß
Peter
Anzeige

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Recordset Field-Name mit String-Varibale?
01.09.2003 23:47:10
Hans T.
Hallo Peter

Ich kann dein Problem nur zum Teil nachvollziehen: nach Combobox1.additem recordset!String-Variable brauchts ein MoveNext, sonst liest du endlos den gleichen Wert ein.

Für das Feld kommen mehrere Schreibweisen in Frage:
recordset.Fields("Feldname")
recordset.Fields("[Feldname]")
recordset.Fields!Feldname 'geht nur, wenn der Feldname keine Leerschläge oder Bindestriche enthält, was sowiso zu vermeiden ist.
recordset.Fields![Feldname]

Bei Verwendung einer Variablen funktioniert:
recordset.Fields(strFeldname)

.Value ist die Standard-Eigenschaft. Sie kann auch weggelassen werden.

Ich habe soeben alles überprüft unter Excel und Access 97. Versuch's doch nochmals und überrüfe die Schreibweise des Feldnamens. Du kannst ihn mit recordset.Fields(0).Name abfragen.

Viel Erfolg wünscht
Hans T.
Anzeige
AW: Recordset Field-Name mit String-Varibale?
02.09.2003 18:14:55
Peter
Hallo Hans,

erstmal danke für deine Antwort!

MoveNext habe ich nur vergessen zu schreiben, ist im Code selbstverständlich enthalten.
Die Geschichte mit rs.Fields(0).name habe ich auch probiert, um herauszufinden ob der Tabellenname richtig eingelesen wurde. WAR ER! Und bei ... .fields(0).value läuft der Code auch ohne Fehler durch, nur mit dem oben erwähnten seltsamen Resultat!

Ich habe die Geschichte versucht mit und ohne eckige Klammern! Und gerade das Beispiel rs.fields(strFeldname) haut bei mir nicht hin! Wenn ich das Feld direkt mit Namen angebe (um zu schauen ob das Problem vielleicht im Feld liegt), dann klappt die Datenübergabe, damit habe ich aber nur EIN Feld auf das ich zugreifen kann und das ist eigentlich nicht das was ich will.

Die Idee war folgende: Ich habe in einer Combobox eine Auswahl von 1 bis 10 und ich habe zu jeweils einer Ziffer einen Satz Details, die ich nach Auswahl einer Zahl in eine andere Combobox einlesen will. Also z.B. 1 ausgewählt wird dann zum Feldnamen "1Details" (Combobox1.Text & "Details"). In einer Tabelle namens "Detail" habe ich dann 10 Spalten liegen nach dem obigen Schema benannt (1Dateils bis 10Details).

Ich habe mir aber mittlerweile anders beholfen: Nur noch zwei Spalten in der Tabelle. Details und Detailnr. Abfrage erfolgt über ein passendes SQL-Statement nach dem Muster : "SELECT Details FROM Detail WHERE Detailnr = "&Combobox1.text
Klappt wunderbar!
Stört mich nur, daß der andere Weg nicht hinhaut.

Gruß
Peter
Anzeige
;
Anzeige

Infobox / Tutorial

Recordset Field-Name mit String-Variable in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und drücke ALT + F11, um den VBA-Editor zu öffnen.

  2. Erstelle ein neues Modul: Klicke mit der rechten Maustaste auf "VBAProject (dein Arbeitsbuch)" und wähle Einfügen > Modul.

  3. Füge den folgenden Code ein, um ein Recordset zu öffnen:

    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim fieldName As String
    
    Set db = OpenDatabase("C:\DeinPfad\DeineDatenbank.accdb")
    Set rst = db.OpenRecordset("SELECT * FROM DeineTabelle")
  4. Verwende eine String-Variable für den Feldnamen:

    fieldName = "Feldname" ' Hier den echten Feldnamen einsetzen
  5. Lese die Werte in eine ComboBox ein:

    Do While Not rst.EOF
       ComboBox1.AddItem rst.Fields(fieldName).Value
       rst.MoveNext
    Loop
  6. Schließe das Recordset und die Datenbank:

    rst.Close
    db.Close

Häufige Fehler und Lösungen

  • Fehler: "Element nicht gefunden": Stelle sicher, dass die String-Variable den korrekten Feldnamen enthält. Überprüfe die Schreibweise und die Verwendung von eckigen Klammern.

  • Fehler: Endloser Wert in der ComboBox: Der Befehl MoveNext könnte fehlen. Achte darauf, dass du rst.MoveNext nach ComboBox1.AddItem verwendest, um zum nächsten Datensatz zu wechseln.


Alternative Methoden

  • Verwendung von ADO: Du kannst auch ein ADO Recordset verwenden, um auf Daten zuzugreifen. Dies ist besonders nützlich, wenn du mit Excel arbeiten möchtest:

    Dim conn As ADODB.Connection
    Dim rs As ADODB.Recordset
    
    Set conn = New ADODB.Connection
    conn.Open "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\DeinPfad\DeineDatenbank.accdb;"
    
    Set rs = New ADODB.Recordset
    rs.Open "SELECT * FROM DeineTabelle", conn
  • Direkter Zugriff ohne String-Variable: Statt einer String-Variable kannst du den Feldnamen direkt angeben:

    ComboBox1.AddItem rst.Fields("DeinFeldname").Value

Praktische Beispiele

Um Daten aus einer Tabelle namens "Detail" einzulesen, wo die Spalten "1Details" bis "10Details" benannt sind, könntest du den folgenden Code verwenden:

Dim detailField As String
detailField = ComboBox1.Text & "Details"

Do While Not rst.EOF
    ComboBox2.AddItem rst.Fields(detailField).Value
    rst.MoveNext
Loop

Tipps für Profis

  • Verwende Option Explicit: Dies hilft, Variablen zu deklarieren und zu vermeiden, dass Tippfehler unbemerkt bleiben.

  • Fehlerbehandlung: Implementiere Fehlerbehandlungsroutinen, um unerwartete Fehler abzufangen:

    On Error GoTo ErrorHandler
    ' Dein Code hier
    Exit Sub
    
    ErrorHandler:
    MsgBox "Ein Fehler ist aufgetreten: " & Err.Description

FAQ: Häufige Fragen

1. Kann ich auch mit Access auf ein Recordset zugreifen? Ja, du kannst das Access VBA Recordset verwenden, um Daten aus Access zu lesen. Der Code bleibt ähnlich, du musst jedoch sicherstellen, dass du die richtigen Referenzen gesetzt hast.

2. Wie kann ich die Werte einer ComboBox zurücksetzen? Um die Werte einer ComboBox zurückzusetzen, kannst du den folgenden Befehl verwenden:

ComboBox1.Clear

3. Was ist der Unterschied zwischen DAO und ADO? DAO (Data Access Objects) ist für den Zugriff auf Microsoft Access-Datenbanken optimiert, während ADO (ActiveX Data Objects) eine breitere Unterstützung für verschiedene Datenquellen bietet.

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