Compile function Delete_Record_From_SQL(Table, Key, LogError, pKey)

/*****************************************************************************\
	Deletes the given record from the MSSQL database. Since every table differs
	from the next, it's not really possible to use the same code base for all
	tables. Therefore, common functionality has been moved into separate
	stored procedures. Supported tables are ones that have a stored procedure
	that handles the copy request. These are called the Handlers. A Handler
	is identified by the following naming convention:
	
	DELETE_XYZ_RECORD_TO_SQL
	
	XYZ is a placeholder for a table name. For example, the ASM_PART table has
	a handler called DELETE_ASM_PART_RECORD_TO_SQL. If a table does not have a
	handler, then it is not supported by this procedure.
	
	History
	-------
	09/15/2010    KRF    Original Programmer
\*****************************************************************************/

$insert Microsoft_Ado_Equates

If Assigned(LogError) else LogError = 0

Declare subroutine Sql_Services, SRP_COM
Declare function Sql_Services, Error_Services, SRP_COM, Environment_Services
Ans = ""

// Make sure table is uppercase
Convert @LOWER_CASE to @UPPER_CASE in Table

// The expected name of the handler
Handler = "DELETE_":Table:"_RECORD_FROM_SQL"

// Find the stored procedure that handles this table
Open "SYSOBJ" to hSysObj then
    Read ObjCode from hSysObj, "$":Handler:"*LSL2" then
        // Connect to the ODBC/ADO
        If SRP_Com(Connection, "CREATE", "ADODB.Connection") then
            // Connect to the database via ODBC    
            ConnectionString    = Environment_Services('GetSQLScrapeConnectionString')
            If SRP_Com(Connection, "CALL", "Open", ConnectionString) EQ "" then
                // Read the record and call the handler
                If Key NE "" then
                    Ans = Function(@Handler(Connection, Key))
                    If Ans EQ '' then
                        If Assigned(pKey) then
                            Open 'SQL_PENDING' to pTable then
                                Delete pTable, pKey else null
                            end
                        end
                    end
                end
            end else
                Ans = 'Unable to open connection to SQL server. SQL connection error: ':SRP_Com(Connection, "ERROR")
            end
            SRP_Com(Connection, "CALL", "Close")
            SRP_Com(Connection, "RELEASE")
        end else
            Ans = "Unable to create ADO connection."
        end
    end
end

If LogError AND Len(Ans) then
    Open "SQL_ERROR" to hSqlError then
        Read Errors from hSqlError, Date() then
            Errors := @FM:Table:@VM:Key:@VM:Ans
            Write Errors to hSqlError, Date()
        end else
            Errors = Table:@VM:Key:@VM:Ans
            Write Errors to hSqlError, Date()
        end
    end
end

// Always log the result

If Assigned(pKey) then
    Open 'SQL_LOG' to hLog then
        If Ans EQ '' then
            Result = 'PROCESSED'
        end else
            Result = Ans
        end
        CurrDate = Date()
        Read Log from hLog, CurrDate then
            Log := @FM:pKey:@VM:Result
        end else
            Log = pKey:@VM:Result
        end
        Write Log to hLog, CurrDate
    end
end

Return Ans

