テキストまたは数値フィールド–データ型を切り替えるための単純なSQLメソッド
私は最近、クライアントがAccess with SQL Serverに基づいて構築された製品を米国全体で販売しているプロジェクトに取り組みました。このプロジェクトは、データをSQLにインポートし、Accessレポートで分析することで機能します。残念ながら、各顧客は長整数などの主キー形式を使用している可能性があり、それが文字列(数値と文字列の組み合わせ)である場合は、レポートが正しく並べ替えられないという問題が発生することがすぐにわかりました。レポートは整数を念頭に置いて設計されており、文字列が順序を台無しにしました。問題を処理するためにAccessフロントエンドにコードを追加する必要がなく、主キーで使用されている形式に関係なく、SQLServerの機能を使用してデータを提供するソリューションを考え出す必要がありました。
救助の見方
AccessでSQLServerのビューとテーブルをリンクすることの良い点の1つは、任意の名前を付けることができるということです。主キーが文字列の場合はビューを使用してリンクテーブルのソースを使用し、整数の場合は元のテーブルのままにします。ソースに関係なくAccessに同じテーブル名があるということは、コードを変更する必要がないことを意味します。
SQLServerテーブルを使用してリンクを駆動します
Juanは、SQL Serverからのテーブルリンクの駆動についてブログを書いています。ここでは、コードを使用してtblTablePermissionsというテーブルのレコードを読み取り、VBAコードを使用してAccessフロントエンドにリンクを作成します。通常、リンクはプロジェクトの開始時またはサーバーに新しいテーブルが追加されたときにのみリンクしますが、このプロジェクトでは、クライアントが主キーの文字列。
tblTablePermissionsには2つのフィールドがあります。1つはTable_Nameと呼ばれ、もう1つはAccessNameと呼ばれます。このコードでは、前者を使用してソースとして使用するテーブルまたはビューを認識し、後者をAccessのテーブル名に使用します。私が行ったのは、顧客が実行できる簡単なスクリプトを作成して、テーブル名を、それを必要とするインストールごとにビュー名と交換することだけでした。
使用したスクリプトは次のとおりです。
--Update tblTablePermissions For Numeric Type Code--
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
DELETEFROM[dbo]。[tblTablePermissions]
WHERE [Table_Name] =('tablename1')
または[Table_Name]=('tablename2')
または[Table_Name]=('tablename3' )
GO
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'、 'True')
GO
上記のスクリプトでは、最初にビューと交換したいテーブルをtblTablePermissionsから削除し、次に挿入ステートメントを使用してテーブルを置き換えるビューを追加します。ビュー名は異なりますが、Access_Nameフィールドは同じです。 1つが削除され、使用されている主キーフィールドタイプに関係なくAccessコードが機能するようになりました。
CASTを使用して主キーを変換した方法
ビューでは、CAST関数を使用してフィールド Typeを変換しました 文字列から整数へ:
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
クライアントは、お客様のデータに基づいて各インストールを簡単に構成できるようになりました!