vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
Zippen wie die Profis!  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

ADO.NET / Datenbanken
Oracle-Datenbank, Recordset zeilenweise durchlaufen für Listbox? 
Autor: Olli.U
Datum: 18.09.13 13:42

Hallo zusammen,

ich arbeite mich gerade in Visual Basic ein (Visual Studio Express), nachdem ich zuvor überwiegend mit ACCESS gearbeitet habe.
Soweit komme ich ganz gut zurecht, habe aber ein Problem mit den Recordsets.

Jetzt versuche ich gerade,
- auf eine Oracle-Datenbank zuzugreifen (OK) und dort
- Werte aus einer Tabelle auszulesen (OK) und diese
- in ein Listenfeld einzutragen (nur umständlich).

Konkret geht es darum, den Namen bestimmter Views aus der Tabelle "cat" auszulesen.
Der Zugriff auf die Datenbank funktioniert und ich erhalte auch ein Ergebnis.
Allerdings habe ich Probleme im Umgang mit dem Recordset.

Ich suche nach einer Möglichkeit, das Recordset zeilenweise zu durchlaufen und die Zeilen dann in eine Listbox zu schreiben.

Hier ist "meine" Lösung, die aber leider nicht vor Eleganz strotzt.

Gegeben ist ein
- Formular "Form1" und darauf
- Button "Button1" und
- Listenfeld "lstviews"

Public Class Form1
 
    Private Sub Button1_Click(sender As Object, e As EventArgs) Handles _
      Button1.Click
 
        'Definition ADO-Datenbank-Connection auf Oracle-Datenbank
        'vorher Verweis auf ADO-DB setzen
        Dim conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim sql As String
        Dim strConnection As String
        strConnection = "Provider=MSDASQL.1;Password=MEINPASSWORT;Persist" & _
          "Security Info=True;User ID=MEINEID;Data Source=MEINEDATENBANK"
 
        'Definition Array und Zähler für Recordset-Ergebnis
        Dim arrRecordset() As String
        Dim i As Integer
 
        'Verbindung herstellen
        conn = New ADODB.Connection
        rs = New ADODB.Recordset
        conn.Open(strConnection)
 
        'Daten abrufen - alle Views, die mit VCM_ beginnen
        sql = "Select cat.Table_Name from cat where table_type = 'VIEW'  and" & _
          "Table_Name like 'VCM_%' order by table_name"
        rs.Open(sql, conn, ADODB.CursorTypeEnum.adOpenDynamic, _
        ADODB.LockTypeEnum.adLockReadOnly)
 
        'Prüfen, ob Daten gefunden, sonst Verbindung schließen, Prozedur beenden
        If rs.EOF Then
            MsgBox("Keine Daten gefunden")
            rs.Close()
            Exit Sub
        End If
 
        'Listbox: Alte Werte löschen
        lstViews.Items.Clear()
 
        'Abarbeiten des Arrays ...
        For i = LBound(arrRecordset) To UBound(arrRecordset)
 
            If Len(arrRecordset(i)) > 0 Then
                '>0 ist notwendig, weil die rs.GetString-Methode ein ";" ans 
                ' Ende des Strings setzt
                Me.lstViews.Items.Add(arrRecordset(i))
 
                'zum Testen:
                'MsgBox(arrRecordset(i))
                'debug.print(arrRecordset(i))
            Else
                'zum Testen für letztes Element oder Nulllängen-Elemente 
                ' zwischendrin
                'MsgBox("Länge 0")
            End If
        Next
 
        rs.Close()
 
    End Sub
End Class
Im Code oben muss ich umständlich mit einem Array und Split arbeiten, um das Recordset auseinanderzufummeln; dabei greife ich in der SQL nur EIN Feld ab...

'...
'Ergebnis des Recordset in Array lesen
arrRecordset = Split(rs.GetString(, -1, , ";", ""), ";")
'... etc. und dann so weiter wie oben
In ACCESS/EXCEL geht das zeilenweise auslesen des Recordsets
Etwa so:

Do Until (rs.EOF Or rs.BOF)
  Me.lstViews.Items.Add(rs!Table_Name) '<--- das da ist mein Problem!
  rs.MoveNext
Loop
Das hier kriege ich einfach nicht hin und ich weiß auch nicht mehr, wo ich noch suchen soll:

Mit ACCESS geht das in etwa so:
Me.lstViews.Items.Add(rs!Table_Name)

Aber Visual Basic mag das nicht.
Probiert habe ich unter anderem auch
Me.lstViews.Items.Add(rs.Fields.Item(0))

Geht aber auch nicht und ein rs.Getstring() schreibt mir alle Views ohne Trennzeichen hintereinander in Zeile 1 des Listenfeldes - auch nicht gerade hilfreich.

Daher meine Frage:
Wie kann ich die einzelnen Datensätze eines Recordsets einzeln durchlaufen und gezielt bestimmte Felder ansprechen (irgendwann habe ich bestimmt eine Abfrage mit mehr als einem Feld .
Dafür gibt es doch bestimmt eine Methode, oder?

Danke schon mal für jede Hilfe,

Olli

---
Verwendete Programmversionen:
Windows 7 64 bit sowie Windows 10 Prof.
Visual Studio 13 Professional
Microsoft Prof. 2010 (= Version 14)

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
Oracle-Datenbank, Recordset zeilenweise durchlaufen für List...2.984Olli.U18.09.13 13:42
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.642ModeratorDaveS18.09.13 15:30
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.826Olli.U20.09.13 11:04
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.565ModeratorFZelle21.09.13 13:25
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.601Olli.U21.09.13 15:29
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.606ModeratorFZelle21.09.13 21:47
Re: Oracle-Datenbank, Recordset zeilenweise durchlaufen für ...1.582Olli.U22.09.13 18:24

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel