CHICAGO -- For its first 49 seasons in the majors, Houston could claim it had never lost 100 games in a year.
"We were (0 for 14) with runners in scoring position, which turned out to be quite a number," Astros manager Brad Mills said. "At least we're putting ourselves in that position."
The Astros, who began play in 1962 as the Colt .45s, dropped to 51-100. Colorado and the Angels are the only remaining franchises that have never lost 100 games in a season.
"It's definitely a number that breaking camp with the talent we've had all year in this clubhouse, (I didn't think) anything like that would happen," shortstop Clint Barmes said.
The Cubs, meanwhile, won for the 4,000th time since moving into Wrigley Field in 1915. Only the Yankees at the original Yankee Stadium and Red Sox at Fenway Park have won more games in one ballpark than the Cubs have taken at their ivy-covered home.
Lopez (6-6) didn't allow an earned run and held the Astros to four hits in six innings while striking out seven, a performance he's hoping will help translate to a big league spot next year.
"It's very important," Lopez said. "I'm trying to do a job this year and trying to find a spot somewhere. Free agency, they just look at your numbers. It's important for me to go home and make a case for getting a job next year."
Sean Marshall held on in the ninth for his fifth save.
Barmes' one-out double off the lefty put runners on second and third, then Marshall intentionally walked J.D. Martinez to load the bases. But Jose Altuve struck out and pinch-hitter Humberto Quintero grounded out to end the game.
Bryan LaHair hit a solo homer and reached base three times for the Cubs.
LaHair, who led the minor leagues with 38 homers, continued his eye-opening September audition with a drive to dead center field on the first pitch by Henry Sosa (2-5) in the fourth.
"When he squares it up it's pretty impressive," Cubs manager Mike Quade said. "Big, strong kid. We like what we've seen so far, that's for sure."
LaHair also walked twice and is hitting .433 in 30 at-bats since his promotion.
"I'm trying to get good pitches to hit and hit them hard like I've been doing all year," LaHair said. "That's my whole approach, just getting good pitches to hit and hitting them hard."
Sosa recovered from first-inning control problems to throw six innings, holding Chicago to four hits and two runs with five walks and five strikeouts.
Sosa hadn't walked more than three batters in any of his 36 appearances, including 17 starts, between the majors and minors this season. He walked four in the first inning, leading to the Cubs' first run.
"I don't really know what happened to me in the first inning," Sosa said. "Just kind of like all over the place."
Campana also reached on an infield single in the seventh. Despite playing on a part-time basis, Campana leads the Cubs with 22 steals and has been caught only once. His 95.7 percent success rate is the best in the majors.
Lopez matched his season high with five strikeouts in just three innings. He reached his season high in the fourth and finished his most whiffs since July 22, 2010.
The Astros threatened in the eighth, but Kerry Wood struck out J.B. Shuck looking with runners on the corners to end the inning. It was another frustrating moment in a long season with which the Astros say they've already come to grips.
"We can't focus on (100 losses) right now," Mills said. "It's not the right thing that we need to be looking at as we move forward."
The last six games played between the Cubs and Astros have been decided by one run. ... Starlin Castro doubled to lead off the fifth. He's reached base in 30 straight games, the most by a Cubs shortstop since Ernie Banks in 1960. ... Quade gave CF Marlon Byrd the day off. As he continues to mix and match between the veterans and young players on his expanded September roster, Quade said 3B Aramis Ramirez would likely get Sunday's game off. ... Altuve did not start and later entered as a pinch-runner. Altuve was hitting .125 over his last 11 games and has drawn just four walks in 200 plate appearances since coming the big leagues. ... Ryan Dempster will make his 32nd start of the season for the Cubs in Sunday's series finale and will attempt break a personal four-game losing streak. He'll face Houston's Brett Myers, who has a 1.19 ERA in 22 2/3 innings over his last three starts.