【DO!BOOK・ページリンク】
2009_migaro_techreport_001   23 / 80

BOOKをみる

10秒後にBOOKのページに移動します


21 //SELECT . FROM までを準備 qry.SQL.Text := cSelect; // 条件レコードが存在すればWHERE 句を構築します。 if cdsCond.RecordCount > 0 then begin sWhereFr := 'WHERE ('; sWhereTo := ''; LCnt := 0; stWhere := TStringList.Create; try cdsCond.DisableControls; try idx := cdsCond.RecNo; // 条件画面数分の繰返処理 for i := 0 to cdsCond.RecordCount - 1 do begin CCnt := 0; cdsCond.RecNo := i + 1; // 抽出条件チェック SetParameter('ISSYCD', cdsCondISSYCD.Value); // 文字列・等号検索 // 項目数だけSetParameter を使って条件の確認を行います。 SetParameter('ISRRY1', cdsCondISRRY1.Value); SetParameter('ISRRY2', cdsCondISRRY2.Value); SetParameter('ISSYSA', cdsCondISSYSA.Value, True); // 文字列・Like 検索 SetParameter('ISSYSB', cdsCondISSYSB.Value, True); // 抽出条件が存在すれば if CCnt > 0 then begin //1 条件画面の情報を(Field = Value AND Field = Value ...) の形式で構築します。 stWhere.Text := '('; for j := 1 to CCnt - 1 do stWhere.Append(CondRec[j].RSQL + ' AND'); stWhere.Append(CondRec[CCnt].RSQL + ')'); qry.SQL.Append(sWhereFr); //2 画面目以降は) OR (Field = Value ...) となるように変数セット sWhereFr := ') OR ('; sWhereTo := ')'; qry.SQL.AddStrings(stWhere); //Query のParameter( バインド変数) に値をセット for j := 1 to CCnt do begin qry.ParamByName(CondRec[j].RParam).DataType := CondRec[j].RDataType; qry.ParamByName(CondRec[j].RParam).AsString := CondRec[j].RValue; end; Inc(LCnt) end; end; qry.SQL.Append(sWhereTo);