Access
 sql >> Base de données >  >> RDS >> Access

Texte ou champ numérique - Une méthode SQL simple pour changer de type de données

Champ texte ou numérique - Une méthode SQL simple pour changer de type de données

J'ai récemment travaillé sur un projet où notre client vend un produit à travers les États-Unis construit sur Access avec SQL Server, il fonctionne en important des données dans SQL puis en les analysant avec des rapports Access. Malheureusement, chaque client peut avoir un format de clé primaire sous forme d'entier long et d'autres où il s'agit d'une chaîne (combinaison de chiffres et de chaînes), nous avons rapidement découvert que cela causait des problèmes de tri incorrect des rapports. Les rapports ont été conçus avec des nombres entiers à l'esprit et les chaînes ont perturbé l'ordre. Nous devions trouver une solution qui ne nécessitait pas l'ajout de code à notre interface Access pour gérer le problème, mais qui utilisait plutôt la puissance de SQL Server pour servir les données quel que soit le format utilisé sur la clé primaire.

Vues à la rescousse

Une chose intéressante à propos de la liaison des vues et des tables SQL Server dans Access :vous pouvez leur donner le nom de votre choix. Je l'ai exploité par la source de la table liée avec une vue si la clé primaire est une chaîne ou la laisse comme table d'origine si c'était un entier. Avoir les mêmes noms de table dans Access quelle que soit la source signifiait ne pas avoir à modifier mon code.

Nous gérons la liaison à l'aide d'une table SQL Server

Juan a blogué sur la création de liens de table à partir de SQL Server, où nous utilisons du code pour lire les enregistrements dans une table appelée tblTablePermissions afin de créer les liens dans notre interface d'accès à l'aide du code VBA. Habituellement, nous ne lions qu'au début du projet ou lorsqu'une nouvelle table est ajoutée au serveur, mais pour ce projet, je devais aller plus loin en remplaçant le nom de la table par le nom de la vue dans tblTablePermissions si le client utilise un chaîne pour la clé primaire.

Il y a deux champs dans tblTablePermissions, un appelé Table_Name et un autre appelé AccessName, notre code utilise le premier pour savoir quelle table ou vue utiliser comme source et le second pour le nom de la table dans Access. Tout ce que j'ai fait, c'est créer un script simple que mon client peut exécuter pour échanger les noms de table avec les noms de vue pour chaque installation qui en avait besoin.

Voici le script que j'ai utilisé :

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

DELETE FROM [dbo].[tblTablePermissions]
WHERE [Table_Name] =('tablename1')
ou [Table_Name] =('tablename2')
ou [Table_Name] =('tablename3' )
GO
IINSERT INTO [dbo].[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VALEURS ('vw_tablename1', 'tablename1', ”, 'True', 'True', 'True', 'True'),
('vw_tablename2', 'tablename2', 'field1,field2,field3 ', 'Vrai', 'Vrai', 'Vrai', 'Vrai'),
('vw_tablename3', 'tablename3', 'champ1, champ2', 'Vrai', 'Vrai', 'Vrai', 'Vrai')
ALLER

Dans mon script ci-dessus, je supprime d'abord les tables de tblTablePermissions que je souhaite échanger avec des vues, puis j'utilise une instruction d'insertion pour ajouter les vues qui remplaceront les tables, notez que les noms de vue sont différents mais que le champ Access_Name est le même que le ceux supprimés, permettant à mon code d'accès de fonctionner quel que soit le type de champ de clé primaire utilisé.

Comment j'ai utilisé CAST pour traduire la clé primaire

Dans les vues j'ai utilisé la fonction CAST pour convertir le champ Type d'une chaîne vers un entier :

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

Notre client peut désormais configurer facilement chaque installation en fonction des données du client !