Avatar billede steensommer Praktikant
23. april 2006 - 23:34 Der er 4 kommentarer og
1 løsning

Vise søgeresultat i Listbox

Hej

Vha en "gammel" kode fra VBA forsøger jeg i en VB .Net windows applikation at vise et søgeresultat i en listbox. Den søger umiddelbart rigtigt men viser kun det første resultat og jeg har på fornemmelsen at: "On error resume next" nok ikke er den bedste kode at anvende ;0)
Hvorledes kan det gøres bedre og hvad er der ellers galt med koden?

NB! Det er sammensætningen af 3 tabeller der gør koden lidt uoverskuelig - Sorry!)

vh Steen

        On Error Resume Next
        Dim strSQL As String
        Dim Conn As ADODB.Connection
        Dim rs As ADODB.Recordset
        Dim IBox As String, txt As String

        IBox = InputBox("Indtast søgestreng")

        Conn = New ADODB.Connection
        rs = New ADODB.Recordset

        Conn.Open("Provider=sqloledb;" & _
              "Data Source=SERVER;" & _
              "Initial Catalog=PatientregisteretSQL3;" & _
              "Integrated Security=SSPI;")

        txt = "SELECT [Patient nr], Mors, [CPR nr], Fornavn, Efternavn, Adresse, [Postnr og bynavn], Telefon, [INDKALDELSE DATO], UGEDAG, [KLOKKESLÆT], [Egen læge], [Lægens adresse], [Lægens postnr og by], [Henvisende Sygehus], [Att henvisende], AMT, [Ugedag Amb], Amb, Kl, [Indlæggelsesdiagnose], [behandlingsdiagnose 1], [behandlingsdiagnose 2], [REf nr (Norgept)], [Operations dato], [Operation type], [Ægtefelles navn], Udskrivelse, Kode, Kommunekoder, PræDato, PræTid, PræDag FROM RFA WHERE [Cpr nr] LIKE '" & IBox & "%'"
        txt = txt & " UNION SELECT [Patient nr], Mors, [CPR nr], Fornavn, Efternavn, Adresse, [Postnr og bynavn], Telefon, [INDKALDELSE DATO], UGEDAG, [KLOKKESLÆT], [Egen læge], [Lægens adresse], [Lægens postnr og by], [Henvisende Sygehus], [Att henvisende], AMT, [Ugedag Amb], Amb, Kl, [Indlæggelsesdiagnose], [Behandlingsdiagnose 1], [Behandlingsdiagnose 2], [REf nr (Norgept)], [Operations dato], [Operation type], [Ægtefelles navn], Udskrivelse, Kode, Kommunekoder, PræDato, PræTid, PræDag FROM [PCI og KAG] WHERE [Cpr nr] LIKE '" & IBox & "%'"
        txt = txt & " UNION SELECT [Patient nr], Mors, [CPR nr], Fornavn, Efternavn, Adresse, [Postnr og bynavn], Telefon, [INDKALDELSE DATO], UGEDAG, [KLOKKESLÆT], [Egen læge], [Lægens adresse], [Lægens postnr og by], [Henvisende Sygehus], [Att henvisende], AMT, [Ugedag Amb], Amb, Kl, [Indlæggelsesdiagnose], [Behandlingsdiagnose 1], [Behandlingsdiagnose 2], [REf nr (Norgept)], [Operations dato], [Operation type], [Ægtefelles navn], Udskrivelse, Kode, Kommunekoder, PræDato, PræTid, PræDag FROM [EKKO] WHERE [Cpr nr] LIKE '" & IBox & "%'"
        txt = txt & " UNION SELECT [Patient nr], Mors, [CPR nr], Fornavn, Efternavn, Adresse, [Postnr og bynavn], Telefon, [INDKALDELSE DATO], UGEDAG, [KLOKKESLÆT], [Egen læge], [Lægens adresse], [Lægens postnr og by], [Henvisende Sygehus], [Att henvisende], AMT, [UGEDAG amb], AMB, KL, [Indlæggelsesdiagnose], [Behandlingsdiagnose 1], [Behandlingsdiagnose 2], [REf nr (Norgept)], [Operations dato], [Operation type], [Ægtefelles navn], Udskrivelse, Kode, Kommunekoder, PræDato, PræTid, PræDag FROM Kartotek WHERE [Cpr nr] LIKE '" & IBox & "%'"

        strSQL = txt

        rs.Open(strSQL, Conn)
        rs.MoveFirst()

        While Not rs.EOF
            Form4.ListBox1.Items.Add(rs.GetString)
            rs.MoveNext()
        End While
        Form4.Show()

        rs = Nothing

    End Sub
Avatar billede steensommer Praktikant
25. april 2006 - 23:22 #1
Hmm

Jeg har lavet om på koden men nu viser den kun "Amt" (eller hvilket felt jeg måtte ønske). Til gengæld søger den korrekt - jeg mangler bare at kunne viser mange Column fra databasen:

Public Class FrmSøg
   
    Function BuildCnnStr(ByVal strServer As String, _
        ByVal strDatabase As String) As String

        Dim strTemp As String
        strTemp = "Provider=SQLOleDB; Data Source=" & strServer & ";"
        strTemp &= "Initial Catalog=" & strDatabase & ";"
        strTemp &= "Integrated Security=SSPI"

        Return strTemp
    End Function

    Private Sub btnLoadList_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnLoadList.Click
        Dim odData As OleDb.OleDbDataAdapter
        Dim dtList As DataTable = New DataTable()

        Dim strSQL As String

        '-- Create the SQL String
        strSQL = "Select * From Kartotek Where [Cpr nr] Like '" & Me.TextBox1.Text & "%'"


        '-- Set up the exception catch
        Try

            '-- Create an instance of the data adapter,
            ' and then fill the data table
            odData = New OleDb.OleDbDataAdapter(strSQL, BuildCnnStr("Server", "PatientregisteretSQL3"))
            odData.Fill(dtList)

            '-- Bind the data to the list box
            ListBox1.DataSource = dtList
            ListBox1.DisplayMember = "Amt"
            ListBox1.ValueMember = "Cpr nr"

        Catch oexpData As OleDb.OleDbException
            MsgBox(oexpData.Message)
        End Try



    End Sub

End Class
Avatar billede danm Nybegynder
26. april 2006 - 02:46 #2
Jeg er ikke sikker, men tror ikke at en listbox kan vise flere kolloner med data som hænger sammen.

Har du overvejet at bruge datagridview?

Der kan du også bruge dataadapter og så vises alle de resultater som du beder om i sql sætningen.

Så skal du indsætte en datagridview i din form og istedet for at binde til textbox bruge:

DataGridView1.DataSource = oddata
DataGridView1.DataMember = "Kartotek"

Jeg tror det virker. Jeg bruger nemlig selv dataset i stedet for datatable. Men prøv da at se..
Avatar billede steensommer Praktikant
26. april 2006 - 08:41 #3
Hej danm
Det var da lige det der skulle til. Jeg synes til gengæld ikke at følgende har den store funktion?
DataGridView1.DataMember = "Kartotek"

Kan man vha DataGridView også selecte og manipulere data?

vh Steen

NB! Svar lige så får du point :0)
Avatar billede danm Nybegynder
26. april 2006 - 20:39 #4
Hej igen,

Det da godt (o=

Jeg er heller ikke sikker på hvor vigtig datamember ="kartotek" den er. Jeg mener den gav lidt problemer da jeg udelod den selv, men hvis der ikke sker noget ved at slette den så kan den sikkert undværes.

Du kan godt ændre i dataene, men jeg er ikke helt sikker på hvordan du gemmer dem. Eller kan du også sætte den som readonly.
Måden du læser en værdi i en celle skal jeg nok lige skrive som en kommentar her lidt senere. Jeg skal lige have fundet den i min egen kode....  (o=

Men jeg mener det er noget lignende:

x= datagridview1.Rows(rækkenr).cells(kollonne nr).value

Men vender lige tilbage inden for ganske kort tid...
Avatar billede steensommer Praktikant
26. april 2006 - 21:33 #5
Tak for det :0)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester