lunes, septiembre 24, 2007

VFP: Ejecutar un script SQL por código

Hoy me encontré con una pregunta en foro de programadores de VFP, sobre como hacer para ejecutar un script SQL desde VFP.

Me topé con este problema hace ya unos cuantos años, y recuerdo que fue muy frustrante darme cuenta que el comando SQLEXEC() no estaba diseñado para ejecutar varias instrucciones sino mas bien una sola.

En aquel tiempo se me ocurrió que dado que en un script SQL todas las instrucciones se terminan con un comando GO, se podría utilizar este comando como un "separador", a fin de aplicar un "parsing" al script SQL y usar SQLEXEC() para ejecutar cada instrucción individualmente.

El código pueden copiarlo desde el artículo original en mi website:
Como ejecutar un script SQL desde VFP

martes, septiembre 11, 2007

ASP.NET 2.0: Encontrar un control en el HeaderTemplate de un WizardControl

Bueno, AL FIN encontré algo de tiempo para desempolvar este blog y ver si ahora si (por enésima vez) me propongo actualizarlo frecuentemente.

Hoy descubrí la maravilla del Wizard Control del ASP.NET 2.0, y como con todas las cosas que tienen que ver en particular con ASP.NET y en general con MS, la alegría no tardo en dar paso a la frustación.

RESULTA que el WizardControl permite configurar un encabezado usando el tag HeaderTemplate, en donde se puede colocar lo que uno quiera, incluyendo casi cualquier tipo de control.

En mi caso, tenia un panel con un table adentro que queria mostrar bajo ciertas condiciones. Por lo tanto, intente obtener una referencia al panel usando el consabido FindControl:
Dim myPanel As Panel
myPanel = CType(Me.Wizard1.FindControl("pnlError"),pnlError)

Según la documentación de MS, esto debería funcionar sin problemas... la clave aqui esta en "DEBERIA". Resulta que NO funciona. Investigando en San Google, y luego de mucho buscar, me encontré con la maravilla de el método FindControl no recorre todos los objetos en su búsqueda por el objeto cuyo ID se le indicó.

La siguiente función (originalmente hecha en C# por JS Greenwood) soluciona este "problemita", buscando un control en TODOS los controles contenidos en el contenedor indicado:
Public Function MyFindControl(ByVal parent As Control, _
                              ByVal id As String) As Control
     If parent.ID = id Then
         Return parent
     End If
     Dim child As Control
     For Each child In parent.Controls
         Dim recurse As Control = MyFindControl(child, id)
         If Not recurse Is Nothing Then
             Return recurse
         End If
     Next
     Return Nothing
End Function

Entonces, ahora en lugar de usar el FindControl del WizardControl usamos la funcion MyFindControl:

Dim myPanel As Panel
myPanel = CType(MyFindControl(Me.Wizard1,"pnlError"),pnlError)


El link original del artículo de JS Greenwood lo pueden encontrar aqui:
http://www.asptoday.com/Content.aspx?id=2359


Victor Espina