sempaisaleh
دوشنبه 02 تیر 1393, 12:02 عصر
با سلام خدمت دوستان
من يه sp نوشتم و تو دلفي با adostorproce بهش متصل شدم ولي وقتي مي خوام تو برنامه به پارامتر ها دوباره مقدار بدم هيچ جوابي نمياره. به نشر ميرسه كه وقتي توي جواب بدست آمده دوباره select دوم زده ميشه.
اين از sp
CREATE PROCEDURE AA (
@L1_CODE Varchar(6),@L1_CODE2 Varchar(6),
@SND_DATE char(8),@SND_DATE2 char(8) , @Mandeh Int,
@ACC_YEAR Int ) as
select * from (
Select
L1_CODE,L1_Name,L2_CODE,L2_Name,A.L3_CODE,a.L3_Nam e,
Case when Sum(Mandeh)>0 Then Sum(Mandeh) Else 0 End As MBed ,
Case when Sum(Mandeh)<0 Then -1*Sum(Mandeh) Else 0 End As MBes
From
a_vw_article a Left Outer Join A_Acc_cd3 Cd3 On a.L3_Code=Cd3.l3_code
Left Outer Join A_L3Type L3 On Cd3.L3Type_cd=L3.L3Type_cd
Where
(acc_year = 1392 ) and
( (@L1_CODE is null) Or ( (L1_CODE<=@L1_CODE2) And (L1_CODE>=@L1_CODE) ) ) and
( (@SND_DATE is null) Or ( (SND_DATE<=@SND_DATE2) And (SND_DATE>=@SND_DATE) ) )
Group By L1_CODE,L1_Name,L2_CODE,L2_Name,a.L3_CODE,a.L3_Nam e
Having (@Mandeh Is Null Or ABS(Sum(Mandeh))>@Mandeh)
) kk
Order By L1_CODE
GO
اينم از كد فراخواني دوباره:
ADOStoredProc1.Close;
ADOStoredProc1.ConnectionString:='Provider=SQLOLED B.1;Password=xxxxxxx;Persist Security Info=True;User ID=sa;Initial Catalog=TadbirAsak91;Data Source=192.168.2.1';
ADOStoredProc1.ProcedureName:='AA;1';
ADOStoredProc1.Parameters.ParamByName('@L1_CODE'). Value := '115';
ADOStoredProc1.Parameters.ParamByName('@L1_CODE2') .Value := '115';
ADOStoredProc1.Parameters.ParamByName('@SND_DATE') .Value := '91/01/01';
ADOStoredProc1.Parameters.ParamByName('@SND_DATE2' ).Value := '91/10/31';
ADOStoredProc1.Parameters.ParamByName('@Mandeh').V alue := '1';
ADOStoredProc1.Parameters.ParamByName('@ACC_YEAR') .Value := '1391';
ADOStoredProc1.Active:=true;
ADOStoredProc1.ExecProc;
ADOStoredProc1.Open;
من يه sp نوشتم و تو دلفي با adostorproce بهش متصل شدم ولي وقتي مي خوام تو برنامه به پارامتر ها دوباره مقدار بدم هيچ جوابي نمياره. به نشر ميرسه كه وقتي توي جواب بدست آمده دوباره select دوم زده ميشه.
اين از sp
CREATE PROCEDURE AA (
@L1_CODE Varchar(6),@L1_CODE2 Varchar(6),
@SND_DATE char(8),@SND_DATE2 char(8) , @Mandeh Int,
@ACC_YEAR Int ) as
select * from (
Select
L1_CODE,L1_Name,L2_CODE,L2_Name,A.L3_CODE,a.L3_Nam e,
Case when Sum(Mandeh)>0 Then Sum(Mandeh) Else 0 End As MBed ,
Case when Sum(Mandeh)<0 Then -1*Sum(Mandeh) Else 0 End As MBes
From
a_vw_article a Left Outer Join A_Acc_cd3 Cd3 On a.L3_Code=Cd3.l3_code
Left Outer Join A_L3Type L3 On Cd3.L3Type_cd=L3.L3Type_cd
Where
(acc_year = 1392 ) and
( (@L1_CODE is null) Or ( (L1_CODE<=@L1_CODE2) And (L1_CODE>=@L1_CODE) ) ) and
( (@SND_DATE is null) Or ( (SND_DATE<=@SND_DATE2) And (SND_DATE>=@SND_DATE) ) )
Group By L1_CODE,L1_Name,L2_CODE,L2_Name,a.L3_CODE,a.L3_Nam e
Having (@Mandeh Is Null Or ABS(Sum(Mandeh))>@Mandeh)
) kk
Order By L1_CODE
GO
اينم از كد فراخواني دوباره:
ADOStoredProc1.Close;
ADOStoredProc1.ConnectionString:='Provider=SQLOLED B.1;Password=xxxxxxx;Persist Security Info=True;User ID=sa;Initial Catalog=TadbirAsak91;Data Source=192.168.2.1';
ADOStoredProc1.ProcedureName:='AA;1';
ADOStoredProc1.Parameters.ParamByName('@L1_CODE'). Value := '115';
ADOStoredProc1.Parameters.ParamByName('@L1_CODE2') .Value := '115';
ADOStoredProc1.Parameters.ParamByName('@SND_DATE') .Value := '91/01/01';
ADOStoredProc1.Parameters.ParamByName('@SND_DATE2' ).Value := '91/10/31';
ADOStoredProc1.Parameters.ParamByName('@Mandeh').V alue := '1';
ADOStoredProc1.Parameters.ParamByName('@ACC_YEAR') .Value := '1391';
ADOStoredProc1.Active:=true;
ADOStoredProc1.ExecProc;
ADOStoredProc1.Open;