2016-09-30 81 views
0

我试着运行在Access中VBA的SQL查询,但我的查询是太长,无法在同一行运行SQL查询在Access VBA

INSERT INTO tblProduct SELECT[SAMPartGrp],[ProductPrefix] ,[ProductCode] ,[pcode1],[pcode2],[SubPart1],[SubPart2],[ProductCodeNew],[ProductDescription],[MadeFrom],[MadeFromDescription],[Field1],[SamFamilySort1],[SamFamilySort2],[SamFamilySort3] 
,[SamFamilySort4],[SamFamilySort5],[Grade],[Length],[Thickness],[fWidth],[Factor],[CubicMtrs],[CubicMtrsFull],[Weight(T)],[DrawingFilepath],[PackingFilePath],[EFACSProductGrouping],[BatchSize],[PackSize],[Density],[createdby],[createddate],[ProductType],[reorderpolicy],[EFACSExport],[PreactorExport],[customer],[Obsolete/DoNotUse],[noinminipack],[piecesincrate],[minipackheight],[DimA],[DimB],[DimC],[DimD],[DimE],[DimF],[DimG],[DimH],[DimI],[DimJ],[DimK],[DimL],[DimM],[DimN],[DimO] ,[DimP],[DimQ],[DimR],[DimS],[DimT],[DimU],[DimV],[DimW],[DimX],[DimY],[DimZ],[TolA],[TolB],[TolC],[TolD],[TolE],[TolF],[TolG],[TolH],[TolI],[TolJ],[TolK],[TolL],[TolM],[TolN],[TolO],[TolP],[TolQ],[TolR],[TolS],[TolT],[TolU],[TolV],[TolW],[TolX],[TolY],[TolZ] 
    ,[Dimension],[Main],[Saws],[Moulders],[PaintLines],[XCut],[DET],[MitreSaw],[Wrapper],[Blocks] 
    ,[HingeRecess],[ShrinkWrap],[CNC],[SW],[ShrinkWrapPackSize] ,[SAMBarCode],[machinedaway],[ExcludeFromPreactorUpload],[UseOtherM3XC],[UseOtherM3XC81],[UseOtherM3MS],[UseOtherM3MS83],[comment],[samtype1],[fsc],[LabelPack],[LabelPiece],[trml],[vtype1],[vtype2],[minipack] ,[profile],[madefromlength],[productchamp],[packtype],[uom],[acumatica],[Cupboard],[AcmtaExport],[ExportedtoAcmta],[PostingClass] 
    FROM tblProducts 

所以它不会在运行一次完整的查询,有没有解决方法?

+0

除非在Pass-Through查询中运行此操作,否则必须使用Access知道的表名称。它不知道'[Genex]。[dbo]。[tblProducts]'。 – Andre

+0

嗨安德鲁,tblproducts现在作为一个具有相同名称的链接表。 – Bunion

+1

“SELECT”后面缺少一个空格,除此之外它应该运行。如果没有,请发布您的VBA代码。 – Andre

回答

0

你有几个问题。

一个是SQL服务器和Access SQL不一样。访问SQL更受限制,因为SQL查询在SQL服务器上运行并不意味着它将在Access中运行。要运行与Access SQL不兼容的SQL Server查询,您必须使用传递查询。

另一个问题是Access表名和SQL服务器表名不一定相同。现在

,假设你已经采取了所有的考虑和您的查询实际上是访问SQL兼容,你可以像这样运行:

Dim sql as String 
sql = "Query part A" 
sql = sql & "Query Part B" 
... repeat as necessary 
DoCmd.RunSQL sql 
+0

正是我在找什么!唯一的问题是标准表达式中的数据不匹配。:( – Bunion

+0

因为你的查询没有任何实际的标准,所以有两件事是可能的,无论是在你的字符串连接中你需要一个空格,例如'“SELECT FIELD FROM”&“table “'应该是'”SELECT FIELD FROM“&”table“',或者一个表中字段的顺序(或数据类型)在另一个表上不完全相同,在这种情况下,您必须实际列出接收字段在您的查询和/或执行一些类型的转换。 – SunKnight0

1

SQL不考虑空白空间,这应该一次运行整个查询。

我觉得你的问题是,你要使用SELECT INTO与TSQL

在这里看到更多的信息:

https://msdn.microsoft.com/en-us/library/bb208934(v=office.12).aspx

+0

如果我在SQL服务器上运行这个查询,它运行没有任何问题,我只是无法在访问内运行VBA中的整个查询,因为我的sql表中可能有变量,以适应​​VBA中的一行内容 – Bunion

+0

这就是Access SQL的美妙之处,不同于SQL Server :) – User632716

+0

即使我的表连接SQL 2008表,这是否仍然影响我? – Bunion

1

您刚才谈到环绕格式,在您使用了“ & _“继续你的字符串?

strSQL = "SELECT [SAMPartGrp],[ProductPrefix] ,[ProductCode] ,[pcode1], " & _ 
    "[pcode2], [SubPart1],[SubPart2],[ProductCodeNew],[ProductDescription], " & _ 
    "[MadeFrom], [MadeFromDescription],[Field1],[SamFamilySort1], " & _ 
    "[SamFamilySort2],[SamFamilySort3],[SamFamilySort4], " & _ 
    "[SamFamilySort5], [Grade], " 
0

试试这个。

Dim strSQL as String 

strSQL = "INSERT INTO tblProduct SELECT[SAMPartGrp],[ProductPrefix] , " & _ 
     "[ProductCode] ,[pcode1],[pcode2],[SubPart1],[SubPart2],[ProductCodeNew], " & _ 
     "[ProductDescription],[MadeFrom],[MadeFromDescription],[Field1], " & _ 
     "[SamFamilySort1],[SamFamilySort2],[SamFamilySort3], [SamFamilySort4], " _ 
     "[SamFamilySort5],[Grade],[Length],[Thickness], [fWidth],[Factor], " & _ 
     "[CubicMtrs],[CubicMtrsFull],[Weight(T)],[DrawingFilepath], " & _ 
     "[PackingFilePath],[EFACSProductGrouping],[BatchSize], " & _           
     "[PackSize],[Density],[createdby],[createddate],[ProductType], " & _ 
     "[reorderpolicy],[EFACSExport],[PreactorExport],[customer], " & _ 
     "[Obsolete/DoNotUse],[noinminipack],[piecesincrate], [minipackheight], " & _ 
     "[DimA],[DimB],[DimC],[DimD],[DimE],[DimF],[DimG],[DimH], " & _ 
     "[DimI],[DimJ],[DimK],[DimL],[DimM],[DimN],[DimO] ,[DimP], " &_ 
     "[DimQ],[DimR],[DimS],[DimT],[DimU],[DimV],[DimW],[DimX], " & _ 
     "[DimY],[DimZ],[TolA],[TolB],[TolC],[TolD],[TolE],[TolF], " & _  
     "[TolG],[TolH],[TolI],[TolJ],[TolK],[TolL],[TolM],[TolN], " & _ 
     "[TolO],[TolP],[TolQ],[TolR],[TolS],[TolT],[TolU],[TolV], " & _ 
     "[TolW],[TolX],[TolY],[TolZ],[Dimension],[Main],[Saws], " &_ 
     "[Moulders],[PaintLines],[XCut],[DET],[MitreSaw],[Wrapper], " &_ 
     "[Blocks],[HingeRecess],[ShrinkWrap],[CNC],[SW], " & _ 
     "[ShrinkWrapPackSize] ,[SAMBarCode],[machinedaway], " & _ 
     "[ExcludeFromPreactorUpload],[UseOtherM3XC],[UseOtherM3XC81], " & _ 
     "[UseOtherM3MS],[UseOtherM3MS83],[comment],[samtype1],[fsc], " & _ 
     "[LabelPack],[LabelPiece],[trml],[vtype1],[vtype2],[minipack] , " & _ 
     "[profile],[madefromlength],[productchamp],[packtype],[uom], " & _ 
     "[acumatica],[Cupboard],[AcmtaExport],[ExportedtoAcmta], " & _ 
     "[PostingClass] FROM tblProducts;" 
DoCmd.RunSQL strSQL 
+0

在VBA中,您不能连接字符串内部的行。 https://stackoverflow.com/questions/16624550/how-to-break-long-string-to-multiple-lines – Andre

+0

为什么你必须downvote?由于我的快速打字,我错过了,再加上我是新来的。我保证你会这么做。它在我的大部分代码中都有效。 – 2017-10-27 21:19:17

+0

您的原始答案完全错误。 - 另外,如果您添加对旧的,已经回答的问题的答案,如果您没有在现有答案中添加任何新内容,它不会对任何人有所帮助。你只是在浪费你的时间和我们的时间(因为问题碰上了顶端)。 – Andre