Dim i As Integer
Dim field As System.Reflection.FieldInfo
Dim lblruc As Label
For i = 1 To psComReg.Length()
field = Me.GetType().GetField("lbl_5_" + i.ToString(), _
System.Reflection.BindingFlags.NonPublic Or System.Reflection.BindingFlags.Instance)
lblruc = DirectCast(field.GetValue(Me), Label)
lblruc.Text = psComReg(i - 1)
Next
Friday, August 27, 2010
Wednesday, August 25, 2010
Grabar log en SQL SERVER con campo XML
Private Sub GrabarLogReportes()
Dim htDescripcion As New Hashtable
htDescripcion.Add("compania", cboCompania.SelectedValue)
htDescripcion.Add("anio", cboAnio.SelectedValue)
htDescripcion.Add("periodo", cboPeriodo.SelectedValue)
Generico.EscribeLog(servicio, "INEC", txtRuta.Text, htDescripcion)
End Sub
Dim htDescripcion As New Hashtable
htDescripcion.Add("compania", cboCompania.SelectedValue)
htDescripcion.Add("anio", cboAnio.SelectedValue)
htDescripcion.Add("periodo", cboPeriodo.SelectedValue)
Generico.EscribeLog(servicio, "INEC", txtRuta.Text, htDescripcion)
End Sub
----------------------------
Public Shared Sub EscribeLog(ByRef servicio As ServiciosADAM, ByVal reporte As String, ByVal ruta As String, ByVal htDescripcion As Hashtable)
Dim sql As String
Dim diccionario As IDictionaryEnumerator
Dim strBuilder As New System.Text.StringBuilder
Dim writerSettings As New System.Xml.XmlWriterSettings()
' Crear diccionario para poder ser recorrido en la generación de la cadena XML
diccionario = htDescripcion.GetEnumerator
' Crear cadena XML
With writerSettings
.Indent = True
.IndentChars = New String(" "c, 4)
End With
Dim writer As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(strBuilder, writerSettings)
With writer
.WriteStartElement("Descripcion")
' Agregar los componentes del diccionario
While diccionario.MoveNext
.WriteElementString(diccionario.Key, diccionario.Value)
End While
.WriteEndElement()
End With
writer.Flush()
writer.Close()
' Eliminar la primera linea de la cadena XML
Dim cadenaSaltoLinea As String() = Split(strBuilder.ToString(), vbNewLine)
Dim descripcion As String
descripcion = String.Join(vbNewLine, cadenaSaltoLinea, 1, cadenaSaltoLinea.Length - 1)
' Llamar al procedimiento almacenado
Try
sql = "exec sp_hrv5_ec_log_reportes "
sql += "'" & reporte & "', "
sql += "'" & ADAM.Framework.Windows.ConexionActual.Usuario & "', "
sql += "'" & ruta & "', "
sql += "'" & descripcion & "'"
If (servicio.ejecutaConsulta(sql, ConexionActual.conexionBD) <> 1) Then
Throw New Exception("La generación del reporte no pudo ser registrada en el log de la base de datos.")
End If
Catch ex As Exception
MuestraErrorAdam(ex)
End Try
End Sub
Dim sql As String
Dim diccionario As IDictionaryEnumerator
Dim strBuilder As New System.Text.StringBuilder
Dim writerSettings As New System.Xml.XmlWriterSettings()
' Crear diccionario para poder ser recorrido en la generación de la cadena XML
diccionario = htDescripcion.GetEnumerator
' Crear cadena XML
With writerSettings
.Indent = True
.IndentChars = New String(" "c, 4)
End With
Dim writer As System.Xml.XmlWriter = System.Xml.XmlWriter.Create(strBuilder, writerSettings)
With writer
.WriteStartElement("Descripcion")
' Agregar los componentes del diccionario
While diccionario.MoveNext
.WriteElementString(diccionario.Key, diccionario.Value)
End While
.WriteEndElement()
End With
writer.Flush()
writer.Close()
' Eliminar la primera linea de la cadena XML
Dim cadenaSaltoLinea As String() = Split(strBuilder.ToString(), vbNewLine)
Dim descripcion As String
descripcion = String.Join(vbNewLine, cadenaSaltoLinea, 1, cadenaSaltoLinea.Length - 1)
' Llamar al procedimiento almacenado
Try
sql = "exec sp_hrv5_ec_log_reportes "
sql += "'" & reporte & "', "
sql += "'" & ADAM.Framework.Windows.ConexionActual.Usuario & "', "
sql += "'" & ruta & "', "
sql += "'" & descripcion & "'"
If (servicio.ejecutaConsulta(sql, ConexionActual.conexionBD) <> 1) Then
Throw New Exception("La generación del reporte no pudo ser registrada en el log de la base de datos.")
End If
Catch ex As Exception
MuestraErrorAdam(ex)
End Try
End Sub
BD
--------------------------------------------------
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE hrec_log_reportes(
[tipo_reporte] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[fecha_emision] [datetime] NULL,
[usuario] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[ruta_emision] [varchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[descripcion] XML NULL
--[descripcion] [varchar](500) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
--DROP TABLE [dbo].hrec_log_reportes
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE hrec_log_reportes(
[tipo_reporte] [varchar](10) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[fecha_emision] [datetime] NULL,
[usuario] [varchar](20) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[ruta_emision] [varchar](200) COLLATE SQL_Latin1_General_CP1_CI_AS NULL,
[descripcion] XML NULL
--[descripcion] [varchar](500) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
--DROP TABLE [dbo].hrec_log_reportes
------------------------------------------------------------
IF OBJECT_ID('sp_hrv5_ec_log_reportes') IS NOT NULL
DROP PROCEDURE sp_hrv5_ec_log_reportes
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_hrv5_ec_log_reportes]
(
@tipo_reporte VARCHAR(10),
@usuario VARCHAR(20),
@ruta_emision VARCHAR(200),
@descripcion XML
)
AS
INSERT INTO hrec_log_reportes
(
tipo_reporte,
fecha_emision,
usuario,
ruta_emision,
descripcion
)
VALUES
(
@tipo_reporte,
GETDATE(),
@usuario,
@ruta_emision,
@descripcion
)
GO
DROP PROCEDURE sp_hrv5_ec_log_reportes
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE PROCEDURE [dbo].[sp_hrv5_ec_log_reportes]
(
@tipo_reporte VARCHAR(10),
@usuario VARCHAR(20),
@ruta_emision VARCHAR(200),
@descripcion XML
)
AS
INSERT INTO hrec_log_reportes
(
tipo_reporte,
fecha_emision,
usuario,
ruta_emision,
descripcion
)
VALUES
(
@tipo_reporte,
GETDATE(),
@usuario,
@ruta_emision,
@descripcion
)
GO
Tuesday, August 17, 2010
T-SQL Escoger el mayor valor de un determinado campo
DECLARE @TestTable TABLE (id INT, home INT, date DATETIME,
player VARCHAR(20), resource INT)
INSERT INTO @TestTable
SELECT 1, 10, '20090304', 'john', 399 UNION
SELECT 2, 11, '20090304', 'juliet', 244 UNION
SELECT 5, 12, '20090304', 'borat', 555 UNION
SELECT 3, 10, '20090303', 'john', 300 UNION
SELECT 4, 11, '20090303', 'juliet', 200 UNION
SELECT 6, 12, '20090303', 'borat', 500 UNION
SELECT 7, 13, '20081224', 'borat', 600 UNION
SELECT 8, 13, '20090101', 'borat', 700
-- Answer
SELECT id, home, date, player, resource
FROM (SELECT id, home, date, player, resource,
RANK() OVER (PARTITION BY home ORDER BY date DESC) N
FROM @TestTable
)M WHERE N = 1
-- and if you really want only home with max date
SELECT T.id, T.home, T.date, T.player, T.resource
FROM @TestTable T
INNER JOIN
( SELECT TI.id, TI.home, TI.date,
RANK() OVER (PARTITION BY TI.home ORDER BY TI.date) N
FROM @TestTable TI
WHERE TI.date IN (SELECT MAX(TM.date) FROM @TestTable TM)
)TJ ON TJ.N = 1 AND T.id = TJ.id
Subscribe to:
Posts (Atom)