2016-09-30 16 views
0

Im Versuch, eine SQL-Abfrage in Access VBA zu laufen, aber meine Frage ist zu lang in einer ZeileAusführen von SQL-Abfrage in 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 

so gewohnt laufen sie die vollständige Abfrage auf einmal zu passen, gibt es eine Workaround dafür?

+0

Wenn Sie dies nicht in einer Pass-Through-Abfrage ausführen, müssen Sie den Tabellennamen verwenden, den Access kennt. Es weiß nicht '[Genex]. [Dbo]. [TblProducts]'. – Andre

+0

Hi Andrew, tblproducts ist jetzt in einer verknüpften Tabelle mit dem gleichen Namen. – Bunion

+1

Ihnen fehlt ein Leerzeichen nach 'SELECT', ansonsten sollte es laufen. Wenn nicht, bitte posten Sie Ihren VBA-Code. – Andre

Antwort

0

Sie haben mehrere Probleme.

Einer ist, dass SQL Server und Access SQL nicht identisch sind. Access SQL ist viel begrenzter, nur weil eine SQL-Abfrage auf dem SQL-Server ausgeführt wird bedeutet dies nicht, dass es in Access ausgeführt wird. Um SQL Server-Abfragen auszuführen, die nicht mit Access SQL kompatibel sind, müssen Sie eine Pass-Through-Abfrage verwenden.

Das andere Problem ist, dass Access-Tabellennamen und SQL-Server-Tabellennamen nicht unbedingt identisch sind.

sei nun angenommen, die Sie getroffen haben, dass alle berücksichtigt und Ihre Abfrage ist eigentlich Access SQL kompatibel, können Sie es wie folgt ausführen:

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

Genau das, was ich gesucht habe! das einzige Problem ist Datenkonflikt in Kriterium Ausdruck .. :( – Bunion

+0

Da Ihre Abfrage keine tatsächlichen Kriterien hat, sind zwei Dinge möglich, entweder in Ihren String-Verkettungen benötigen Sie ein Leerzeichen, zum Beispiel "SELECT Field FROM" & "Tabelle "' sollte '" SELECT Feld FROM "&" Tabelle "sein, oder die Reihenfolge (oder Datentyp) der Felder in einer Tabelle sind nicht genau die gleichen auf der anderen, in diesem Fall müssen Sie tatsächlich die Empfängerfelder auflisten in Ihrer Abfrage und/oder führen Sie einige Typkonvertierungen durch. – SunKnight0

1

SQL berücksichtigt nicht Leerraum, dies sollte die gesamte Abfrage auf einmal ausführen.

Ich denke, Ihr Problem ist, dass Sie sich für weitere Informationen SELECT INTO mit TSQL

Sehen Sie hier verwenden möchten:

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

+0

Wenn ich diese Abfrage in SQL Server ausgeführt wird, läuft es ohne Probleme, ich kann nicht die gesamte Abfrage in VBA innerhalb des Zugriffs als meine SQL-Tabelle auch Variablen in eine Zeile in VBA – Bunion

+0

Das ist die Schönheit von Access SQL, es ist Anders als SQL Server :) – User632716

+0

Beeinflusst das mich noch, obwohl meine Tabellen SQL 2008-Tabellen verknüpft sind? – Bunion

1

Sind Sie nur Wraparound Formatierung sprechen, wo Sie die " & _ "um die Zeichenfolge fortzusetzen?

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

Versuchen Sie dies.

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

In VBA können Sie keine Zeilen innerhalb von Strings verketten. https://stackoverflow.com/questions/16624550/how-to-break-long-string-to-multiple-lines – Andre

+0

Warum musst du das Angebot ablehnen? Das & wurde gerade wegen meiner schnellen Eingabe vermisst und ich bin neu hier. Ich garantiere Ihnen, dass das funktioniert. Es funktionierte in den meisten meiner Codes. –

+0

Ihre ursprüngliche Antwort war einfach falsch. - Es hilft auch niemandem, wenn Sie Antworten auf alte, bereits beantwortete Fragen hinzufügen, wenn Sie den vorhandenen Antworten nichts Neues hinzufügen. Du verschwendest nur deine und unsere Zeit (weil die Fragen an die Spitze stoßen). – Andre