| |

ADO.NET / DatenbankenOracle-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) |  |
 | 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 |
  |
|
sevGraph (VB/VBA) 
Grafische Auswertungen
Präsentieren Sie Ihre Daten mit wenig Aufwand in grafischer Form. sevGraph unterstützt hierbei Balken-, Linien- und Stapel-Diagramme (Stacked Bars), sowie 2D- und 3D-Tortendiagramme und arbeitet vollständig datenbankunabhängig! Weitere InfosTipp des Monats Access-Tools Vol.1 
Über 400 MByte Inhalt
Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB
Nur 24,95 EURWeitere Infos
|
|
|
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
|
|