viernes, 1 de abril de 2016

SQL Server - Crear o reemplazar columna

IF NOT EXISTS (
SELECT * 
FROM sys.columns 
WHERE  object_id = OBJECT_ID(N'[dbo].[Procesos]') 
AND name = 'Requiere Validación Cierre'
)
BEGIN
ALTER TABLE Procesos
ADD [Requiere Validación Cierre] bit NOT NULL 
CONSTRAINT DF_Procesos_Requiere_Validacion_Cierre DEFAULT ((0))
END
GO

miércoles, 30 de marzo de 2016

SQL Server - Insertar fila si no existe

IF NOT EXISTS (SELECT '1' FROM Opciones C WHERE C.Opcion = 'Carpeta Contratos')
BEGIN
INSERT INTO Opciones (Opcion, Valor, Tipo, [Sección], Notas)
VALUES ('Carpeta Contratos','blabla','Texto','Ubicaciones','Carpeta en donde se almacenan los documentos de contratos.')
END
GO

SQL Server - Crear o reemplazar vista

IF EXISTS (SELECT TABLE_NAME FROM INFORMATION_SCHEMA.VIEWS WHERE TABLE_NAME = 'V_Certificados_Rutas_Contratos')
DROP VIEW V_Certificados_Rutas_Contratos
GO
CREATE VIEW V_Certificados_Rutas_Contratos
AS
SELECT 
...

sábado, 19 de marzo de 2016

Ver y modificar la configuración de SQL Server DataBase Mail

Para consultar la configuración:

select * from msdb.dbo.sysmail_configuration



Para modificar la configuración:

EXECUTE msdb.dbo.sysmail_configure_sp 'AccountRetryAttempts', '4';


viernes, 18 de marzo de 2016

Posicionarse en un registro de MS Access por clave primaria (sin DoCmd.GoToRecord)

Supongamos que queremos movernos a otro registro de otro formulario usando clave primaria donde DoCmd.GoToRecord no puede ayudarnos. Esta es una posible solución:

Dim idExtension As Integer
idExtension = Me("Id Extensión")
[Form_Certificados_Editor].Certificados_Editor_Extensiones.SetFocus
[Form_Certificados_Editor].Certificados_Editor_Extensiones.Form.Recordset.FindFirst "ID=" & idExtension

lunes, 29 de febrero de 2016

Cómo Generar un reporte en PDF (con filtro)

Primero definir una variable en el módulo para almacenar el filtro:

Public filtro_pdf_aesel As String

Utilizar el siguiente código para generar el reporte

filtro_pdf_aesel = "[ID]=" & Me("ID") & " AND [Tipo]='V'"
DoCmd.OutputTo acOutputReport, "Extraccion_Ensayo", acFormatPDF, archivo, True

En el evento OPEN y CLOSE del reporte

Private Sub Report_Open(Cancel As Integer)
    If Len(filtro_pdf_aesel) <> 0 Then
         Me.Filter = filtro_pdf_aesel
         Me.FilterOn = True
    End If
End Sub

Private Sub Report_Close()
    filtro_pdf_aesel = vbNullString
End Sub


miércoles, 24 de febrero de 2016

Crear una función escalar en SQL Server y utilizarla desdea MS Access

CREATE FUNCTION Retornar_Opcion (@opcionId NVARCHAR(50)) RETURNS NVARCHAR(250)
AS
BEGIN
DECLARE @valor NVARCHAR(250)
SELECT @valor = Valor
FROM Certi_Opciones
WHERE Opcion = @opcionId
RETURN @valor
END
GO


Ahora bien, en principio hay dos formas de usarla en MS Access:
  • Usar DAO Querydef y acceder directamente a la base para que la función definida por el usuario sea reconocida
  • Crear una vista en SQL Server que utilice la función y llamar a la vista normalmente desde MS Access. Ejemplo:

CREATE VIEW V_Snippets_Parametrizados
AS
SELECT S.ID, dbo.Retornar_Opcion(S.ID) AS Snippet
FROM Snippets S
GO

Con este último método se accede sin problemas vía ODBC porque MS Access no utiliza la función en forma directa.