Another thing to check which often does not set a trouble code... Check your Coolant Temperature Sensor (the one that reports to the computer, not the one that operates the gauge). I've had three cars with faulty CTS, two ran rich all the time because they never told the ECM that the engine had reached operating temp (therefore running open loop continuously) and one that reported engine was ALWAYS at operating temp (never running open loop as it should when cold).
In all 3 of these instances, I never had a SES light illuminate, and no codes were stored. Might be something to look at, and anyone with a scanner should be able to see if the engine is in open loop or closed loop when the engine has been run long enough to be at normal operating temp.