Mike Schmidt hit his 22nd home run and Charles Hudson (6-9) allowed one unearned run over six innings last night as the Philadelphia Phillies defeated visiting Houston, 4-2, to end the Astros' seven-game winning streak.

The Phillies led, 1-0, in the first off Jim Deshaies (5-3). Gary Redus led off with a double and scored on Von Hayes' two-out single. One inning later, Deshaies walked the bases loaded, then walked Ron Roenicke to make it 2-0.

Schmidt opened the third with his homer off reliever Larry Andersen, making it 3-1.

Cubs 8, Dodgers 3: Jody Davis hit a two-run homer and Keith Moreland had four hits as Los Angeles' four-game winning streak ended in Chicago.

Steve Trout (4-3), who hadn't won since June 8 and has not had a complete game since last September, allowed five hits in six innings. Lee Smith pitched the final 1 2/3 innings for his 17th save. Bob Welch (4-9) was the loser.

Davis' 13th homer came in the eighth after the Dodgers had rallied within 5-3.

Reds 9, Expos 2: Eric Davis homered and scored three runs and Buddy Bell hit a three-run homer to back a five-hitter by John Denny (7-9) as Cincinnati won at home.

Davis had three hits to extend his hitting streak to 17 games. His 15th home run, in the second, cut Montreal's lead to 2-1. The Reds tied it on Eddie Milner's ninth homer to begin the fourth and scored two more that inning off Dennis Martinez (0-3) on Tim Raines' error on a Davis double and Denny's run-scoring single.

Giants 7, Pirates 3: Pittsburgh first baseman Sid Bream committed two run-scoring errors during a four-run third inning and Dan Gladden hit a two-run double in the fifth to lead visiting San Francisco.

The Giants took a 4-0 lead in the third off Mike Bielecki (6-6). Gladden singled, Robby Thompson doubled and Chris Brown singled. Brown scored from first when Bream mishandled Harry Spilman's hard-hit grounder for a two-base error. Bob Melvin singled, and Spilman scored as Bream threw wildly for his second error of the inning.

Roger Mason (3-4) pitched 5 2/3 innings and allowed three runs on a homer by Barry Bonds and a two-run homer by R.J. Reynolds.

Cardinals 3, Padres 2: Bob Forsch (9-6) equaled last year's victory total and Vince Coleman had his first game-winning RBI of the year for St. Louis at home.

Coleman's third-inning single off San Diego's Ed Whitson (0-2) drove in Mike LaValliere and broke a 1-1 tie.

Rick Horton came on for St. Louis in the seventh after pinch hitter Dane Iorg hit a bloop double off Forsch. Horton yielded a run-scoring single to Tony Gwynn and a single to John Kruk before Todd Worrell (19th save) entered and ended the inning.

Mets-Braves, ppd.: New York's game in Atlanta was called after a rain delay of 2 hours 35 minutes. It will be made up today as part of a doubleheader beginning at 5:40 p.m.