Textové nebo číselné pole – jednoduchá metoda SQL pro přepínání datových typů
Nedávno jsem pracoval na projektu, kde náš klient prodává po USA produkt postavený na Accessu s SQL Serverem, funguje to tak, že importuje data do SQL a následně je analyzuje pomocí Access reportů. Bohužel každý zákazník může mít formát primárního klíče jako dlouhé celé číslo a další, kde je to řetězec (kombinace čísel a řetězců), rychle jsme zjistili, že to způsobuje problémy s nesprávným řazením sestav. Zprávy byly navrženy s ohledem na celá čísla a řetězce zkazily pořadí. Potřebovali jsme přijít s řešením, které nevyžadovalo přidání kódu do našeho Access frontendu k vyřešení problému, ale spíše využilo sílu SQL Serveru k poskytování dat bez ohledu na formát použitý na primárním klíči.
Pohledy na záchranu
Jedna pěkná věc o propojování zobrazení a tabulek SQL Serveru v Accessu:Můžete jim dát libovolný název. Využil jsem to pomocí zdroje propojené tabulky se zobrazením, zda je primárním klíčem řetězec, nebo jej ponechal jako původní tabulku, pokud šlo o celé číslo. Mít stejné názvy tabulek v Accessu bez ohledu na zdroj znamenalo, že jsem nemusel měnit svůj kód.
Propojujeme pomocí tabulky SQL Server
Juan napsal na blog o propojování tabulek ze serveru SQL, kde používáme kód ke čtení záznamů v tabulce s názvem tblTablePermissions k vytváření odkazů v našem rozhraní Access pomocí kódu VBA. Obvykle se propojujeme pouze na začátku projektu nebo když je na server přidána nová tabulka, ale pro tento projekt jsem to potřeboval udělat o krok dále a vyměnit název tabulky za název pohledu v tblTablePermissions, pokud klient používá řetězec pro primární klíč.
V tblTablePermissions jsou dvě pole, jedno se jmenuje Table_Name a druhé AccessName. Náš kód používá první pole k tomu, aby věděl, kterou tabulku nebo pohled použít jako zdroj, a to druhé pro název tabulky v Accessu. Vše, co jsem udělal, bylo vytvoření jednoduchého skriptu, který můj zákazník může spustit, aby zaměnil názvy tabulek za názvy zobrazení pro každou instalaci, která to potřebovala.
Zde je skript, který jsem použil:
--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DELETE FROM [dbo].[tblTablePermissions]
WHERE [Table_Name] =('název_tabulky1')
nebo [název_tabulky] =('název_tabulky2')
nebo [název_tabulky] =('název_tabulky3' )
PŘEJDĚTE
INSERT DO [dbo].[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
VALUES ('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', 'True')
PŘEJÍT
Ve výše uvedeném skriptu nejprve odstraním tabulky z tblTablePermissions, které chci zaměnit s pohledy, a poté pomocí příkazu insert přidám pohledy, které nahradí tabulky, všimněte si, že názvy pohledů jsou odlišné, ale pole Access_Name je stejné jako ty byly odstraněny, takže můj přístupový kód mohl fungovat bez ohledu na to, jaký typ pole primárního klíče je použit.
Jak jsem použil CAST k překladu primárního klíče
V pohledech jsem pomocí funkce CAST převedl pole Typ z řetězce na celé číslo:
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
Náš klient nyní může snadno nakonfigurovat každou instalaci na základě údajů zákazníka!