Win2K + Delphi5 + SQL Server2K 編譯通過,執行正常。
const sMAIN_SQL = 'SELECT ...FROM ... WHERE (...)' //用到別名,故下有"A.fItemNo"等 sEMPTY = ''; sITEM_TYPE = 'fItemType';
procedure SelectStock; var stItemNo, stItemName, SQL: string; begin adsStock.Active := False; SQL := sMAIN_SQL; adsStock.CommandText := SQL;
if Trim(edtItemNo.Text) <> sEMPTY then begin stItemNo := StringReplace(Trim(edtItemNo.Text), '*', '%', [rfReplaceAll]); SQL := SQL + ' AND A.fItemNo like ''' + stItemNo + ''''; adsStock.CommandText := SQL; end;
if Trim(edtItemName.Text) <> sEMPTY then begin stItemName := StringReplace(Trim(edtItemName.Text), '*', '%', [rfReplaceAll]); SQL := SQL + ' AND A.fItemName like ''' + stItemName + ''''; adsStock.CommandText := SQL; end;
if cbbItemType.Text <> sEMPTY then begin SQL := SQL + ' AND B.fItemType = :fItemType '; adsStock.CommandText := SQL; adsStock.Parameters.ParamByName(sITEM_TYPE).Value := cbbItemType.Text; end; ......// 其他條件 adsStock.Active := True; end; 這樣,如果用戶不輸入任何限制條件,則按sMAIN_SQL查詢出結果。一旦用戶輸入類似於"1-*05*"等形式的條件,將執行類似於Windows查詢一樣的模糊查詢。 
|