Trường văn bản hoặc số - Phương pháp SQL đơn giản để chuyển kiểu dữ liệu
Gần đây tôi đã làm việc trong một dự án trong đó khách hàng của chúng tôi đang bán một sản phẩm trên khắp Hoa Kỳ được xây dựng trên Access với SQL Server, nó hoạt động bằng cách nhập dữ liệu vào SQL và sau đó phân tích nó với các báo cáo Access. Rất tiếc, mỗi khách hàng có thể có định dạng khóa chính là một số nguyên dài và các định dạng khác trong đó nó là một chuỗi, (kết hợp giữa số và chuỗi), chúng tôi nhanh chóng phát hiện ra điều đó gây ra sự cố với báo cáo không được sắp xếp chính xác. Các báo cáo được thiết kế với các số nguyên và các chuỗi làm sai trật tự. Chúng tôi cần đưa ra một giải pháp không yêu cầu thêm mã vào giao diện người dùng Access của chúng tôi để xử lý sự cố mà sử dụng sức mạnh của SQL Server để cung cấp dữ liệu bất kể định dạng được sử dụng trên khóa chính.
Lượt xem để giải cứu
Một điều thú vị về việc liên kết các dạng xem và bảng của SQL Server trong Access:Bạn có thể đặt cho chúng bất kỳ tên nào bạn muốn. Tôi đã tận dụng nó bằng cách lấy nguồn của bảng được liên kết với một chế độ xem nếu khóa chính là một chuỗi hoặc để nó làm bảng gốc nếu nó là một số nguyên. Có các tên bảng giống nhau trong Access bất kể nguồn có nghĩa là không phải thay đổi mã của tôi.
Chúng tôi thúc đẩy liên kết bằng bảng SQL Server
Juan đã viết blog về cách thúc đẩy liên kết bảng từ SQL Server, nơi chúng tôi sử dụng mã để đọc các bản ghi trong bảng có tên tblTablePermissions để tạo liên kết trong giao diện người dùng Access của chúng tôi bằng mã VBA. Thông thường, chúng tôi chỉ liên kết khi bắt đầu dự án hoặc khi một bảng mới được thêm vào máy chủ, nhưng đối với dự án này, tôi cần thực hiện thêm một bước bằng cách hoán đổi tên bảng với tên chế độ xem trong tblTablePermissions nếu máy khách sử dụng chuỗi cho khóa chính.
Có hai trường trong tblTablePermissions, một trường được gọi là Table_Name và một trường khác được gọi là AccessName, mã của chúng tôi sử dụng trường trước để biết bảng hoặc chế độ xem nào sẽ sử dụng làm nguồn và trường sau cho tên bảng trong Access. Tất cả những gì tôi đã làm là tạo một tập lệnh đơn giản mà khách hàng của tôi có thể chạy để hoán đổi tên bảng với tên chế độ xem cho mỗi lần cài đặt cần nó.
Đây là tập lệnh tôi đã sử dụng:
--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
XÓA khỏi [dbo]. [TblTablePermissions]
WHERE [Table_Name] =('tablename1')
hoặc [Table_Name] =('tablename2')
hoặc [Table_Name] =('tablename3' )
ĐI
IINSERT INTO [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 ', 'Đúng')
ĐI
Trong tập lệnh của tôi ở trên, trước tiên, tôi xóa các bảng khỏi tblTablePermissions mà tôi muốn hoán đổi với các dạng xem và sau đó, tôi sử dụng câu lệnh chèn để thêm các dạng xem sẽ thay thế các bảng, lưu ý rằng tên dạng xem khác nhau nhưng trường Access_Name giống với những cái đã bị xóa, cho phép mã Access của tôi hoạt động bất kể loại trường khóa chính nào được sử dụng.
Cách tôi sử dụng CAST để dịch khóa chính
Trong các dạng xem, tôi đã sử dụng hàm CAST để chuyển đổi trường Loại từ một chuỗi thành một số nguyên:
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
Khách hàng của chúng tôi hiện có thể dễ dàng định cấu hình từng cài đặt dựa trên dữ liệu của khách hàng!