程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> Delphi >> 在Delphi中實現多重查詢(2)

在Delphi中實現多重查詢(2)

編輯:Delphi

Button3(執行查詢)的Click事件代碼如下:

procedureTfrmDBGrid.Button3Click(Sender:TObject);
begin
with Query1,SQL do
begin
Close;
if Memo1.ModifIEd //用戶可修改SQL語句
then SQL:=Memo1.Lines;
try
ExecSQL;
Open;
except //捕捉錯誤並處理
begin
MessageBeep(0);
Application.MessageBox(‘錯誤的SQL語句!',
‘確認',MB_OK+MB_ICONSTOP);
Close;
end;
end //try
end;
end; //執行SQL

自定義過程MySetDBGrid (設置DBGrid)的代碼如下:

procedure TfrmDBGrid.MySetDBGrid
(sTable:TTable;tjDBGrid:TDBGrid);
//參數說明:sTable為數據(包括字段、記錄)來源表
// tjDBGrid為記錄篩選(查詢)條件的表格
var i:byte;
begin
//設置查詢項目
if not sTable.Active then sTable.Open;
tjDBGrid.Columns[0].PickList.Clear;
for i:=0 to sTable.FIEldCount-1 do
//記錄數(即字段數)
begin
tjDBGrid.Columns[0].PickList.Add
(sTable.Fields[i].FIEldName);
end; //for
//設置關系(=,<>,>,>=,<,<=) 及邏輯(AND,OR)
tjDBGrid.Columns[1].PickList.Text:=‘='+#13+
‘<>'+#13+‘>'+#13+‘>='+#13+‘<'+#13+
‘<=';tjDBGrid.Columns[3].PickList.Text:=‘AND'+#13+
‘OR';
end;//設置DBGrid

自定義函數MyCreate_SQL (生成查詢)的代碼如下:

function TfrmDBGrid.MyCreate_SQL
(sTable,tjTable:TTable;tjQuery:TQuery):boolean;
//參數說明:sTable為數據(包括字段、記錄)來源表
// tjTable為記錄篩選(查詢)條件的表
// tjQuery記錄SQL語句
var i:byte;
lsDate:TDate; //檢測日期格式用
sLj,sFilter,sFIEldName:string;
//分別表示:邏輯關系、篩選條件、字段名
begin
Result:=true;
//生成“篩選條件"語句
with tjQuery,SQL do
begin Close;
Clear;
DatabaseName:=sTable.DatabaseName;
//設置Query1的別名
Add(‘Select * from '+sTable.TableName);
end;
with tjTable do //查詢(篩選)條件表
begin
if not Active then Open;
if IsEmpty
then begin
Application.MessageBox(‘未選擇篩選條件!',
‘確定',MB_OK+MB_ICONEXCLAMATION);
Exit;
end;
tjQuery.SQL.Add(‘Where ');//含有篩選條件
sFilter:=‘'; //臨時記錄篩選條件
First;
for i:=0 to RecordCount-1 do
begin
sLj:=FIElds[3].AsString; //邏輯關系AND,OR
//(字段名0>1實際值2)
sFilter:=sFilter+‘(';
sFilter:=sFilter+FIElds[0].AsString+
FIElds[1].AsString;
sFieldName:=FIElds[0].AsString;
//取第1列的字段名
case Table1.FieldByName(sFIEldName).DataType of
ftString: begin //字符型處理
sFilter:=sFilter+“”+FIElds[2].AsString+“”
//第2列為關系
end;
ftFloat, //浮點型處理
ftAutoInc, //自增型
ftSmallInt, //短整型
ftInteger, //整型
ftCurrency: begin //貨幣型
sFilter:=sFilter+FIElds[2].AsString;
end;
ftDate: begin //日期型處理
try
lsDate:=StrToDate(FIElds[2].AsString);
sFilter:=sFilter+“”+FormatDateTime
(‘mm/dd/yyyy',StrToDate(FIElds[2].AsString))+“”;
except
Application.MessageBox(‘錯誤的日期格式!’,
‘確認',MB_OK+MB_ICONSTOP);
Result:=false; //返回錯誤標志
break;
end;//try 日期格式判斷
end;
//此處可增加對其他類型數據的處理
end;//case
sFilter:=sFilter+‘)';
if sLj<>‘'
then begin
if RecNo<>RecordCount //且“非最後行"的記錄
then sFilter:=sFilter+FIElds[3].AsString;
//And|Or;
end
else break;
Next
end;
end; //not IsEmpty(篩選)非空
tjQuery.SQL.Add(sFilter); //保存查詢條件
end; //處理篩選條件

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved