Оператор содержит зарезервированное слово или имя аргумента, которое написано с ошибкой или отсутствует, или пунктуация неверна - PullRequest
0 голосов
/ 27 февраля 2019

Я получаю следующую ошибку для приведенного ниже кода:

Оператор выбора включает зарезервированное слово или имя аргумента с ошибкой, отсутствием или пунктуацией.

Я не могу найти орфографические ошибки или зарезервированные слова, которые использовал, поэтому думаю, что какая-то пунктуация отсутствует или неверна.Так как я новичок в этом, у меня возникли проблемы с его выяснением.Любая помощь очень ценится.

Конкретная часть кода, на котором я получаю сообщение об ошибке:

strMakePaTablesSQL = "SELECT [all vendor Rebates].[Key_Code_Name] as [Supplier Name], [all vendor Rebates].[Vendor_Name], " _
                   & "       [all vendor Rebates].[Contract_ID], [all vendor Rebates].[EXP_DATE], " _
                   & "       [all vendor Rebates].[Contract_Status], [all vendor Rebates].[Price Book Priority] as [High Priority Customer], " _
                   & "       [all vendor Rebates].[GPO Or biosite] as [GPO Indicator],  " _
                   & "       [all vendor Rebates].[LTM_Rebate_Dollars] as [LTM Rebate Dollars] " _
                   & " into [" & strTableName & "] From [all vendor Rebates] " _
                   & " Where [Vendor_Name] = '" & strSupplier & "'"

dbPa.Execute strMakePaTablesSQL

Полный код:

Option Compare Database
Option Explicit

Dim dbXL As DAO.Database
Dim strDate As String
Dim strGenl As String
Dim strTableName As String
Dim fld As DAO.Field
Dim strGroupPASQL As String
Dim strMakePaTablesSQL As String
Dim StrPaID As String
Dim strGenl2 As String
Dim strSupplier As String
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Public Function MakeTableVN()
DoCmd.SetWarnings False
Dim dbPa As DAO.Database
Dim rstIePa As DAO.Recordset
Dim lngTotRecCount As Long
Dim tdf As DAO.TableDef
Dim strADR_Name As String
Dim VN_Length As Double

DoCmd.OpenQuery "qryCreate_Local_Supplier_Contact_table"
DoCmd.OpenQuery "qryAdd_New_Vendors_to_tblSupplierContact"
DoCmd.OpenQuery "qryUpdate_Supplier_Contact_List"


Set dbPa = CurrentDb


strGroupPASQL = "SELECT [all vendor rebates].Vendor_Name FROM [all vendor rebates] GROUP BY [all vendor rebates].Vendor_Name "

Set rstIePa = dbPa.OpenRecordset(strGroupPASQL, dbOpenDynaset)
With rstIePa
    If Not (.BOF And .EOF) Then
        .MoveLast
        lngTotRecCount = .RecordCount
        .MoveFirst

        Do While Not .EOF

            strSupplier = .Fields("Vendor_Name") & ""

            strSupplier = Replace(strSupplier, ".", " ")
            strSupplier = Replace(strSupplier, ":", " ")
            strSupplier = Replace(strSupplier, "=", " ")
            strSupplier = Replace(strSupplier, "/", " ")
            strSupplier = Replace(strSupplier, "\", " ")
            strSupplier = Replace(strSupplier, "'", "")
            strSupplier = Replace(strSupplier, "*", " ")

            strTableName = strSupplier

            For Each tdf In dbPa.TableDefs
                If tdf.Name = strTableName Then
                    dbPa.TableDefs.Delete tdf.Name
                End If
            Next

           strMakePaTablesSQL = "SELECT [all vendor Rebates].[Key_Code_Name] as [Supplier Name], [all vendor Rebates].[Vendor_Name], " _
                                  & "[all vendor Rebates].[Contract_ID], [all vendor Rebates].[EXP_DATE], [all vendor Rebates].[Contract_Status], [all vendor Rebates].[Price Book Priority] as [High Priority Customer], [all vendor Rebates].[GPO Or biosite] as [GPO Indicator], [all vendor Rebates].[LTM_Rebate_Dollars] as [LTM Rebate Dollars] into [" & strTableName & "] From [all vendor Rebates] Where [Vendor_Name] = '" & strSupplier & "'"

            dbPa.Execute strMakePaTablesSQL

           Debug.Print "C:\Testing\Expiring rebates\Vendor_Files\" & strSupplier & ".xls"
            DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, strTableName, "C:\Testing\Expiring rebates\Vendor_Files\" & strSupplier & ".xls", True

            DoCmd.DeleteObject acTable, strTableName

1 Ответ

0 голосов
/ 27 февраля 2019

Тем не менее, снова классическая необходимость использования параметризации, лучшая отраслевая практика при запуске SQL на уровне приложений, в данном случае VBA, но концепция переносима на большинство других языков.В частности, рассмотрим MS Access 'QueryDefs для вашего процесса создания таблицы, для которого не требуется другое настраиваемое имя, и параметризируйте значение в предложении WHERE.

Ниже используются хранимые запросы доступа.(более эффективный, чем строковые запросы VBA), на которые ссылаются в VBA.

SQL (сохранить как объект запроса: mySavedParamQuery)

PARAMETERS предложение совместимо только в диалекте Access SQL.

PARAMETERS paramSupplier TEXT(255);
SELECT v.[Key_Code_Name] as [Supplier Name], v.[Vendor_Name],
       v.[Contract_ID], v.[EXP_DATE],
       v.[Contract_Status], v.[Price Book Priority] as [High Priority Customer],
       v.[GPO Or biosite] as [GPO Indicator], 
       v.[LTM_Rebate_Dollars] as [LTM Rebate Dollars]
INTO tmpVendorTable
FROM [all vendor Rebates] v
WHERE v.[Vendor_Name] = paramSupplier;

SQL (сохранить как объект запроса: mySavedAggregateQuery)

SELECT v.Vendor_Name
FROM [all vendor rebates] v
GROUP BY v,Vendor_Name

VBA (без SQL)показывает)

...
Dim qdef As QueryDef
Dim strFile As String           

Set rstIePa = dbPa.OpenRecordset("mySavedAggregateQuery", dbOpenDynaset)
With rstIePa
    If Not (.BOF And .EOF) Then
        .MoveLast
        lngTotRecCount = .RecordCount
        .MoveFirst

        Do While Not .EOF    
          strSupplier = .Fields("Vendor_Name")
          strFile = "C:\Testing\Expiring rebates\Vendor_Files\" & strSupplier & ".xls"

          For Each tdf In dbPa.TableDefs
             If tdf.Name = "tmpVendorTable" Then
                 dbPa.TableDefs.Delete tdf.Name
             End If
          Next tdf   

          Set qdef = dbPa.QueryDefs("mySavedParamQuery")   ' INITIALIZE QUERYDEF
          qdef!paramSupplier = strSupplier                 ' BIND PARAMETER
          qdef.Execute dbFailOnError                       ' EXECUTE ACTION  

          Debug.Print strFile
          DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, _
                                    "tmpVendorTable", strFile, True    
          .MoveNext
       Loop
    End If
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...