Estoy intentando insertar algunos registros nuevos en una base de datos de acceso.

Aquí está mi código,

' OPEN ACCESS APPLICATION
    Set objAccess = CreateObject("Access.Application")
    objAccess.OpenCurrentDatabase DatabasePath

 ' OPEN INTERNAL DATABASE
    Set db = objAccess.CurrentDb


BuName = Ws.Sheets("Config").Range("T1").Value
RepName = Ws.Sheets("Config").Range("T2").Value
NumberofUniqueSheets = Ws.Sheets("Config").Range("T3").Value

For i = 1 To NumberofUniqueSheets

    CmpValue = Ws.Sheets("Config").Range("U1").Value
    ShtNamedec = Split(CmpValue, "$")(0)
    HeadRow = Split(CmpValue, "$")(1)
    AddInfo = Split(CmpValue, "$")(2)
    DateInfo = Split(CmpValue, "$")(3)

    ' PREPARE STATEMENT
    strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
               & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo]);"

    ' BUILD TEMP QUERYDEF
    Set qdef = db.CreateQueryDef("", strSQL)

    ' BIND PARAMS TO VARIABLES
    qdef!BusinessUnitparam = BuName
    qdef!ReportNameparam = RepName
    qdef!SheetNameparam = ShtNamedec
    qdef!HeaderRowparam = HeadRow
    qdef!AdditionalInfoparam = AddInfo
    qdef!DateRequiredinfoparam = DateInfo

    ' EXECUTE ACTION QUERY
    qdef.Execute

Next

    Set qdef = Nothing
    Set db = Nothing
    Set objAccess = Nothing

Me enfrento a un error en la declaración Build Temp QueryDef y el error dice '

Error de sintaxis en Insertar en instrucción.

`Agregué los valores en el inserto en la declaración como se muestra a continuación

strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
               & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo]) VALUES (BuName, RepName, ShtNamedec, HeadRow, AddInfo, DateInfo);"

Pero da otra declaración sobre Ejecutar consulta de acción que dice que se esperan muy pocos parámetros 12. Aquí está la estructura de la tabla como referencia:

ReportTypes

0
Siddharth Thanga Mariappan 15 nov. 2017 a las 21:53

2 respuestas

La mejor respuesta

Esta consulta funciona con parámetros para el diseño de su tabla de datos:

strSQL = "PARAMETERS [BusinessUnitparam] TEXT(255), [ReportNameparam] TEXT(255),[SheetNameparam] TEXT(255), [HeaderRowparam] INTEGER, [AdditionalInfoparam] TEXT(255), [DateRequiredinfoparam] TEXT(255);" _
           & "INSERT INTO ReportTypes ([BusinessUnit], [ReportName], [SheetName], [HeaderRow], [AdditionalInfo], [DateRequiredinfo])" _
           & "SELECT BusinessUnitparam AS Expr1, ReportNameparam AS Expr2, SheetNameparam AS Expr3, HeaderRowparam AS Expr4, AdditionalInfoparam AS Expr5, DateRequiredInfoparam as Expr6;"
1
majjam 15 nov. 2017 a las 20:12

Tu consulta es mala.

Éste:

INSERT INTO ReportTypes ([BusinessUnit], 
                         [ReportName], 
                         [SheetName], 
                         [HeaderRow], 
                         [AdditionalInfo], 
                         [DateRequiredinfo]) 
VALUES (BuName, 
        RepName,  
        ShtNamedec,  
        HeadRow,  
        AddInfo,  
        DateInfo)

No trabajará.

Aunque esto podría:

"INSERT INTO ReportTypes ([BusinessUnit], 
                         [ReportName], 
                         [SheetName], 
                         [HeaderRow], 
                         [AdditionalInfo], 
                         [DateRequiredinfo]) 
VALUES ('" + BuName + "', 
        '" + RepName + "',  
        '" + ShtNamedec + "',  
        " + HeadRow + ",
        '" + AddInfo + "',  
        '" + DateInfo + "')"

Probablemente puedas eliminar todas esas cosas de asignación de parámetros. No veo que agregue valor aquí.

0
n8. 15 nov. 2017 a las 19:42