cashxin2002 大哥,请帮我看看下面这个问题,谢谢! |
答題得分者是:cashxin2002
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
create procedure procinsertKardTypeTable --新增 卡的类型能 时间:2005-4-4
@KardTypeId varchar(2) ,
@KardTypeName varchar(50)
as
begin
begin tran
insert KardTypeTable(KardTypeId,KardTypeName)
values (@KardTypeId,@KardTypeName)
if @@error<>0 or @@rowcount<>1
begin
raiserror('操作不成功,也许是因为存在相同的卡类型编号',16,1)
rollback tran
return
end
if @@error=0
commit tran
else
rollback tran end go procedure TKaTypeSetForm.Button1Click(Sender: TObject);
begin ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='procinsertKardTypeTable';
ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text);
ADOStoredProc1.Parameters.ParamByName('@KardTypeName').Value:=trim(edit2.Text);
ADOStoredProc1.Prepared:=true;
try
ADOStoredProc1.ExecProc;
showmessage('新增卡类型成功');
except
on E:exception do
showmessage(E.Message);
end; end; 我在 edit1 和 edit2 中 分别 输入 01 和 xx
然后 单击 Button1 ,能把数据插入到表中 我继续在 edit1 和 edit2 中 分别 输入 02 和 yy 出现下面的错误:
我真的不知道错在那里了?(注 KardTypeId 和 KardTypeName 没有任何限制)
cashxin2002大哥,我是错在那里呢? 谢谢!
|
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
cashxin2002 大哥:
ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text); 和 ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftstring,pdinput,50,trim(edit1.Text)); 有什么区别呢? 为什么要用 ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftstring,pdinput,50,trim(edit1.Text)); 呢? 我原先 都是用的:
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName:='procinsertKardTypeTable';
ADOStoredProc1.Parameters.Refresh;
ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text); 但是我装了 net 后,这样写就不行了! 就需要这样写:
ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftstring,pdinput,50,trim(edit1.Text)); cashxin2002 大哥,这是为什么啊? 谢谢!
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ ADOStoredProc1.Parameters.ParamByName('@KardTypeId').Value:=trim(edit1.Text);
此句在Parameters中已經有存在KardTypeId這個Param名稱﹐相對的只需要指定其值即可﹒ ADOStoredProc1.Parameters.CreateParameter('@KardTypeId',ftstring,pdinput,50,trim(edit1.Text));
此句在Parameters中尚未有KardTypeId這個Param名稱﹐需要通過Create的方法來建立后再指定其值﹒ net部分小弟不熟﹐很抱歉﹒ 在您的程式碼中﹐通過Try...Except截取到的錯誤信息是什么﹖把以下這句從程式碼中刪除后再試試﹕
ADOStoredProc1.Parameters.Refresh; 另外具有SQL支援的資料集元件的Prapared屬性﹐一般我們都是用在有回傳資料的SQL語法中﹐如典型的Select等﹐可以提高SQL語句的執行效率﹐但在無資料回傳的SQL語法中﹐如Insert﹐Delete等﹐并不需要對此屬性做設定﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
lsh998
中階會員 發表:163 回覆:138 積分:60 註冊:2005-01-07 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 由于目前手頭上開發的都是Local型的資料庫系統﹐所以比較少用預儲程序﹐基本上都是調用普通的資料集元件﹐如ADOTable﹐ADOQuery等﹒ 謝謝您對我的鼓勵﹐另外建議您在提問的時候盡量避免直接指定回覆者姓名的文字﹐站內的先進很多﹐但我只是新進﹐各方面尚待學習﹐所知所得亦是有限﹐請大家幫忙解答會有比較好的答案﹐也可有更多的机會讓您學到各種更好的擬寫程式的方式方法﹐給您加油﹒ =================================
有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗
================================
------
忻晟 |
zwsoft
一般會員 發表:20 回覆:17 積分:10 註冊:2002-11-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |