【问题标题】:Line break in an INSERT INTO statementINSERT INTO 语句中的换行符
【发布时间】:2019-03-04 21:27:21
【问题描述】:

我已经搜索了所有的板,但找不到有人问如何在 INSERT INTO 语句的代码中进行换行。我尝试了很多变化,我似乎可以让它们中的任何一个起作用。他是我的代码和我正在尝试的示例。我知道这只是一个放错位置的逗号、引号或 & 号。

StrSQL = "INSERT INTO Tbl_Data_Shop & _
(ClaimNumber, ExposureNumber, ClaimSuffix, & _
Shop_Name, Shop_StreetAddress, Shop_City, & _
Shop_State, Shop_Zip, Shop_Phone) & _
"Values 
('" & Forms!Frm_Data_Main!TBClaimNumber & "' & _
"'" & Forms!Frm_Data_Main!TBExposureNumber & "' & _
"'" & Forms!Frm_Data_Main!TBClaimSuffix & "'," & _
"'" & TBSShop_Name & "'," & _
"'" & TBSShop_StreetAddress & "'," & _
"'" & TBSShop_City & "'," & _
"'" & TBSShop_State & "'," & _
"'" & TBSShop_Zip & "'," & _
"'" & TBSShop_Phone & "'");"

【问题讨论】:

    标签: sql ms-access vba ms-access-2016


    【解决方案1】:

    再一次,使用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
    

    【讨论】:

    • 我真的很喜欢这里的干净程度。然而,这有点过头了。我很想学习如何使用这种方法。我查看了您包含的两个链接并进行了一些搜索,但仍然不确定如何实现这一点。什么是“存储的查询对象”以及如何创建一个。它只是我添加到我的主要代码还是一个模块?你能给我一个初学者解释如何使用它。我有几种表格,我想在上面使用它。
    • 我对这两个步骤添加了一些解释。基本上只需创建一个新的 Access 查询,这里命名为 mySavedQuery,它在 VBA 中被引用。
    【解决方案2】:

    将每一行单独设为一个字符串 - 并更正逗号和括号:

    StrSQL = "INSERT INTO Tbl_Data_Shop " & _
    "(ClaimNumber, ExposureNumber, ClaimSuffix, " & _
    "Shop_Name, Shop_StreetAddress, Shop_City, " & _
    "Shop_State, Shop_Zip, Shop_Phone) " & _
    "Values (" & _
    "'" & Forms!Frm_Data_Main!TBClaimNumber & "'," & _
    "'" & Forms!Frm_Data_Main!TBExposureNumber & "'," & _
    "'" & Forms!Frm_Data_Main!TBClaimSuffix & "'," & _
    "'" & TBSShop_Name & "'," & _
    "'" & TBSShop_StreetAddress & "'," & _
    "'" & TBSShop_City & "'," & _
    "'" & TBSShop_State & "'," & _
    "'" & TBSShop_Zip & "'," & _
    "'" & TBSShop_Phone & "');"
    

    【讨论】:

      【解决方案3】:

      引号和 &s 丢失/错位。但是,出于多种原因,我会使用prepared 声明,即安全性和可管理性。

      StrSQL = "INSERT INTO Tbl_Data_Shop & _
      (ClaimNumber, ExposureNumber, ClaimSuffix, & _
      Shop_Name, Shop_StreetAddress, Shop_City, & _
      Shop_State, Shop_Zip, Shop_Phone) & _
       Values ('" & Forms!Frm_Data_Main!TBClaimNumber & "', & _
      '" & Forms!Frm_Data_Main!TBExposureNumber & "', & _
      '" & Forms!Frm_Data_Main!TBClaimSuffix & "', & _
      '" & TBSShop_Name & "', & _
      '" & TBSShop_StreetAddress & "', & _
      '" & TBSShop_City & "', & _
      '" & TBSShop_State & "', & _
      '" & TBSShop_Zip & "', & _
      '" & TBSShop_Phone & "');"
      

      尝试告诉我们。

      【讨论】:

      • 我仍然收到预期的:“值('”处的语句结束错误
      • 在你上次更新后,我在第一行之后的语句结束。
      • 又做了一些修改。您的 sql 语句相当混乱,并且您的 vba 换行符使您更难看到实际发生的情况。请再试一次并告诉我。
      • 我复制并粘贴了你的代码,但我仍然在 (。如果你能提出一种清理代码的方法,我是开放的建议。我是自学的,所以我知道我的代码在不标准的做法中。我只是尽我所能使事情正常进行。我把它全部放在一行上,但它真的很难阅读,所以我插入了换行符。这种将日期插入我的表格的方法,我只是想弄清楚如何正确换行。
      猜你喜欢
      • 2011-12-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-02-21
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多