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.

Cómo Generar un reporte en PDF

DoCmd.OutputTo acOutputReport, "Mi reporte", acFormatPDF, "C:\Users\jp\Desktop\test1.pdf", True