全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1655
推到 Plurk!
推到 Facebook!

我想將AdoQuery元件內的Parameter屬性再外部設完後再以函數參數的方式傳進

答題得分者是:Andy Wu
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#1 引用回覆 回覆 發表時間:2010-05-16 22:51:40 IP:115.81.xxx.xxx 訂閱
請問各位: 
我想將AdoQuery元件內的Parameter屬性再外部設完後再以函數參數的方式傳進ReadByParam() function中 ,
可是再主程式中,都無法正確將程式碼寫出來?
請問 List變數這一段要如何完成才能正確將值包裝起來傳進函數中?

[code delphi]
Procedure TForm1.Button1Click(Sender:TObject);
var
strWhere:string;
List:TParameters;
intRetCode:integer;
begin
strWhere := 'Select * from TableA Where ID=:sid';

//------------------這一段要如何完成?--------
List := TParameters.Create(Self, TParameter);
List.CreateParameter('sid',ftString, pdInput, 50, NULL);
//List.AddParameter.Name := 'sid'; <--這種寫法不能Run
//List.AddParameter.Value := '123';
//----------------------------------------------------

intRetCode := ReadByParam(StrWhere,List);
end;
function ReadByParam(strWhere, Param: TParameters): integer;
begin
try
recQuery.Close;
recQuery.SQL.Text := strWhere;
recQuery.Parameters := Param;
recQuery.Open;
if recQuery.RecordCount >0 then
result := 0
else
result := 1;
except

end;
end;

[/code]
編輯記錄
danielx2000 重新編輯於 2010-05-16 22:59:07, 註解 無‧
danielx2000 重新編輯於 2010-05-16 23:00:58, 註解 無‧
danielx2000 重新編輯於 2010-05-16 23:04:04, 註解 無‧
carstyc
資深會員


發表:16
回覆:254
積分:329
註冊:2003-07-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2010-05-17 09:00:14 IP:203.79.xxx.xxx 訂閱
這兩個TParameters 是不同的 Instance,不能直接這樣指

recQuery.Parameters := Param;

改成

for i:=0 to Param.Count -1
recQuery.Parameters.AddParam( Param.Items[i] );


試試




===================引 用 danielx2000 文 章===================
請問各位:
我想將AdoQuery元件內的Parameter屬性再外部設完後再以函數參數的方式傳進ReadByParam() function中 ,
可是再主程式中,都無法正確將程式碼寫出來?
請問 List變數這一段要如何完成才能正確將值包裝起來傳進函數中?

[code delphi]
Procedure TForm1.Button1Click(Sender:TObject);
var
? strWhere:string;
? List:TParameters;
? intRetCode:integer;
begin
?? strWhere := 'Select * from TableA Where ID=:sid';

?? //------------------這一段要如何完成?--------
?? List := TParameters.Create(Self, TParameter);
?? List.CreateParameter('sid',ftString, pdInput, 50, NULL);
?? //List.AddParameter.Name := 'sid'; <--這種寫法不能Run
?? //List.AddParameter.Value := '123';
?? //----------------------------------------------------

?? intRetCode := ReadByParam(StrWhere,List);
end;
function ReadByParam(strWhere, Param: TParameters): integer;
begin
?try
?? recQuery.Close;
?? recQuery.SQL.Text := strWhere;
?? recQuery.Parameters := Param;
?? recQuery.Open;
?? if recQuery.RecordCount >0 then
result := 0
?? else
result := 1;
? except

? end;
end;

[/code]
編輯記錄
carstyc 重新編輯於 2010-05-17 09:05:58, 註解 無‧
danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#3 引用回覆 回覆 發表時間:2010-05-17 23:36:59 IP:115.81.xxx.xxx 訂閱
Dear sir:

我用的是Delphi 7, 我後來又試了一下,
List := TParameters.Create(Self, TParameter);
List.CreateParameter('sid',ftString, pdInput, 50, NULL); // <------這一段會出現 Invalid class typecast 的錯誤訊息,不知道要如何改

for i:=0 to Param.Count -1
recQuery.Parameters.AddParam( Param.Items[i] );
// <------ 沒有 AddParam 的method ,但是有AddParameter ,但是參數不一樣

請問能給我一個完整的範例嗎?
感謝



===================引 用 carstyc 文 章===================
這兩個TParameters 是不同的 Instance,不能直接這樣指

recQuery.Parameters:=Param;

改成

for i:=0 to Param.Count -1
recQuery.Parameters.AddParam( Param.Items[i] );


試試




===================引 用 danielx2000 文 章===================
請問各位:
我想將AdoQuery元件內的Parameter屬性再外部設完後再以函數參數的方式傳進ReadByParam() function中 ,
可是再主程式中,都無法正確將程式碼寫出來?
請問 List變數這一段要如何完成才能正確將值包裝起來傳進函數中?

[code delphi]
Procedure TForm1.Button1Click(Sender:TObject);
var
? strWhere:string;
? List:TParameters;
? intRetCode:integer;
begin
?? strWhere := 'Select * from TableA Where ID=:sid';

?? //------------------這一段要如何完成?--------
?? List := TParameters.Create(Self, TParameter);
?? List.CreateParameter('sid',ftString, pdInput, 50, NULL);
?? //List.AddParameter.Name := 'sid'; <--這種寫法不能Run
?? //List.AddParameter.Value := '123';
?? //----------------------------------------------------

?? intRetCode := ReadByParam(StrWhere,List);
end;
function ReadByParam(strWhere, Param: TParameters): integer;
begin
?try
?? recQuery.Close;
?? recQuery.SQL.Text := strWhere;
?? recQuery.Parameters := Param;
?? recQuery.Open;
?? if recQuery.RecordCount >0 then
result := 0
?? else
result := 1;
? except

? end;
end;

[/code]
Andy Wu
一般會員


發表:17
回覆:25
積分:18
註冊:2004-02-25

發送簡訊給我
#4 引用回覆 回覆 發表時間:2010-05-19 11:56:39 IP:59.124.xxx.xxx 訂閱
procedure TForm1.Button1Click(Sender: TObject);
var
MyParam : TParams;
begin
MyParam := TParams.Create( Self );
MyParam.CreateParam( ftString , 'sid_1' , ptInput );
MyParam.CreateParam( ftString , 'sid_2' , ptInput );
ReadByParam( '' , MyParam );
end;

function TForm1.ReadByParam(strWhere : String; Param: TParams): integer;
begin
try
ADOQuery1.Close;
ADOQuery1.SQL.Text := strWhere;
ADOQuery1.Parameters.Assign( Param );
ADOQuery1.Open;
if ADOQuery1.RecordCount >0 then
result := 0
else
result := 1;
except
end;
end;

不知道是不是你要的~~~

danielx2000
一般會員


發表:29
回覆:33
積分:22
註冊:2002-09-02

發送簡訊給我
#5 引用回覆 回覆 發表時間:2010-05-20 22:14:52 IP:59.127.xxx.xxx 訂閱
使用這行指令
ADOQuery1.Parameters.Assign( Param );
所Query 的結果都會是0

我試了很久
把指令改為
for i:=0 to Param.Count -1 do
begin
ADOQuery1.Parameters.ParamByName('sid_1').DataType := Param[i].DataType;
ADOQuery1.Parameters.ParamByName('sid_1').Value:= Param[i].Value;

end;

就好了

感恩

===================引 用 Andy Wu 文 章===================
procedure TForm1.Button1Click(Sender: TObject);
var
MyParam : TParams;
begin
MyParam := TParams.Create( Self );
MyParam.CreateParam( ftString , 'sid_1' , ptInput );
MyParam.CreateParam( ftString , 'sid_2' , ptInput );
ReadByParam( '' , MyParam );
end;

function TForm1.ReadByParam(strWhere : String; Param: TParams): integer;
begin
try
ADOQuery1.Close;
ADOQuery1.SQL.Text := strWhere;
ADOQuery1.Parameters.Assign( Param );
ADOQuery1.Open;
if ADOQuery1.RecordCount >0 then
result := 0
else
result := 1;
except
end;
end;

不知道是不是你要的~~~

Andy Wu
一般會員


發表:17
回覆:25
積分:18
註冊:2004-02-25

發送簡訊給我
#6 引用回覆 回覆 發表時間:2010-05-21 08:14:13 IP:59.124.xxx.xxx 訂閱
function TForm1.ReadByParam(strWhere : String; var Param: TParams): integer; <-- 問題出在這, 加上紅色字就好了
begin
...
end;
編輯記錄
Andy Wu 重新編輯於 2010-05-21 08:14:46, 註解 無‧
系統時間:2017-12-17 23:32:27
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!