2016-02-25 39 views
1

好吧,我是新来的,这将是我的第一个问题,我遇到了我忙于处理的代码。 我保持碰撞这是关系到运行时错误相同的错误:在Access 3129 Visual Basic中 现在是在我下面的代码公用Sub检查设置导入按钮功能:结合使用SQL和VBA

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表格,我正在忙于使其成为某个自动化系统只需点击表单上的按钮即可清理数据。

感谢您抽出时间来阅读这篇文章,并回答它

+5

您试图在'strSQL'变量设置为'INSERT'语句之前执行'DoCmd.RunSQL strSQL'。在'DoCmd.RunSQL'上移动'strSQL ='行。 – Lankymart

+1

也在你的'strSQL'中,在close-paren和单词“SELECT”之间加一个空格。 –

+0

@TabAlleman或'vbCrLf'可以完成这项工作。尽管'vbCrLf'优先,因为我可以用'
'代替输出时用于调试目的,并获得漂亮的整洁的SQL查询,我可以在SSMS中直接启动。 – Lankymart

回答

4

有一对夫妇在你的代码错误。

首先,代码不会将您的变量替换为表/字段名称。所以字符串SELECT fld1tbl2未转换为选择[商品说明]

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

终于Access使用VBA而不是VBScript。这是一种不同的语言。虽然他们有很多共同点,但还是有一些重要的区别。坚持VBA标签,你将更有可能得到你需要的答案。

我重构了你的代码。此版本构建并运行查询。

Public Sub ImportDataTablebtn_Click() 
Dim strSQL As String 

    ' Build Query. 
    strSQL = "INSERT INTO [Clicks Returns] " & _ 
     "(SKU, [Item Description], [Oct 2015 FIN YTD TY % Returns]) " & _ 
     "SELECT Sku, [Item Description], F21 FROM [Oct 2015 Clicks Returns];" 

    ' Run Query. 
    DoCmd.RunSQL strSQL 
End Sub 
+0

啊是的,当然我甚至没有想过要在VBA和VBscript之间进行,谢谢你指出了......不幸的是,我目前没有在家用电脑上的文档来实际测试它。我只会在星期一能够......虽然只是看看你在代码中显示的内容,但它更有意义,我认为并相信它应该可以正常工作。非常感谢你的回答:D – Heartless68

+0

非常感谢你们,非常感谢所有的帮助:D – Heartless68