Fetstil Fetstil Kursiv Understrykning linje färgläggning tabellverk Punktlista Nummerlista Vänster Centrerat högerställt Utfyllt Länk Bild htmlmode
  • Forum & Blog
    • Forum - översikt
      • .Net
        • asp.net generellt
        • c#
        • vb.net
        • f#
        • silverlight
        • microsoft surface
        • visual studio .net
      • databaser
        • sql-server
        • databaser
        • access
        • mysql
      • mjukvara klient
        • datorer och komponenter
        • nätverk, lan/wan
        • operativsystem
        • programvaror
        • säkerhet, inställningar
        • windows server
        • allmänt
        • crystal reports
        • exchange/outlook
        • microsoft office
      • mjukvara server
        • active directory
        • biztalk
        • exchange
        • linux
        • sharepoint
        • webbservers
        • sql server
      • appar (win/mobil)
      • programspråk
        • c++
        • delphi
        • java
        • quick basic
        • visual basic
      • scripting
        • asp 3.0
        • flash actionscript
        • html css
        • javascript
        • php
        • regular expresssion
        • xml
      • spel och grafik
        • DirectX
        • Spel och grafik
      • ledning
        • Arkitektur
        • Systemutveckling
        • krav och test
        • projektledning
        • ledningsfrågor
      • vb-sektioner
        • activeX
        • windows api
        • elektronik
        • internet
        • komponenter
        • nätverk
        • operativsystem
      • övriga forum
        • arbete karriär
        • erbjuda uppdrag och tjänster
        • juridiska frågor
        • köp och sälj
        • matematik och fysik
        • intern information
        • skrivklåda
        • webb-operatörer
    • Posta inlägg i forumet
    • Chatta med andra
  • Konto
    • Medlemssida
    • Byta lösenord
    • Bli bonsumedlem
    • iMail
  • Material
    • Tips & tricks
    • Artiklar
    • Programarkiv
  • JOBB
  • Student
    • Studentlicenser
  • KONTAKT
    • Om pellesoft
    • Grundare
    • Kontakta oss
    • Annonsering
    • Partners
    • Felanmälan
  • Logga in

Hem / Forum översikt / inlägg

Posta nytt inlägg


recordset problem

Postades av 2006-09-20 23:56:59 - Joacim Linnell, i forum vb.net, Tråden har 6 Kommentarer och lästs av 1103 personer

Har problem med att få ut värden i en ListView i VB.net
Men får bara följande fel hela tiden.

"Unable to cast COM object of type 'System.__ComObject' to class type 'System.String'. Instances of types that represent COM components cannot be cast to types that do not represent COM components; however they can be cast to interfaces as long as the underlying COM component supports QueryInterface calls for the IID of the interface."

Vad gör jag för fel????

I min Form har jag gjort enligt nedan

Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim maxcols
        Dim A
        Dim B
        Dim Key As String
        

        ListView1.View = View.Details
        ListView1.Columns.Clear()
        ListView1.Items.Clear()

        ' starta connection
        InitADO(4)

        rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)

        If Not rst.EOF Or rst.BOF Then
            maxcols = rst.Fields.Count - 1
            For A = 0 To maxcols
                ListView1.Columns.Add(rst(A).Name)
                ListView1.LabelWrap = True

            Next
            B = 1
            Do While Not rst.EOF

                Key = Chr(B + 64)

                ListView1.Items.Add(B, Key & Str(A), rst(0)) ' <-----HÄR UPPKOMMER FELET

                For A = 1 To maxcols
                    If IsDBNull(rst(A)) Then
                        ListView1.Items(B).SubItems.Add(rst(A))
                    Else
                        ListView1.Items(B).SubItems.Add("NOLL")
                    End If
                    B = B + 1
                Next
                rst.MoveNext()
            Loop
            rst.Close()

        End If

                ' stäng connection
        ClearADO()
    End Sub


Och i modul
Module Module1
    Public con As ADODB.Connection
    Public rst As ADODB.Recordset

    Public Enum dbDatabaseType
        dbSQLServer = 1
        dbOracleServer = 2
        dbAccess = 3
        dbdBase = 4
    End Enum

    Public Enum dbRecordsetType
        dbOpenAstable = 1
        dbOpenAsquery = 2
    End Enum

    Public Function InitADO(ByVal DatabaseType As dbDatabaseType) As Boolean

        con = New ADODB.Connection
        rst = New ADODB.Recordset
        Dim ConnectionString As String
        ' access utan dsn
        ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Inetpub\sample.mdb"
        ' access eller sql med dsn
        'ConnectionString = "DSN=Testaren;uid=guest;pwd=demo"

        ' öppnar anslutningen
        On Error Resume Next
        con.Open(ConnectionString)
        If con.Errors.Count > 0 Then
            MsgBox("Anslutningen misslyckades!" & vbCrLf & _
                   con.Errors(0).Description)
            ClearADO()
            End
        Else
            MsgBox("Du är ansluten till databasen")
        End If

    End Function
    Public Sub ClearADO()
        rst = Nothing
        con = Nothing
    End Sub
    Public Function CreateRecordset(ByVal Indata As String, ByVal RecordsetType As dbRecordsetType) As ADODB.Recordset
        Dim rsTmp As New ADODB.Recordset
        ' Input: Indata
        '        Här kan du antigen ange ett tabellnamn
        '        eller en select-sats
        ' Retur: CreateRecordset
        '        Det data som returneras

        Select Case RecordsetType
            Case 1

                'rsTmp.CursorLocation = adUseClient
                rsTmp.CursorLocation = CursorLocationEnum.adUseClient
                rsTmp.Open(Indata, con, CursorTypeEnum.adOpenDynamic, LockTypeEnum.adLockBatchOptimistic)
            Case Else
                rsTmp = con.Execute(Indata)
        End Select

        CreateRecordset = rsTmp
        rsTmp = Nothing

    End Function
End Module


Svara

Sv: recordset problem

Postades av 2006-09-21 07:46:14 - Jenny Månsson

Så här ska du skriva:
rst(0).ToString()


Svara

recordset problem och Listview.subitems

Postades av 2006-09-21 20:15:02 - Joacim Linnell

Ja det hjälpte med .value.tostring()
Så nu fungerar den biten med just att fylla subitems på listview korrekt.
Columnerna blir rätt
fyller första raden med de tre columnerna
men på andra och resterande raden fylls enbart första kolumen som innehåller ett idnummer från tabellen.

Någon som har ett bra tips på att lösa det hela?
Jag blir inte klok och hittar inget på nätet heller...
VB.net som sagt.



Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
        Dim MaxCols As Integer
        Dim A
        Dim B As Integer
        Dim Key As String
        B = -1
        ListView1.View = View.Details
        ListView1.Columns.Clear()
        ListView1.Items.Clear()

        ' starta connection
        InitADO(4)

        rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)

        If Not rst.EOF Or rst.BOF Then
            maxcols = rst.Fields.Count - 1
            For A = 0 To maxcols
                ListView1.Columns.Add(rst(A).Name)
                'ListView1.LabelWrap = True

            Next
            B = B + 1

            Do While Not rst.EOF

                Key = Chr(B + 64)

                ListView1.Items.Add(Key & Str(A), rst(0).Value.ToString, B)
                
                For A = 1 To maxcols


                    If Not IsDBNull(rst(A).Value.ToString) Then
                        
                        ListView1.Items(B).SubItems.Add(rst(A).Value.ToString)
                    Else
                        
                        ListView1.Items(B).SubItems.Add("NOLL")
                    End If

                Next
                rst.MoveNext()

            Loop
            rst.Close()

        End If

                ' stäng connection
        ClearADO()
    End Sub


Svara

Sv: recordset problem och Listview.subitems

Postades av 2006-09-21 21:03:28 - Jenny Månsson

På denna raden ska du inte använda tostring:

If Not IsDBNull(rst(A).Value.ToString) Then


Svara

Sv:recordset problem och Listview.subitems

Postades av 2006-09-21 21:54:08 - Joacim Linnell

tar jag bort .value.toString()
så får jag följande Error:
så det fungerar inte alls.
HJälp!



Error 1 Overload resolution failed because no accessible 'Add' can be called without a narrowing conversion:
'Public Function Add(text As String) As System.Windows.Forms.ListViewItem.ListViewSubItem': Argument matching parameter 'text' narrows from 'ADODB.Field' to 'String'.
'Public Function Add(item As System.Windows.Forms.ListViewItem.ListViewSubItem) As System.Windows.Forms.ListViewItem.ListViewSubItem': Argument matching parameter 'item' narrows from 'ADODB.Field' to 'System.Windows.Forms.ListViewItem.ListViewSubItem'. C:\Documents and Settings\Joacim Linnéll\My Documents\Visual Studio 2005\Projects\WindowsApplication1\WindowsApplication1\Form1.vb


Svara

Sv: recordset problem och Listview.subitems

Postades av 2006-09-22 07:49:58 - Jenny Månsson

Jo men du ska ta bort till tostring! Det gjorde att du kom en rad längre! Du kom i och med det in i if satsen på första raden där du försöker lägga in en subitems. Tidigare kom du in i subitems där du lade in NOLL.

Felmeddelandet säger att det blir fel på raden:
ListView1.Items(B).SubItems.Add(rst(A).Value.ToString)

Varför detta blir fel i vb.net är jag inte riktigt säker på då jag mestadels håller på med C#. Titta i dokumentationen för ListView.subitems.


Svara

Sv:recordset problem och Listview.subitems

Postades av 2006-09-22 08:41:53 - Joacim Linnell

YES!
Tack för all hjälp Jenny.
NU har det löst sig hade satt B=B+1 på felställe, ska sitt inne i Do While.
och rensade lite i koden så här blev det.


Dim MaxCols As Integer
        Dim A As Integer
        Dim B As Integer
        Dim Key As String
        B = -1
        ListView1.View = View.Details
        ListView1.FullRowSelect = True
        ListView1.GridLines = True
        ListView1.Columns.Clear()
        ListView1.Items.Clear()

        ' starta connection
        InitADO(4)

        rst = CreateRecordset("tblTest", dbRecordsetType.dbOpenAstable)

        If Not rst.EOF Or rst.BOF Then
            maxcols = rst.Fields.Count - 1
            For A = 0 To CInt(MaxCols)
                ListView1.Columns.Add(rst.Fields(A).Name)
                'ListView1.LabelWrap = True

            Next

            Do While Not rst.EOF
                B = B + 1

                Key = Chr(B + 64)

                ListView1.Items.Add(Key & Str(A), rst.Fields(0).Value.ToString, B)
                For A = 1 To CInt(MaxCols)

                    ListView1.Items(B).SubItems.Add(rst.Fields(A).Value)

                Next
                rst.MoveNext()

            Loop
            rst.Close()

        End If

                ' stäng connection
        ClearADO()
    End Sub



Svara

Nyligen

  • 19:55 kick-off med fokus på hälsa?
  • 19:53 kick-off med fokus på hälsa?
  • 16:24 Föreslå en skönhetsklinik online
  • 16:23 Föreslå en skönhetsklinik online
  • 18:42 Hvor finder man håndlavede lamper
  • 18:41 Hvor finder man håndlavede lamper
  • 16:36 Allt du behöver veta om keramiskt
  • 16:14 Vem anlitar man egentligen när tak

Sidor

  • Hem
  • Bli bonusmedlem
  • Läs artiklar
  • Chatta med andra
  • Sök och erbjud jobb
  • Kontakta oss
  • Studentlicenser
  • Skriv en artikel

Statistik

Antal besökare:
Antal medlemmar:
Antal inlägg:
Online:
På chatten:
4 570 725
27 958
271 751
518
0

Kontakta oss

Frågor runt konsultation, rådgivning, uppdrag, rekrytering, annonsering och övriga ärenden. Ring: 0730-88 22 24 | pelle@pellesoft.se

© 1986-2013 PelleSoft AB. Last Build 4.1.7169.18070 (2019-08-18 10:02:21) 4.0.30319.42000
  • Om
  • Kontakta
  • Regler
  • Cookies