Access
 sql >> Base de Dados >  >> RDS >> Access

Texto ou campo numérico - um método SQL simples para alternar o tipo de dados

Texto ou campo numérico – um método SQL simples para alternar o tipo de dados


Recentemente trabalhei em um projeto onde nosso cliente está vendendo um produto nos EUA construído em Access com SQL Server, ele funciona importando dados para SQL e depois analisando com relatórios do Access. Infelizmente, cada cliente pode ter um formato de chave primária como um inteiro longo e outros em que é uma string (combinação de números e strings), descobrimos rapidamente que isso causava problemas com a classificação incorreta dos relatórios. Os relatórios foram projetados com números inteiros em mente e as strings atrapalharam o pedido. Precisávamos encontrar uma solução que não exigisse a adição de código ao nosso front-end do Access para lidar com o problema, mas sim usar o poder do SQL Server para fornecer os dados, independentemente do formato usado na chave primária.

Visualizações para salvar


Uma coisa legal sobre vincular exibições e tabelas do SQL Server no Access:você pode dar a elas o nome que desejar. Alavanquei-o pela fonte da tabela vinculada com uma visão se a chave primária for uma string ou deixei como a tabela original se fosse um inteiro. Ter os mesmos nomes de tabela no Access, independentemente da fonte, significava não ter que alterar meu código.

Nós conduzimos a vinculação usando uma tabela do SQL Server


Juan escreveu sobre como direcionar a vinculação de tabelas do SQL Server, onde usamos código para ler registros em uma tabela chamada tblTablePermissions para criar os links em nosso front-end de acesso usando código VBA. Normalmente nós vinculamos apenas no início do projeto ou quando uma nova tabela é adicionada ao servidor, mas para este projeto eu precisei dar um passo adiante trocando o nome da tabela pelo nome da view em tblTablePermissions se o cliente usa um string para chave primária.

Existem dois campos em tblTablePermissions, um chamado Table_Name e outro chamado AccessName, nosso código usa o primeiro para saber qual tabela ou view usar como fonte e o último para o nome da tabela no Access. Tudo o que fiz foi criar um script simples que meu cliente pode executar para trocar os nomes das tabelas pelos nomes das visualizações para cada instalação que precisasse.

Segue o script que usei:

--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


DELETE FROM [dbo].[tblTablePermissions]
WHERE [Table_Name] =('table_name1')
ou [Table_Name] =('table_name2')
ou [Table_Name] =('table_name3' )
GO
INSERT INTO [dbo].[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VALORES ('vw_tablename1', 'tablename1', ”, 'True', 'True', 'True', 'True'),
('vw_tablename2', 'tablename2', 'field1,field2,field3 ', 'True', 'True', 'True', 'True'),
('vw_tablename3', 'tablename3', 'field1,field2', 'True', 'True', 'True', 'Verdadeiro')
IR

No meu script acima eu primeiro excluo as tabelas de tblTablePermissions que desejo trocar com views e então uso uma instrução insert para adicionar as views que irão substituir as tabelas, observe que os nomes das views são diferentes mas o campo Access_Name é o mesmo que o os excluídos, permitindo que meu código de acesso funcione independentemente de qual tipo de campo de chave primária é usado.

Como usei CAST para traduzir a chave primária


Nas views usei a função CAST para converter o campo Type de uma string para um inteiro:

CREATE VIEW vw_tablename1
AS
SELECT RangeID,
UseFlagAsNeeded,
CAST(Type AS int) AS Type,
Line,
Ownership,
Include,
Public,
Limit,
RangeA,
RangeB,
RangeC,
SSMA_TimeStamp
FROM dbo.tablename1;
GO


Nosso cliente agora pode configurar facilmente cada instalação com base nos dados do cliente!