0

I am trying to execute a stored procedure via excel VBA, however the stored procedure only inserts a record into a single table and throws an error message when the other 2 records are to be inserted to their respective tables

The error message is thrown on the VBA side however in SQL management studio there are no errors yet it still only inserts to the single table.

--Edit: Error message I receive VBA side

Multiple-step OLE DB operation generated errors. Check each OLE DB status value, if available. No work was done.

    USE [MainRoads]
GO
/****** Object:  StoredProcedure [mruser].[sp_InsertUpdateProject]    Script Date: 18/09/2013 3:04:49 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO

ALTER PROCEDURE [mruser].[sp_InsertUpdateProject]
    -- Add the parameters for the stored procedure here

--@ProjectRecord_ID numeric(18,0),  
@lProjectNumber numeric(18,0),
@sProjectName nvarchar(300),
@sProjectType nvarchar(100),                    
@sDirectorate nvarchar(300),                
@sProjectManager nvarchar(300),
@sContractType nchar(10),
@sProjectDescription    nvarchar(max),
@sCurrentPhase  nvarchar(50),
@sProjectStartDate date,
@sPlannedCompDate date, 
@sReportingPeriod nchar(10),    
@sProjectStatusAt date,
@sPSRApprovedBy nvarchar(100),  
@sPSRApprovedDate date,
@sProjectOverallHlth    text,
@sProjectWrkflwStatus nchar(10),    
@sProjectRAGStatus nchar(10),
@sAssessRAG nchar(10),      
@sSelectRAG nchar(10),      
@sDevelopRAG    nchar(10),  
@sDeliverRAG nchar(10),
@sOperateRAG    nchar(10),
@lTotalOrigBudget decimal(18,2),    
@lTotalAppBudget    decimal(18,2),          
@lActualsLifeToDate decimal(18,2),          
@lTotalForecastToComplete decimal(18,2),    
@lTotalProjVar decimal(18,2),   
@lCommFunding decimal(18,2),    
@lStateFunding decimal(18,2),   
@lOthFunding    decimal(18,2),  
@sCommFundType nvarchar(50),
@sStateFundType nvarchar(50),
@sOthFundType nvarchar(50)

AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    -- Insert statements for procedure here
    Declare @v_recordexist int
    Select @v_recordexist = count(*) From Project_Information Where Project_Number = @lProjectNumber
    --If record does not exists update record
    IF @v_recordexist = 0
        BEGIN
        INSERT INTO [mruser].[Project_Information] ([Project_Number], [Project_Name], [Project_Type], [Directorate], [Project_Manager],[Contract_Type], [Project_Description], [Current_RO&DS_Phase], [Project_Start_Date],[Planned_Completion_Date], [Reporting_Period], [Project_Status_At], [PSR_Approved_By], [PSR_Approved_Date], [Project_Overall_Health], [Project_Workflow_Status], [Project_RAG_Status], [Date_Inserted] ) 
        values(@lProjectNumber, @sProjectName, @sProjectType, @sDirectorate, @sProjectManager, @sContractType, @sProjectDescription, @sCurrentPhase, @sProjectStartDate, @sPlannedCompDate, @sReportingPeriod, @sProjectStatusAt, @sPSRApprovedBy, @sPSRApprovedDate, @sProjectOverallHlth, @sProjectWrkflwStatus, @sProjectRAGStatus, GETDATE())

        --SELECT SCOPE_IDENTITY() as ProjectIDNumber
            BEGIN
            Insert into [mruser].[Project_Finance] ([Project_Number], [Total_Original_Budget], [Total_Approved_Budget], [Actuals_Life_To_Date], [Total_Forecast_Cost_To_Complete], [Total_Project_Variance], [Commonwealth_Funding], [State_Funding], [Other_Funding], [Commonwealth_Fund_Type], [State_Fund_Type], [Other_Fund_Type]) values (@lProjectNumber, @lTotalOrigBudget, @lTotalAppBudget, @lActualsLifeToDate, @lTotalForecastToComplete ,@lTotalProjVar ,@lCommFunding ,@lStateFunding ,@lOthFunding ,@sCommFundType ,@sStateFundType ,@sOthFundType)
                --(strClientID, timeReg, timeValid, bCurrent, durum) VALUES (@strClientID,getdate(),getdate() + 30,'1','1')
            Insert into [mruser].[Project_Milestones] ([Project_Number], [Assess_RAG_Status], [Select_RAG_Status], [Develop_RAG_Status], [Deliver_RAG_Status], [Operate_RAG_Status]) values(@lProjectNumber, @sAssessRAG, @sSelectRAG, @sDeliverRAG, @sDevelopRAG, @sOperateRAG)
            --Insert into [mruser].[Project_Finance] ([Project_Number], [Total_Original_Budget], [Total_Approved_Budget], [Actuals_Life_To_Date], [Total_Forecast_Cost_To_Complete], [Total_Project_Variance], [Commonwealth_Funding], [State_Funding], [Other_Funding], [Commonwealth_Fund_Type], [State_Fund_Type], [Other_Fund_Type]) values (@lProjectNumber, @lTotalOrigBudget, @lTotalAppBudget, @lActualsLifeToDate, @lTotalForecastToComplete ,@lTotalProjVar ,@lCommFunding ,@lStateFunding ,@lOthFunding ,@sCommFundType ,@sStateFundType ,@sOthFundType)
            END

        End
    Else
        BEGIN
        update  [mruser].[Project_Information] set 
            [Project_Number] = @lProjectNumber,
            [Project_Name] = @sProjectName,
            [Project_Type] = @sProjectType,
            [Directorate] = @sDirectorate,
            [Project_Manager] = @sProjectManager,
            [Contract_Type] = @sContractType,
            [Project_Description] = @sProjectDescription,
            [Current_RO&DS_Phase] = @sCurrentPhase,
            [Project_Start_Date] = @sProjectStartDate,
            [Planned_Completion_Date] = @sPlannedCompDate,
            [Reporting_Period] = @sReportingPeriod,
            [Project_Status_At] = @sProjectStatusAt,
            [PSR_Approved_By] = @sPSRApprovedBy,
            [PSR_Approved_Date] = @sPSRApprovedDate,
            [Project_Overall_Health] = @sProjectOverallHlth,
            [Project_Workflow_Status] = @sProjectWrkflwStatus,
            [Project_RAG_Status] = @sProjectRAGStatus
        where [Project_Number] = @lProjectNumber

        update  [mruser].[Project_Milestones] set
         [Project_Number] = @lProjectNumber,
         [Assess_RAG_Status] = @sAssessRAG,
         [Select_RAG_Status] = @sSelectRAG,
         [Develop_RAG_Status] = @sDeliverRAG,
         [Deliver_RAG_Status] = @sDevelopRAG,
         [Operate_RAG_Status] = @sOperateRAG

        where [Project_Number] = @lProjectNumber

        UPDATE [mruser].[Project_Finance] set
        [Project_Number] = @lProjectNumber,
        [Total_Original_Budget] = @lTotalOrigBudget,
        [Total_Approved_Budget] = @lTotalAppBudget,
        [Actuals_Life_To_Date] = @lActualsLifeToDate,
        [Total_Forecast_Cost_To_Complete] = @lTotalForecastToComplete,
        [Total_Project_Variance] = @lTotalProjVar,
        [Commonwealth_Funding] = @lCommFunding,
        [State_Funding] = @lStateFunding,
        [Other_Funding] = @lOthFunding,
        [Commonwealth_Fund_Type] = @sCommFundType,
        [State_Fund_Type] = @sStateFundType,
        [Other_Fund_Type] = @sOthFundType
        where [Project_Number] = @lProjectNumber

        END 


End
CBoolMe
  • 41
  • 8

1 Answers1

0

Turns out that it was due to not referencing the IDENTITY on the primary table.

I passed SCOPE_IDENTITY() to a variable and now it all works without a hitch.

CBoolMe
  • 41
  • 8