Announcement

Collapse
No announcement yet.

Einfache(?) Frage vom Neuling

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Einfache(?) Frage vom Neuling

    Hallo,

    habe gestern erstmalig VB .NET (2005) und ADO.NET ausprobiert. Also mein später Einstieg in die Welt des .NET-Programmierens.
    Mein Problem.

    Ich greife auf eine Informix-DB via ODBC zu, was gut funktioniert. Folgendes Codefragment verwende ich um Daten aus einer Tabelle in einen ListView zu schreiben (hab Spalten- und Tabellennamen mal GROB vereinfacht):
    Code:
            Dim strSQL As String
            Dim lvItem As ListViewItem
    
            strSQL = "SELECT feld1, feld2, feld3 FROM tab1"
    
            Dim dA As New OdbcDataAdapter(strSQL, cn)
            Dim dS As New DataSet
            da.Fill(ds)
    
            Dim TB As DataTable = ds.Tables(0)
            For Each Satz As DataRow In TB.Rows
    
                lvItem = New ListViewItem
                lvItem = LV1.Items.Add(Satz.Item(0))
                lvItem.SubItems.Add(New ListViewItem.ListViewSubItem).Text = Satz.Item(1)
                lvItem.SubItems.Add(New ListViewItem.ListViewSubItem).Text = Satz.Item(2)
            Next
    Das gibt auch keine Probleme, hat beim ersten Versuch super funktioniert. Nur das folgende:
    Die Spalte "feld3", also in meinem Programm Satz.Item(2), bleibt immer leer, obwohl zweifelsohne Daten enthalten sind. Vom Typ her ist die Spalte in Informix als CHAR(1) definiert. Wenn ich die Spalte durch irgendeine andere ersetze (ist ne große Tabelle), dann klappt es immer, nur eben diese eine nicht! Gibt es da etwas worauf man aufpassen muss?

    Vielleicht habe ich einen grudnsätzlichen Denkfehler... Habe mich vom IntelliSense bei der Erstellung leiten lassen - und von meinen Erfahrungen aus Delphi, VB6.0 & Java.

    Nebenbei, nur so nice to have, falls jemanden von Euch auffällt dass IRGENDWAS aus dem Codefragment besonders umständlich ist, bin ich für jeden Hinweis dankbar.

    Viele Grüße

  • #2
    Meinst du so etwas:

    Code:
        Dim TB As DataTable = dS.Tables(0)
        With LV1
          .Columns.Clear()
          .View = View.Details
          .Columns.Add("Spalte1", 100, HorizontalAlignment.Center)
          .Columns.Add("Spalte2", 100, HorizontalAlignment.Center)
          .Columns.Add("Spalte3", 100, HorizontalAlignment.Center)
          .Items.Clear()
    
    
          For Each Satz As DataRow In TB.Rows
            lvItem = New ListViewItem
            lvItem = .Items.Add(Satz(0).ToString)
            lvItem.SubItems.Add(New ListViewItem.ListViewSubItem).Text = Satz(1).ToString
            lvItem.SubItems.Add(New ListViewItem.ListViewSubItem).Text = Satz(2).ToString
          Next
        End With
    Oder wie soll dein Ergebnsi aussehen...?
    Zuletzt editiert von M Merlin; 07.03.2007, 16:35.

    Comment


    • #3
      Na das Ergebnis ist eben ein ListView mit 3 Spalten (die hab ich schon in der Entwurfsansicht voreingestellt). Diese dann eben einfach mit den Werten Feld1, Feld2, feld3 aus der Tabelle tab1 füllen (was ja eine recht häufige Programmieraufgabe ist...).

      Es funktioniert ja auch. Auch die Variante mit
      Code:
             Satz(2).ToString
      anstelle
      Code:
             Satz.Item(2)
      hatte ich schon, ich erkenne aber keinen Unterschied im Verhalten.

      Mein Problem bezieht sich nicht auf den ListView, sondern ganz klar auf den Werteinhalt des DataRow-Objekts Satz, in dem die Werte für feld3 eben aus unerfindlichen Gründen leer bleiben (unabhängig davon ob ich das Ding nun in ein ListItemSubItem schreibe oder in einen normalen String lese oder oder oder...) obwohl in der Datenbanktabelle an sich IMMER ein Einbuchstabiger String (Informix-Datentyp 1 CHAR(1)) drinsteht. Ich greife auch definitiv die richtige Spalte sowohl in der SQL als auch im DataRow ab.

      Ich hatte gehofft dass ich entweder die DataRow-Klasse grundsätzlich falsch verstanden habe (als .NET-Anfänger verzeihlich) oder es mit CHAR(1) Besonderheiten zu beachten gibt von denen ich noch nix weiß. Bei ALLEN(!!!) anderen Feldern/Typen funktioniert es einwandfrei! Ich habe versucht den Fehler an anderer Stelle zu reproduzieren, keine Chance! Langsam kommt mir das echt spanisch vor.

      Also wenn einer eine Idee hat...

      Comment


      • #4
        Also, bei mir klappt das einwadfrei......
        Ohne leere Felder im DataRow....

        Wie sieht dein connectionstring aus..?


        Es funktioniert ja auch. Auch die Variante mit

        Code:
        Satz(2).ToString

        anstelle

        Code:
        Satz.Item(2)
        Wenn du Option Explicit eingeschaltet hättest würdest du mit der unteren Variante auf fehler laufen....

        Comment


        • #5
          Hallo,

          Ich greife auf eine Informix-DB via ODBC zu, was gut funktioniert.
          abgesehen davon, dass der ODBC-Treiber scheinbar die CHAR(1)-Daten verschluckt. Wenn ein OLE DB-Provider für die Informix-Datenbank greifbar ist, würde ich den Test mal mit dem aktuelleren Treiber wiederholen.

          Comment


          • #6
            Würde es mit OLEDB anstelle ODBC versuchen. Das ist aber für mich Neuland.
            Daher verzeihe man mir folgende Fragen... Kann mir vielleicht jemand sagen

            1)Welchen Provider man bei Informix nehmen kann bzw. wie kann ich herausfinden welche Provider zurzeit verfügbar sind?

            2)Wo man ggf. Provider herkriegt und wie installiert, ach Scheiße noch mal: WAS IS EIN PROVIDER???

            2)Wie ich den in SetNet eingestellten jeweiligen Standardbenutzer auslesen?

            So man entschuldige die plumpe Wortwahl...

            Vielen Dank für die geduldigen Antworten!!!!

            Comment


            • #7
              Du brauchst nur den ConnectionString zu ändern....

              hier nen Link für die Syntax:

              http://www.connectionstrings.com/?carrier=informix

              Comment

              Working...
              X