使用DAO连接参数查询错误使用MySQL进行MS Access

时间:2019-04-02 00:22:30

标签: mysql ms-access

因此,我试图按照Parfait的建议对表单进行参数化。这是因为我的表单会在退出时进行保存,并保护它们免受SQL注入。到目前为止,我的保存按钮的on click事件中包含以下代码:

Dim db As DAO.Database
    Dim qdef As DAO.QueryDef
    Dim SQL As String

    Set db = OpenDatabase("", False, False, Globales.ConnString)

    SQL = "PARAMETERS nf_param VARCHAR(255), f_param DATETIME, l_param INT(11), s_param INT(11), fd_param VARCHAR(255), sf_param DOUBLE, eie_param DOUBLE, " _
        & "im_param DOUBLE, ie_param DOUBLE, csaie_param DOUBLE, csaim_param DOUBLE, t_param DOUBLE, cs_param DOUBLE, cim_param DOUBLE, cie_param DOUBLE, " _
        & "mp_param VARCHAR(255), imp_param INT(11), pd_param VARCHAR(255);" _
        & " INSERT INTO tbl1facturas (Factura, Fecha, Localidad_ID, Suplidor_ID, Factura_PDF, Subtotal, Exento al IVU Estatal, IVU MUNICIPAL, IVU ESTATAL, CSA IVU ESTATAL, CSA IVU MUNICIPAL, " _
        & "Total de Compra, Credito al Subtotal, Credito IVU Municipal, Credito IVU ESTATAL, Metodo de Pago, ID Metodo Pago, MetodoPago_PDF) " _
        & " VALUES (nf_param, f_param, l_param, s_param, fd_param, sf_param, eie_param, im_param, ie_param, csaie_param, csaim_param, t_param, cs_param, cim_param, cie_param, mp_param, " _
        & "imp_param, pd_param);"

    Set qdef = db.CreateQueryDef("", SQL)

    qdef!nf_param = Forms!frmEntradaFacturas!Text14
    qdef!f_param = Forms!frmEntradaFacturas!Text16
    qdef!l_param = Forms!frmEntradaFacturas!Text18
    qdef!s_param = Forms!frmEntradaFacturas!Combo26
    qdef!fd_param = Forms!frmEntradaFacturas!Text73
    qdef!sf_param = Forms!frmEntradaFacturas!Text28
    qdef!eie_param = Forms!frmEntradaFacturas!Text50
    qdef!im_param = Forms!frmEntradaFacturas!Text42
    qdef!ie_param = Forms!frmEntradaFacturas!Text46
    qdef!csaie_param = Forms!frmEntradaFacturas!Text44
    qdef!csaim_param = Forms!frmEntradaFacturas!Text40
    qdef!t_param = Forms!frmEntradaFacturas!Text48
    qdef!cs_param = Forms!frmEntradaFacturas!Text30
    qdef!cim_param = Forms!frmEntradaFacturas!Text36
    qdef!cie_param = Forms!frmEntradaFacturas!Text38
    qdef!mp_param = Forms!frmEntradaFacturas!Text52
    qdef!imp_param = Forms!frmEntradaFacturas!Text54
    qdef!pd_param = Forms!frmEntradaFacturas!Text75

    qdef.Execute dbFailOnError
    Set qdef = Nothing 

这样,单击按钮时出现以下错误:

运行时错误“ 3139”:

PARAMETER子句中的语法错误。

我看了看我的Parameter子句,但看起来还可以。验证所有数据类型是否正确,如mysql表中所示。经过验证的标点似乎还可以。所以我不确定我在这里缺少什么。

欢迎所有帮助!谢谢你!

1 个答案:

答案 0 :(得分:0)

您正在构建Access查询,因此您需要使用Access数据类型,而不是MySql数据类型。

访问权限没有VARCHAR(255)INT(11),但没有TEXTINTEGER

以下是Access SQL数据类型的列表:
https://support.office.com/en-us/article/sql-data-types-9188f41d-6c0e-4733-9d20-d08916f50bd2

有许多同义词,例如LONGDOUBLE

您只需在Access中创建一个虚拟查询,打开参数窗口并定义具有各种数据类型的一些参数,然后切换到SQL视图以查看名称。