再一次,使用parameterization 的行业最佳实践的经典示例,您可以在 MS Access 中使用QueryDefs.Parameters 执行此操作。除了防止 sql 注入之外,您还可以避免使用字符串插值来担心引号或 & 符号,并且可以构建一个更具可读性和可维护性的代码块。
无论使用哪种语言(此处为 VBA),该过程都涉及使用占位符设置准备好的 SQL 语句。然后在不同的步骤中将数据值绑定到占位符以供执行。
SQL
在下面另存为已保存的 MS Access 查询(功能区 > 创建 > 查询 > SQL 视图)。此 SQL 查询使用 PARAMETERS 子句(在 Access SQL 方言中有效)来定义占位符及其类型,然后使用占位符。你可以打破所有你想要的线条!
PARAMETERS TBClaimNumberParam TEXT(255), TBExposureNumberParam TEXT(255),
TBClaimSuffixParam TEXT(255), TBSShop_NameParam TEXT(255),
TBSShop_StreetAddressParam TEXT(255), TBSShop_CityParam TEXT(255),
TBSShop_StateParam TEXT(255), TBSShop_ZipParam TEXT(255),
TBSShop_PhoneParam TEXT(255);
INSERT INTO Tbl_Data_Shop (ClaimNumber, ExposureNumber, ClaimSuffix,
Shop_Name, Shop_StreetAddress, Shop_City,
Shop_State, Shop_Zip, Shop_Phone)
VALUES (TBClaimNumberParam, TBExposureNumberParam, TBClaimSuffixParam,
TBSShop_NameParam, TBSShop_StreetAddressParam, TBSShop_CityParam,
TBSShop_StateParam, TBSShop_ZipParam, TBSShop_PhoneParam)
VBA
在此步骤中,您将上述保存的查询 mySavedQuery 引用到 QueryDef 对象中,该对象随后将 VBA 值绑定到查询的命名参数(在上述 SQL 中定义)。
Dim qdef As QueryDef
Set qdef = CurrentDb.QueryDefs("mySavedQuery")
' BIND VALUES TO PARAMETERS
qdef!TBClaimNumberParam = Forms!Frm_Data_Main!TBClaimNumber
qdef!TBExposureNumberParam = Forms!Frm_Data_Main!TBExposureNumber
qdef!TBClaimSuffixParam = Forms!Frm_Data_Main!TBClaimSuffix
qdef!TBSShop_NameParam = TBSShop_Name
qdef!TBSShop_StreetAddressParam = TBSShop_StreetAddress
qdef!TBSShop_CityParam = TBSShop_City
qdef!TBSShop_StateParam = TBSShop_State
qdef!TBSShop_ZipParam = TBSShop_Zip
qdef!TBSShop_PhoneParam = TBSShop_Phone
' EXECUTE ACTION
qdef.Execute dbFailOnError
Set qdef = Nothing