Sql 在ms access中创建VBA以向我的表动态添加数据时遇到问题

Sql 在ms access中创建VBA以向我的表动态添加数据时遇到问题,sql,vba,ms-access,Sql,Vba,Ms Access,我在MS Access中创建了一个表单,并创建了一个按钮cmdAdd,以动态地将填充的字段添加到表tbCadastro中 请参见下面的SQL语句: 专用子cmdAdd\u单击 '添加数据 当前数据库执行插入TBCADASTRO、客户、CPFèU CNPJ、IDèu Cartao、ValorDisponsiveLCartao、Tarifa、ValorBrutoDevolucao、ValorLiquido、Motivo、Observaces、DataPagamento、FormPagamento、B

我在MS Access中创建了一个表单,并创建了一个按钮cmdAdd,以动态地将填充的字段添加到表tbCadastro中

请参见下面的SQL语句:

专用子cmdAdd\u单击 '添加数据 当前数据库执行插入TBCADASTRO、客户、CPFèU CNPJ、IDèu Cartao、ValorDisponsiveLCartao、Tarifa、ValorBrutoDevolucao、ValorLiquido、Motivo、Observaces、DataPagamento、FormPagamento、BancoCredito、AgenciaCredito、ContaCredito、BancoDebito、AgenciaDebito、ContaDebito&_ VALUES&Me.txtCliente&、&Me.txtID_Cartao&、&Me.txtCPF_CNPJ&、&Me.txtValorDisponsiveLCartao&、&_ Me.txtTarifa&'、'Me.txdvalorbrutodevolucao&'、'Me.txdvalorliquido&'、'Me.txtMotivo&'、'Me.txtobservaces&'、'_ Me.txtDataPagamento&’、&Me.txtAgenciaCredito&’、&Me.txtContaCredito&’、&Me.cboBancoCredito&’、&Me.BancoDebito&’、&_ Me.AgenciaDebito&',Me.ContaDebito&',Me.CboFormapagmento&',Me.Cborequisico&' '刷新表单 FrmCadastro.Form.Requery 端接头 我的问题是:

填写字段后单击“添加”按钮时,会生成错误:

执行进度438中出错:对象不接受此属性或方法

我们已经检查了表单设计模式中的所有字段,重命名字段并将其与标签区分开来

我不知道我错在哪里


谢谢大家。

导致错误的原因可能是以下几行:

FrmCadastro.Form.Requery 在这里,您正在访问由的返回的对象。此属性通常用于访问子表单的表单元素,以便访问子表单中的字段

虽然该方法适用于main,但它不是由的返回的对象的方法,因此会导致您看到的错误:

执行进度438中出错:对象不接受此属性或方法

也就是说,通过Form属性获得的Form对象不接受Requery方法

假设FrmCadastro是按钮cmdAdd所在的表单,那么要重新查询表单的记录源,您应该能够使用:

我,再询问 我还建议在SQL语句中使用参数代替连接值,因为这样可以避免处理不同的数据类型,还可以防止SQL注入

例如:

专用子cmdAdd\u单击 作为字符串的Dim strSQL strSQL=strSQL&插入tbCadastro strSQL=strSQL& strSQL=strSQL&Requisiço, strSQL=strSQL和客户, strSQL=strSQL和CPF_CNPJ, strSQL=strSQL&ID\u Cartao, strSQL=strSQL和VALORDesponsiveLCARTAO, strSQL=strSQL&Tarifa, strSQL=strSQL和ValorBrutoDevolucao, strSQL=strSQL&ValorLiquido, strSQL=strSQL和Motivo, strSQL=strSQL和观测值, strSQL=strSQL和DataPagamento, strSQL=strSQL和FORMAPAGANTO, strSQL=strSQL和BancoCredito, strSQL=strSQL&AgenciaCredito, strSQL=strSQL和ContaCredito, strSQL=strSQL和BancoDebito, strSQL=strSQL&AgenciaDebito, strSQL=strSQL&ContaDebito strSQL=strSQL& strSQL=strSQL&值 strSQL=strSQL& strSQL=strSQL&@txtcliente, strSQL=strSQL&@txtID\u Cartao, strSQL=strSQL&@txtCPF\u CNPJ, strSQL=strSQL&@txtValorDisponsiveLCartao, strSQL=strSQL&@txtTarifa, strSQL=strSQL&@txtValorBrutoDevolucao, strSQL=strSQL&@txtValorLiquido, strSQL=strSQL&@txtMotivo, strSQL=strSQL&@txtobservaces, strSQL=strSQL&@txtDataPagamento, strSQL=strSQL&@txtAgenciaCredito, strSQL=strSQL&@txtContaCredito, strSQL=strSQL&@cbobancordito, strSQL=strSQL&@BancoDebito, strSQL=strSQL&@AgenciaDebito, strSQL=strSQL&@ContaDebito, strSQL=strSQL&@cboformapagmento, strSQL=strSQL&@cborequisico strSQL=strSQL& 使用CurrentDb.CreateQueryDef,strSQL .Parameters@txtcliente=Me.txt客户 .Parameters@txtID_Cartao=Me.txtID\u Cartao .Parameters@txtCPF_CNPJ=Me.txtCPF\u CNPJ .Parameters@txtValorDisponivelCartao=Me.txtValorInitiativeLCartao .Parameters@txtTarifa=Me.txtTarifa .Parameters@txtValorBrutoDevolucao=Me.txtValorBrutoDevolucao .Parameters@txtValorLiquido=Me.txtValorLiquido .Parameters@txtMotivo=Me.txtMotivo .Parameters@txtObservacoes=Me.txtobservacos .Parameters@txtDataPagamento=Me.txtDataPagamento .Parameters@txtAgenciaCredito=Me.txtAgenciaCredito .Parameters@txtContaCredito=Me.txtContaCredito .Parameters@cboBancoCredito=Me.cboBancoCredito .Parameters@BancoDebito=Me.BancoDebito .Parameters@AgenciaDebito=Me.AgenciaDebito .Parameters@ContaDebito=Me.ContaDebito .Parameters@cboFormaPagamento=Me.cboformapagmento .Parameters@cboRequisicao=Me.cborequicico .执行dbFailOnError 以 我,再询问 端接头
导致错误的原因可能是以下几行:

FrmCadastro.Form.Requery 在这里,您正在访问由的返回的对象。此属性通常用于访问子表单的表单元素,以便访问子表单中的字段

虽然该方法适用于main,但它不是由的返回的对象的方法,因此会导致您看到的错误:

执行进度438中出错:对象不接受此属性或方法

也就是说,通过Form属性获得的Form对象不接受Requery方法

假设FrmCadastro是按钮cmdAdd所在的表单,那么要重新查询表单的记录源,您应该能够使用:

我,再询问 我还建议在SQL语句中使用参数代替连接值,因为这样可以避免处理不同的数据类型,还可以防止SQL注入

例如:

专用子cmdAdd\u单击 作为字符串的Dim strSQL strSQL=strSQL&插入tbCadastro strSQL=strSQL& strSQL=strSQL&Requisiço, strSQL=strSQL和客户, strSQL=strSQL和CPF_CNPJ, strSQL=strSQL&ID\u Cartao, strSQL=strSQL和VALORDesponsiveLCARTAO, strSQL=strSQL&Tarifa, strSQL=strSQL和ValorBrutoDevolucao, strSQL=strSQL&ValorLiquido, strSQL=strSQL和Motivo, strSQL=strSQL和观测值, strSQL=strSQL和DataPagamento, strSQL=strSQL和FORMAPAGANTO, strSQL=strSQL和BancoCredito, strSQL=strSQL&AgenciaCredito, strSQL=strSQL和ContaCredito, strSQL=strSQL和BancoDebito, strSQL=strSQL&AgenciaDebito, strSQL=strSQL&ContaDebito strSQL=strSQL& strSQL=strSQL&值 strSQL=strSQL& strSQL=strSQL&@txtcliente, strSQL=strSQL&@txtID\u Cartao, strSQL=strSQL&@txtCPF\u CNPJ, strSQL=strSQL&@txtValorDisponsiveLCartao, strSQL=strSQL&@txtTarifa, strSQL=strSQL&@txtValorBrutoDevolucao, strSQL=strSQL&@txtValorLiquido, strSQL=strSQL&@txtMotivo, strSQL=strSQL&@txtobservaces, strSQL=strSQL&@txtDataPagamento, strSQL=strSQL&@txtAgenciaCredito, strSQL=strSQL&@txtContaCredito, strSQL=strSQL&@cbobancordito, strSQL=strSQL&@BancoDebito, strSQL=strSQL&@AgenciaDebito, strSQL=strSQL&@ContaDebito, strSQL=strSQL&@cboformapagmento, strSQL=strSQL&@cborequisico strSQL=strSQL& 使用CurrentDb.CreateQueryDef,strSQL .Parameters@txtcliente=Me.txt客户 .Parameters@txtID_Cartao=Me.txtID\u Cartao .Parameters@txtCPF_CNPJ=Me.txtCPF\u CNPJ .Parameters@txtValorDisponivelCartao=Me.txtValorInitiativeLCartao .Parameters@txtTarifa=Me.txtTarifa .Parameters@txtValorBrutoDevolucao=Me.txtValorBrutoDevolucao .Parameters@txtValorLiquido=Me.txtValorLiquido .Parameters@txtMotivo=Me.txtMotivo .Parameters@txtObservacoes=Me.txtobservacos .Parameters@txtDataPagamento=Me.txtDataPagamento .Parameters@txtAgenciaCredito=Me.txtAgenciaCredito .Parameters@txtContaCredito=Me.txtContaCredito .Parameters@cboBancoCredito=Me.cboBancoCredito .Parameters@BancoDebito=Me.BancoDebito .Parameters@AgenciaDebito=Me.AgenciaDebito .Parameters@ContaDebito=Me.ContaDebito .Parameters@cboFormaPagamento=Me.cboformapagmento .Parameters@cboRequisicao=Me.cborequicico .执行dbFailOnError 以 我,再询问 端接头
要重新回应@LeeMac的回答,只需在.Requery调用中限定表单对象

形式!FrmCadastro.Form.Requery 并使用指向精确表单控件的存储查询来避免连接或标点:

SQL检查值和列在名称出现错误时的映射

插入TBCADASTRO、客户、CPF_CNPJ、ID_Cartao、Valordisponsivelcartao、, 塔里法,瓦洛布鲁托德沃卢科,瓦洛里基多,莫蒂沃,观察者, DataPagamento、FormaPagamento、BancoCredito、AgenciaCredito、, ContaCredito、BancoDebito、AgenciaDebito、ContaDebito 价值观形式!弗麦卡斯特罗!TXT客户,表格!弗麦卡斯特罗!txtID_车 陶,, 形式!弗麦卡斯特罗!txtCPF_CNPJ,表格!弗麦卡斯特罗!TXTvalor自发性卡托, 形式!弗麦卡斯特罗!txtTarifa,表格!弗麦卡斯特罗!txtValorBrutoDevolucao, 形式!弗麦卡斯特罗!txtValorLiquido,表格!弗麦卡斯特罗!txtMotivo, 形式!弗麦卡斯特罗!TXT观测,表格!弗麦卡斯特罗!txtDataPagamento, 形式!弗麦卡斯特罗!txtAgenciaCredito,表格!弗麦卡斯特罗!txtContaCredito, 形式!弗麦卡斯特罗!CBO,表格!弗麦卡斯特罗!班科德比托, 形式!弗麦卡斯特罗!代理Debito,表单!弗麦卡斯特罗!康塔德比托, 形式!弗麦卡斯特罗!CBOFORMAPAGANTO,表格!弗麦卡斯特罗!cboRequisicao VBA

专用子cmdAdd\u单击 '添加数据 DoCmd.OpenQuery mySavedQuery '刷新表单 形式!FrmCadastro.Form.Requery'绝对参考 Me.FrmCadastro.Form.Requery'相对参考 端接头
要重新回应@LeeMac的回答,只需在.Requery调用中限定表单对象

形式!FrmCadastro.Form.Requery 并使用指向精确表单控件的存储查询来避免连接或标点:

SQL检查值和列在名称出现错误时的映射

插入TBCADASTRO、客户、CPF_CNPJ、ID_Cartao、Valordisponsivelcartao、, 塔里法,瓦洛布鲁托德沃卢科,瓦洛里基多,莫蒂沃,观察者, DataPagamento、FormaPagamento、BancoCredito、AgenciaCredito、, ContaCredito、BancoDebito、AgenciaDebito、ContaDebito 价值观形式!弗麦卡斯特罗!TXT客户,表格!弗麦卡斯特罗!克斯蒂德·卡托, 形式!弗麦卡斯特罗!txtCPF_CNPJ,表格!弗麦卡斯特罗!TXTvalor自发性卡托, 形式!弗麦卡斯特罗!txtTarifa,表格!弗麦卡斯特罗!txtValorBrutoDevolucao, 形式!弗麦卡斯特罗!txtValorLiquido,表格!弗麦卡斯特罗!txtMotivo, 形式!弗麦卡斯特罗!TXT观测,表格!弗麦卡斯特罗!txtDataPagamento, 形式!弗麦卡斯特罗!txtAgenciaCredito,表格!弗麦卡斯特罗!txtContaCredito, 形式!弗麦卡斯特罗!CBO,表格!弗麦卡斯特罗!班科德比托, 形式!弗麦卡斯特罗!代理Debito,表单!弗麦卡斯特罗!康塔德比托, 形式!弗麦卡斯特罗!CBOFORMAPAGANTO,表格!弗麦卡斯特罗!cboRequisicao VBA

专用子cmdAdd\u单击 '添加数据 DoCmd.OpenQuery mySavedQuery '刷新表单 形式!FrmCadastro.Form.Requery'绝对参考 Me.FrmCadastro.Form.Requery'相对参考 端接头
使用Debug.Print:@Andre很抱歉我不知道,我是新手。如何调试并查看错误在哪里?它是您自己编写的模块还是代码?我看不出SQL语句有任何错误。如果任何字段为数字类型,请删除撇号;如果有日期/时间类型,请使用分隔符。究竟哪一行抛出错误-是重新查询吗?尝试删除.Form部分-试试just Me.Requery.Use Debug.Print:@Andre我很抱歉不知道,我是新手。如何调试并查看错误在哪里?它是您自己编写的模块还是代码?我看不出SQL语句有任何错误。如果任何字段为数字类型,请删除撇号;如果有日期/时间类型,请使用分隔符。究竟哪一行抛出错误-是重新查询吗?尝试删除.Form部分-尝试仅使用Me.Requery。