我想將AdoQuery元件內的Parameter屬性再外部設完後再以函數參數的方式傳進 |
答題得分者是:Andy Wu
|
danielx2000
一般會員 發表:29 回覆:33 積分:22 註冊:2002-09-02 發送簡訊給我 |
請問各位:
我想將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 發送簡訊給我 |
這兩個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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
使用這行指令
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 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |