Text- oder numerisches Feld – Eine einfache SQL-Methode zum Wechseln des Datentyps
Ich habe kürzlich an einem Projekt gearbeitet, bei dem unser Kunde ein Produkt in den USA verkauft, das auf Access mit SQL Server basiert. Es funktioniert, indem Daten in SQL importiert und dann mit Access-Berichten analysiert werden. Leider hat jeder Kunde ein Primärschlüsselformat als lange ganze Zahl und andere, bei denen es sich um eine Zeichenfolge (Kombination aus Zahlen und Zeichenfolgen) handelt. Wir haben schnell festgestellt, dass dies zu Problemen mit nicht korrekt sortierten Berichten führte. Die Berichte wurden mit Ganzzahlen entworfen und die Zeichenfolgen haben die Reihenfolge durcheinander gebracht. Wir mussten eine Lösung finden, die kein Hinzufügen von Code zu unserem Access-Frontend erforderte, um das Problem zu lösen, sondern die Leistungsfähigkeit von SQL Server nutzte, um die Daten unabhängig vom Format des Primärschlüssels bereitzustellen.
Ansichten zur Rettung
Eine nette Sache beim Verknüpfen von SQL Server-Ansichten und -Tabellen in Access:Sie können ihnen einen beliebigen Namen geben. Ich habe es durch die Quelle der verknüpften Tabelle mit einer Ansicht genutzt, ob der Primärschlüssel eine Zeichenfolge ist, oder es als ursprüngliche Tabelle belassen, wenn es sich um eine Ganzzahl handelt. Die gleichen Tabellennamen in Access unabhängig von der Quelle bedeuteten, dass ich meinen Code nicht ändern musste.
Wir fahren die Verknüpfung mit einer SQL Server-Tabelle
Juan hat über das Verknüpfen von Tabellen von SQL Server gebloggt, wo wir Code verwenden, um Datensätze in einer Tabelle namens tblTablePermissions zu lesen, um die Links in unserem Access-Front-End mit VBA-Code zu erstellen. Normalerweise verlinken wir nur am Anfang des Projekts oder wenn dem Server eine neue Tabelle hinzugefügt wird, aber für dieses Projekt musste ich noch einen Schritt weiter gehen, indem ich den Tabellennamen mit dem Ansichtsnamen in tblTablePermissions austauschte, wenn der Client eine Zeichenfolge für den Primärschlüssel.
Es gibt zwei Felder in tblTablePermissions, eines namens Table_Name und eines namens AccessName. Unser Code verwendet das erstere, um zu wissen, welche Tabelle oder Ansicht als Quelle verwendet werden soll, und das letztere für den Tabellennamen in Access. Alles, was ich getan habe, war, ein einfaches Skript zu erstellen, das mein Kunde ausführen kann, um die Tabellennamen mit Ansichtsnamen für jede Installation auszutauschen, die es benötigte.
Hier ist das Skript, das ich verwendet habe:
--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DELETE FROM [dbo].[tblTablePermissions]
WHERE [Table_Name] =('tablename1')
or [Table_Name] =('tablename2')
or [Table_Name] =('tablename3' )
GO
IINSERT INTO [dbo].[tblTablePermissions] ([Table_Name], [Access_Name], [IndexedColumns], [UserSelect], [UserInsert], [UserUpdate], [UserDelete])
WERTE ('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', 'Richtig')
GO
In meinem obigen Skript lösche ich zuerst die Tabellen aus tblTablePermissions, die ich mit Ansichten austauschen möchte, und verwende dann eine Einfügeanweisung, um die Ansichten hinzuzufügen, die die Tabellen ersetzen diejenigen gelöscht, sodass mein Zugangscode unabhängig davon funktioniert, welcher Primärschlüsselfeldtyp verwendet wird.
Wie ich CAST verwendet habe, um den Primärschlüssel zu übersetzen
In den Ansichten habe ich die CAST-Funktion verwendet, um das Feld Type zu konvertieren von einem String in eine Ganzzahl:
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
Unser Kunde kann jetzt jede Installation basierend auf den Kundendaten einfach konfigurieren!