VBA - SQL in Visual Studio - Problem -> Fehler "Keine Daten für die Zeile/Spalte"

Hey Leute,

ich habe mal wieder ein Problem. Und zwar wird bei folgendem Code in der grafischen Ausgabe nichts ausgegeben. Ich erhalte nur den "Fehler" keine Daten für die Zeile/Spalte. Wo liegt das Problem?

Hier der Code:

Option Explicit On
Option Strict On
Imports System.IO
Imports System.Data.OleDb
Public Class frm_Kundenanzeige
Private Sub bt_Abbrechen_Click(ByVal sender As Object, ByVal e As EventArgs) Handles bt_Abbrechen.Click
frm_Menu.Show()
Me.Hide()
End Sub
Private Sub bt_Suchen_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles bt_Suchen.Click
Dim KundenNr As String
Dim Anrede As String
Dim Nachname As String
Dim Vorname As String
Dim Strasse As String
Dim Hausnummer As String
Dim PLZ As String
Dim Ort As String
Dim Land As String
Dim Telefon As String
Dim Fax As String
Dim Email As String
Dim Kontoinhaber As String
Dim IBAN As String
Dim BIC As String
Dim Bank As String
Dim Magazin As String
Dim Suchtext As String
Dim Suchfeld As String
'Werte vom Formular holen
Suchtext = tb_Suchtext.Text
If rb_KdNr.Checked Then
Suchfeld = "KdNr"
ElseIf rb_VName.Checked Then
Suchfeld = "Vorname"
ElseIf rb_NName.Checked Then
Suchfeld = "Nachname"
ElseIf rb_Strasse.Checked Then
Suchfeld = "Strasse"
ElseIf rb_PLZ.Checked Then
Suchfeld = "PLZ"
ElseIf rb_Stadt.Checked Then
Suchfeld = "Stadt"
ElseIf rb_Land.Checked Then
Suchfeld = "Land"
ElseIf rb_Telefon.Checked Then
Suchfeld = "Telefon"
ElseIf rb_Email.Checked Then
Suchfeld = "Email"
ElseIf rb_KtoInhaber.Checked Then
Suchfeld = "Kontoinhaber"
ElseIf rb_IBAN.Checked Then
Suchfeld = "IBAN"
Else
Suchfeld = "BIC"
End If

'Verbindung aufbauen
Dim strPfadDatei As String
Dim AccessDatei As New OpenFileDialog
AccessDatei.InitialDirectory = "E:"
AccessDatei.Filter = "accdb-Dateien (*.accdb) |*.accdb| alle Dateien (*.*) |*.*"
If AccessDatei.ShowDialog() = Windows.Forms.DialogResult.OK Then
strPfadDatei = AccessDatei.FileName
Dim strDBVerbindung As String
strDBVerbindung = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & strPfadDatei
Try
Dim Verbindung As New OleDb.OleDbConnection
Verbindung.ConnectionString = strDBVerbindung
Verbindung.Open()
Dim Ausfuehrer As New OleDbCommand
Ausfuehrer.Connection = Verbindung
'Ermittlung der Daten für den Primärschlüsselwert
Dim strSQL As String = "SELECT KdNr, Anrede, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Land, Telefon, Fax, Email, Kontoinhaber, IBAN, BIC, Bank FROM tblKunde WHERE " & Suchfeld & " LIKE '*" & Suchtext & "*' ;"
Dim Vorleser As OleDb.OleDbDataReader
Console.WriteLine(strSQL)
Ausfuehrer.CommandText = strSQL
Vorleser = Ausfuehrer.ExecuteReader()
Vorleser.Read()

' Dim alterKunde As New Kunde(KundenNr, Anrede, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Land, Telefon, Fax, Email, Kontoinhaber, IBAN, BIC, Bank)

' While Vorleser.Read()
KundenNr = CStr(Vorleser(0))
Anrede = CStr(Vorleser(1))
Nachname = CStr(Vorleser(2))
Vorname = CStr(Vorleser(3))
Strasse = CStr(Vorleser(4))
Hausnummer = CStr(Vorleser(5))
PLZ = CStr(Vorleser(5))
Ort = CStr(Vorleser(6))
Land = CStr(Vorleser(7))
Telefon = CStr(Vorleser(8))
Fax = CStr(Vorleser(9))
Email = CStr(Vorleser(10))
Kontoinhaber = CStr(Vorleser(11))
IBAN = CStr(Vorleser(12))
BIC = CStr(Vorleser(13))
Bank = CStr(Vorleser(14))
Dim alterKunde As New Kunde(KundenNr, Anrede, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Land, Telefon, Fax, Email, Kontoinhaber, IBAN, BIC, Bank)
alterKunde.FuegeKundeInListeHinzu(alterKunde)
' Loop
Verbindung.Close()
Dim zi As Integer 'Zeilenindex
zi = 0
dgvKunde.Rows.Clear()
dgvKunde.Columns.Add("spKundenNr", "KundenNr") 'spaltenname/überschrift im SGV
dgvKunde.Columns.Add("spAnrede", "Anrede")
dgvKunde.Columns.Add("spNachname", "Nachname")
dgvKunde.Columns.Add("spStrasse", "Strasse")
dgvKunde.Columns.Add("spHausnummer", "Hausnummer")
dgvKunde.Columns.Add("spPLZ", "PLZ")
dgvKunde.Columns.Add("spOrt", "Ort")
dgvKunde.Columns.Add("spLand", "Land")
dgvKunde.Columns.Add("spTelefon", "Telefon")
dgvKunde.Columns.Add("spFax", "Fax")
dgvKunde.Columns.Add("spEmail", "Email")
dgvKunde.Columns.Add("spKontoinhaber", "Kontoinhaber")
dgvKunde.Columns.Add("spIBAN", "IBAN")
dgvKunde.Columns.Add("spBIC", "BIC")
dgvKunde.Columns.Add("spBank", "Bank")
dgvKunde.Columns(0).Width = 80 'Breite der Spalten
dgvKunde.Columns(1).Width = 80
dgvKunde.Columns(2).Width = 80
dgvKunde.Columns(3).Width = 80
dgvKunde.Columns(4).Width = 80
dgvKunde.Columns(5).Width = 80
dgvKunde.Columns(6).Width = 80
dgvKunde.Columns(7).Width = 80
dgvKunde.Columns(8).Width = 80
dgvKunde.Columns(9).Width = 80
dgvKunde.Columns(10).Width = 80
dgvKunde.Columns(11).Width = 80
dgvKunde.Columns(12).Width = 80
dgvKunde.Columns(13).Width = 80
dgvKunde.Columns(14).Width = 80
dgvKunde.Columns(15).Width = 80

For Each Kunde In alterKunde.GetKundenliste
dgvKunde.Rows.Add(zi + 1, Kunde.KundenNr, Kunde.Anrede, Kunde.Nachname, Kunde.Vorname, Kunde.Strasse, Kunde.Hausnummer, Kunde.Hausnummer, Kunde.PLZ, Kunde.Ort, Kunde.Land, Kunde.Telefon, Kunde.Fax, Kunde.Email, Kunde.Kontoinhaber, Kunde.IBAN, Kunde.BIC, Kunde.Bank)
zi = zi + 1
Next
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End If

End Sub

End Class

Danke euch!

10 Kommentare

Kannst du mit dem Debugger Zeile für Zeile durchgehen und sagen, in welcher Zeile der Fehler geworfen wird? Würde extrem helfen


in der DB mal den sqlbefehl manuell eingeben und gucken ob es Werte gibt.
sonst wie schon gesagt debuggen

WTF, mach doch mal nen Breakpoint am Anfang der Codeausführung und spring dann manuell im Debugger von Zeile zu Zeile (War das F8? Ich erinnere mich gerade nicht ) Die Zeile, in der der Fehler geworfen wird, ist die interessante.

Alter! Nutze Pastebin.com um Code zu posten

Btw, lass dir mal die Query ausgeben und schau ob da ein Fehler drin ist.
Die Fehlermeldung weist wohl darauf hin, dass du versucht auf nicht vorhandene Daten zuzugreifen.

Fehler I:
Hausnummer = CStr(Vorleser(5))
PLZ = CStr(Vorleser(5))
PLZ sollte 6 sein. Die ganzen Indixe danach sind verschoben.

Fehler II:
Dim strSQL As String = "SELECT KdNr, Anrede, Nachname, Vorname, Strasse, Hausnummer, PLZ, Ort, Land, Telefon, Fax, Email, Kontoinhaber, IBAN, BIC, Bank FROM tblKunde WHERE " & Suchfeld & " LIKE '%" & Suchtext & "%' ;"
==> Hinweis: Vorleser.Read() -> Read() gibt einen Boolean Wert zurück, ob Daten gelesen worden sind oder nicht. Daten sollten nur ausgelesen werden, wenn if(xxx.Read())

Kein Plan von VBA, aber müsste es nicht
LIKE '%" & Suchtext & "%' ;"
heißen?

alles nett gemeint hier, aber du bist hier einfach falsch, sorry ^^

Darf man eigentlich mal fragen, was du genau programmierst? Welcher Zweck? Ich hoffe, dass das nicht beruflich ist^^


Wenn es um echte Bankdaten geht, hoffe ich das auch xD

Aber ich denke mal, im professionellen Bereich würde er doch C/C#/Java verwenden und nicht VBA oO

Ich meine, ich nutze VBA auch für Insellösungen im Unternehmen oder für eine unkomplizierte interne Rollen-Rechte-Verwaltung...alles andere (gerade mit grafischer Oberfläche) würde ich dann aber doch in einem Eclipse-Framework machen

Dein Kommentar
Avatar
@
    Text
    Top Diskussionen
    1. Nas oder Netzwerk HDD für Plex57
    2. Whatsapp-Sim in Dual-Sim Smartphone1010
    3. Wo ist der Dashcam Deal hin?610
    4. Faltrad zum Pendeln [Erfahrungen und Empfehlungen?]55

    Weitere Diskussionen