Avatar billede steensommer Praktikant
29. oktober 2011 - 10:39 Der er 13 kommentarer og
1 løsning

Danske tegn i Richtextbox

Hej

Jeg har (bittert) erfaret at de danske tegn ikke accepteres i en richtextbox.
Jeg har lavet lidt kode a la:

            Streng = "Notat = '" & Replace(RichTextBox1.Rtf, "'", "") & "'"
            Streng = Replace(Streng, "\'f8", "ø")
            Streng = Replace(Streng, "\'e6", "æ")
            Streng = Replace(Streng, "\'e5", "å")

...men det virker lidt underligt at skulle lave en sådan "work-around".
Kan det gøres mere elegant?
Avatar billede keysersoze Guru
29. oktober 2011 - 11:47 #1
nu fortæller du ikke hvilken du benytter, men det fleste har settings du kan pille ved så specialtegn tillades. Så tag et kig i dokumentationen til den pågældende editor og du vil højst sandsynligt finde svaret.
Avatar billede arne_v Ekspert
30. oktober 2011 - 01:47 #2
Streng = "Notat = '" & RichTextBox1.Text & "'"

vil jeg tro
Avatar billede steensommer Praktikant
30. oktober 2011 - 10:24 #3
Jeg benytter Microsoft Visual Basic 2008 og anvender Richtextbox i forbindelse med en windows form.
Jeg kan ikke anvende richtextbox.text idet jeg ønsker at beholde tekstens formatering: Richtextbox1.rtf
Avatar billede arne_v Ekspert
30. oktober 2011 - 16:03 #4
Saa forstaar jeg ikke problemet.

Alt som forstaar RTF formateringen vil ogsaa forstaa "\'f8".

Hvorimod "ø" kun vil blive forstaaet af RTF software som understoetter nogle af de nyere RTF versioner.
Avatar billede steensommer Praktikant
30. oktober 2011 - 16:14 #5
Problemet opstår når jeg forsøger at sende til Microsoft SQL database:


        Dim Connection As New SqlConnection(Conn)
        Connection.Open()
        Try
            Dim Streng As String
            Streng = "Notat = '" & RichTextBox1.Rtf & "'"
            Streng = Replace(Streng, "\'f8", "ø")
            Streng = Replace(Streng, "\'e6", "æ")
            Streng = Replace(Streng, "\'e5", "å")
            Streng = Replace(Streng, "\'d8", "Ø")
            Streng = Replace(Streng, "\'c6", "Æ")
            Streng = Replace(Streng, "\'c5", "Å")
            Streng = Replace(Streng, "\'bd", "½")
            Streng = Replace(Streng, "\'a7", "§")
            Streng = Replace(Streng, "'\", "")

            Dim Command As New SqlCommand("UPDATE [Præ-Noter] Set " & Streng & " WHERE ([Cpr nr]) = ('" & TxtCpr.Text & "')", Connection)
            Command.ExecuteNonQuery()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fejl opstået i GemPrænoter")
        End Try

        Connection.Close()
Avatar billede arne_v Ekspert
30. oktober 2011 - 16:17 #6
Dt er ' som driller dig.

Brug parameters!!
Avatar billede arne_v Ekspert
30. oktober 2011 - 16:18 #7
Avatar billede steensommer Praktikant
30. oktober 2011 - 16:30 #8
Det har du da sikkert ret i ...selvom fejlen kommer når jeg anvender danske tegn!?
Avatar billede arne_v Ekspert
30. oktober 2011 - 16:37 #9
Drop de replace og brug parameters.
Avatar billede steensommer Praktikant
31. oktober 2011 - 05:37 #10
Jeg har efter dine anvisninger ændret til:


        Dim Connection As New SqlConnection(Conn)
        Connection.Open()
        Try
            Dim Command As New SqlCommand("UPDATE [Præ-Noter] Set Notat = @Notat WHERE ([Cpr nr]) = @Cpr", Connection)
            Command.Parameters.Add("@Notat", SqlDbType.Text)
            Command.Parameters("@Notat").Value = RichTextBox1.Rtf
            Command.Parameters.Add("@Cpr", SqlDbType.NChar, 50)
            Command.Parameters("@Cpr").Value = TxtCpr.Text
            Command.ExecuteNonQuery()

        Catch ex As Exception
            MessageBox.Show(ex.Message, "Fejl opstået i GemPrænoter")
        End Try

        Connection.Close()


DET FUNGERER :-). TAK FOR DET! SVAR SÅ FÅR DU POINT.
Kan du anbefale et sted/steder hvor man kan læse/lære om PARAMATERS?
Avatar billede steensommer Praktikant
31. oktober 2011 - 06:24 #11
Et lille tillægs spørgsmål. Kan der forbedres noget i nedenstående reader:

  Private Sub FrmPræNoter_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        Dim Connection As New SqlConnection(Conn)
        Connection.Open()
        Try
            Dim Cmd As New SqlCommand("SELECT * FROM [Præ-noter] WHERE [Cpr nr] = @Cpr", Connection)
            With Cmd
                .Parameters.Add("@Cpr", SqlDbType.NChar, 50)
                .Parameters("@Cpr").Value = TxtCpr.Text
                .ExecuteNonQuery()
            End With

            Dim reader As SqlDataReader = Cmd.ExecuteReader()
            If reader.Read Then
                If Not reader.IsDBNull(2) Then
                    RichTextBox1.Rtf = reader.GetString(2).ToString
                Else
                    RichTextBox1.Rtf = ""
                End If
                reader.Close()
                reader = Nothing
            Else
                reader.Close()
                reader = Nothing
                Cmd = New SqlCommand("INSERT INTO [Præ-noter] ([Cpr nr]) VALUES (@Cpr)", Connection)
                With Cmd
                    .Parameters.Add("@Cpr", SqlDbType.NChar, 50)
                    .Parameters("@Cpr").Value = TxtCpr.Text
                    .ExecuteNonQuery()
                End With
            End If
        Catch ex As Exception
            Connection.Close()
            Connection = Nothing
            MessageBox.Show(ex.Message, "Fejl opstået i FrmPrænoter_Load")
        End Try
    End Sub
Avatar billede arne_v Ekspert
31. oktober 2011 - 14:07 #12
svar
Avatar billede arne_v Ekspert
31. oktober 2011 - 14:09 #13
Der er vist ikke meget som kan forbedres.

Xxxx = Nothing

skal ikke og boer ikke bruges i .NET

jeg ville noejes med at hente den eller de kolonner som jeg skal bruge
Avatar billede steensommer Praktikant
31. oktober 2011 - 17:42 #14
Tak :-)
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