Como colorear sentencias SQL con VB.Net

Fecha: 30/Nov/2004 (24 de Noviembre de 2004)
Autor: Claudio Luque cluque@prominente.com.ar

 


Introducción:

La publicación de este articulo surge luego de que por razones laborales necesite hacer una herramienta de trazabilidad que permita ver desde la capa de presentación hasta las estructuras de las tablas intervinientes en cada etapa del desarrollo de un producto que realiza la empresa donde trabajo. Para lo cual necesitaba en un punto algo tan sencillo como mostrar el contenido de los stored procedures.

El código es bastante sencillo, espero que les sirva.

Como Funciona.

Dentro del método "ColorearSQL", se realiza el proceso, comenzando por colorear todo el texto del RichTextBox en negro con fuente Courier New 9.

Luego invoca a un método setTextColor, pasándole por parámetro la palabra a colorear y luego el color, por ejemplo:

       setTextColor("select", Color.Blue)

Básicamente se utilizan 3 colores para palabras reservadas dentro de las sentencias SQL, estos son Blue, Fucsia, Gray. El cuarto color es el Red, usado para las palabras entre comillas "'" o """. El Quinto color es el Green que se usa para cometarios, tanto cortos "--" como largos "/*____*/". Es por ello que luego de colorear las palabras se invoca a los métodos

      SetConstant(Color.Red)

      SetComment(Color.Green)

      SetCommentLong(Color.Green)

SetTextColor (para las palabras reservadas):

Private Sub setTextColor(ByVal pStr As String, ByVal pColor As Drawing.Color)

      Dim i As Integer
      Dim posAnt As Integer

      posAnt = -1

      RichTextBox1.SelectionStart = 0
      RichTextBox1.SelectionLength = 0

      For i = 0 To 1000

         If i = 0 Then
            RichTextBox1.Find(pStr, 0, RichTextBoxFinds.WholeWord)
         Else
            RichTextBox1.Find(pStr, RichTextBox1.SelectionStart + 1, RichTextBoxFinds.WholeWord)
         End If

         If posAnt = RichTextBox1.SelectionStart Then
            Exit For
         End If

         RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular)
         RichTextBox1.SelectionColor = pColor
         posAnt = RichTextBox1.SelectionStart

      Next

   End Sub

 SetConstant (para las palabras entre comillas):

 Private Sub SetConstant(ByVal pColor As Drawing.Color)
      Dim i As Integer
      Dim posAnt As Integer

      Dim pos1, pos2 As Integer

      posAnt = -1

      RichTextBox1.SelectionStart = 0
      RichTextBox1.SelectionLength = 0

      For i = 0 To 1000

         If i = 0 Then
            RichTextBox1.Find("'", 0, RichTextBoxFinds.None)
         Else
            RichTextBox1.Find("'", pos2 + 1, RichTextBoxFinds.None)
         End If

         pos1 = RichTextBox1.SelectionStart

         RichTextBox1.Find("'", RichTextBox1.SelectionStart + 1, RichTextBoxFinds.None)

         pos2 = RichTextBox1.SelectionStart

         If posAnt = pos1 Or RichTextBox1.SelectedText = "" Then
            Exit For
         End If

         RichTextBox1.SelectionStart = pos1
         RichTextBox1.SelectionLength = pos2 - pos1 + 1

         RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular)
         RichTextBox1.SelectionColor = pColor
         posAnt = RichTextBox1.SelectionStart

      Next

End Sub
SetComment(para los comentarios cortos):
Private Sub SetComment(ByVal pColor As Drawing.Color)
      Dim strLine As String
      Dim strWords As String

      For Each strLine In RichTextBox1.Lines

         If InStr(strLine, "--") > 0 Then

            strWords = Mid(strLine, InStr(strLine, "--"))

            setTextColor(strWords, pColor)

         End If
      Next
End Sub
SetComment(para los comentarios cortos):

Otra vez texto normal.

Private Sub SetCommentLong(ByVal pColor As Drawing.Color)
      Dim i As Integer
      Dim posAnt As Integer

      Dim pos1, pos2 As Integer

      posAnt = -1

      RichTextBox1.SelectionStart = 0
      RichTextBox1.SelectionLength = 0

      For i = 0 To 1000

         If i = 0 Then
            RichTextBox1.Find("/*", 0, RichTextBoxFinds.None)
         Else
            RichTextBox1.Find("/*", pos2 + 1, RichTextBoxFinds.None)
         End If

         pos1 = RichTextBox1.SelectionStart

         RichTextBox1.Find("*/", RichTextBox1.SelectionStart + 1, RichTextBoxFinds.None)

         pos2 = RichTextBox1.SelectionStart

         If posAnt = pos1 Or RichTextBox1.SelectedText = "" Then
            Exit For
         End If

         RichTextBox1.SelectionStart = pos1
         RichTextBox1.SelectionLength = pos2 - pos1 + 1

         RichTextBox1.SelectionFont = New Font("Courier New", 9, FontStyle.Regular)
         RichTextBox1.SelectionColor = pColor
         posAnt = RichTextBox1.SelectionStart

      Next

End Sub

 


ir al índice

Fichero con el código de ejemplo: cluque_ColorearSQL.zip - Tamaño 8 KB