Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access SQL与VBA的结合使用_Ms Access_Vba - Fatal编程技术网

Ms access SQL与VBA的结合使用

Ms access SQL与VBA的结合使用,ms-access,vba,Ms Access,Vba,好吧,我是新来的,这将是我的第一个问题,我正忙于我的代码。 我不断遇到与运行时错误相关的相同错误:Access Visual Basic中的3129 现在它是在我的代码下面的公共子检查中设置的导入按钮功能: Public Sub ImportDataTablebtn_Click() Dim strSQL As String Dim db As DAO.Database Dim tbl1 As DAO.TableDef Dim tbl2 As DAO.TableDef Dim fld1tbl1 A

好吧,我是新来的,这将是我的第一个问题,我正忙于我的代码。 我不断遇到与运行时错误相关的相同错误:Access Visual Basic中的3129 现在它是在我的代码下面的公共子检查中设置的导入按钮功能:

Public Sub ImportDataTablebtn_Click()
Dim strSQL As String
Dim db As DAO.Database
Dim tbl1 As DAO.TableDef
Dim tbl2 As DAO.TableDef
Dim fld1tbl1 As DAO.Field
Dim fld2tbl1 As DAO.Field
Dim fld3tbl1 As DAO.Field
Dim fld1tbl2 As DAO.Field
Dim fld2tbl2 As DAO.Field
Dim fld3tbl2 As DAO.Field

Set db = CurrentDb
Set tbl1 = db.TableDefs("Clicks Returns")
Set tbl2 = db.TableDefs("Oct 2015 Clicks Returns")
Set fld1tbl1 = tbl1.Fields("SKU")
Set fld2tbl1 = tbl1.Fields("Item Description")
Set fld3tbl1 = tbl1.Fields("Oct 2015 FIN YTD TY % Returns")
Set fld1tbl2 = tbl2.Fields("Sku")
Set fld2tbl2 = tbl2.Fields("Item Description")
Set fld3tbl2 = tbl2.Fields("F21")

DoCmd.RunSQL strSQL

strSQL = "INSERT INTO tbl1 (fld1tbl1, fld2tbl1, fld3tbl1)" & _
"SELECT fld1tbl2, fld2tbl2 fld3tbl2 FROM tbl2;"

Set db = Nothing

End Sub
现在我知道我的一些行,比如表重命名和字段可能不是必需的,尽管我认为这会使代码更简单

请让我知道我在哪里犯了错误,因为我想通过一遍又一遍地看它来发疯

在数据库中是我所指的表,我想将某些字段从一个表移动到另一个表,因为它是导入的excel表,我正忙于使它成为一个自动化系统,在这个系统中,有人只需单击表单上的按钮,它就会对数据进行排序


感谢您花时间阅读这篇文章并回答它

您的代码中有几个错误

首先,代码不会用变量替换表/字段名。因此,字符串SELECT fld1tbl2不会转换为SELECT[Item Description]

其次,在构建查询之前,您正在尝试运行查询

最后,Access使用VBA而不是VBScript。这是另一种语言。虽然他们有很多共同点,但也有一些重要的区别。坚持使用VBA标签,您将更有可能获得所需的答案

我已经重构了你的代码。此版本生成并运行查询

公共子导入数据表btn_单击()
作为字符串的Dim strSQL
'生成查询。
strSQL=“插入[点击返回]”&_
“(SKU,[项目说明],[2015年10月财务-年初至今TY%退货]”&_
“从[2015年10月单击返回]中选择Sku[项目说明],F21;”
'运行查询。
DoCmd.RunSQL strSQL
端接头

您的代码中有几个错误

首先,代码不会用变量替换表/字段名。因此,字符串SELECT fld1tbl2不会转换为SELECT[Item Description]

其次,在构建查询之前,您正在尝试运行查询

最后,Access使用VBA而不是VBScript。这是另一种语言。虽然他们有很多共同点,但也有一些重要的区别。坚持使用VBA标签,您将更有可能获得所需的答案

我已经重构了你的代码。此版本生成并运行查询

公共子导入数据表btn_单击()
作为字符串的Dim strSQL
'生成查询。
strSQL=“插入[点击返回]”&_
“(SKU,[项目说明],[2015年10月财务-年初至今TY%退货]”&_
“从[2015年10月单击返回]中选择Sku[项目说明],F21;”
'运行查询。
DoCmd.RunSQL strSQL
端接头

在将
strSQL
变量设置为
INSERT
语句之前,您正在尝试执行
DoCmd.RunSQL strSQL
。将
strSQL=
行移到
DoCmd.RunSQL
上方。同样在
strSQL
中,在关闭参数和单词“SELECT”之间留出一个空格。@TabAlleman或
vbCrLf
都可以完成此任务。尽管我更喜欢
vbCrLf
,因为当出于调试目的输出时,我可以将它们替换为

,并获得漂亮整洁的SQL查询,我可以直接在SSMS中启动。在
strSQL
变量设置为
INSERT
语句之前,您正在尝试执行
DoCmd.RunSQL strSQL
。将
strSQL=
行移到
DoCmd.RunSQL
上方。同样在
strSQL
中,在关闭参数和单词“SELECT”之间留出一个空格。@TabAlleman或
vbCrLf
都可以完成此任务。尽管我更喜欢
vbCrLf
,因为当输出用于调试时,我可以用

替换它们,并得到漂亮整洁的SQL查询,我可以直接在SSMS中启动。啊,是的,当然我甚至没有想过要在VBA和VBscript之间切换lol谢谢你指出这一点。。。不幸的是,我没有在我的家庭电脑的文件,以实际测试它目前。我只有星期一才能。。。虽然只是看看你在代码中显示了什么,它更有意义,而且我认为并相信它应该正常工作。非常感谢您的回答:非常感谢各位,非常感谢所有的帮助:是的,当然,我甚至没有想过要在VBA和VBscript之间切换lol谢谢您指出这一点。。。不幸的是,我没有在我的家庭电脑的文件,以实际测试它目前。我只有星期一才能。。。虽然只是看看你在代码中显示了什么,它更有意义,而且我认为并相信它应该正常工作。非常感谢您的回答:D非常感谢各位,非常感谢所有的帮助:D