我有五個視窗 from1,form2,form3,from4,from5,然后一個查詢窗品 filform,五個視窗中都可以彈出filform視窗
我可以在filform視窗中設定查詢條件。
當from1視窗彈出filfrom視窗,設定好查詢條件,我怎么把條件代入到from1的adoquery1中,
當from3視窗彈出filfrom視窗,設定好查詢條件,我怎么把條件代入到from3的adoquery1中
依次類推,求大神指點。
uj5u.com熱心網友回復:
一。在filform中參考FORM1,FORM3,并在FORM1和FORM3中定義條件常量conditionsuses form1,form3
form1.conditions:=你的條件
form3.conditions:=你的條件
二。在form1和form3中參考filform
uses filform
myadoquery_conditions:=filform.conditions;
uj5u.com熱心網友回復:
你可以在filform表單里建一個成員變數如
strSQL:String;
在表單關閉的時候,把組合的SQL陳述句給strSQL
然后在表單free前,
使用這個字串就可以了
uj5u.com熱心網友回復:
1、設定T1,T2,T3,T4,T5;boolean;打開視窗T1:=True 其它False2、設定5個表單分別使用SQL1,SQL2,SQL3,SQL4,SQL5
3、在filform中,當T1,設定SQL1
4、在filform中"退出"或“確定”按鍵,依據T1,還是T2,分別激活對應視窗。
uj5u.com熱心網友回復:
直接賦值就可以了啊,filfrom的查詢條件無非就是String,源視窗彈出的filfrom關閉時將string值賦值給源視窗就行了,不就是一句話的事嗎???????????uj5u.com熱心網友回復:
問題是我怎么才知道源視窗啊,打個比方:
from1.adoquery1.close;
form1.adoquery1.sql.clear;
form1.adoquery1.sql.add(條件);
form1.adoquery1.open;
我怎么才能讓程式自己判斷filfrom視窗是從form1打開的,這樣才能使查詢條件通用啊,如果我人為撰寫代碼,通用功能就不存在了
uj5u.com熱心網友回復:
為form1,form2,。。。form N的tag屬性設定不同的值1..N。在form1..formN中創建filform時,把自己作為AOwner引數傳進去,例如:
filForm := TFilForm.Create(self);
在filform中用Owner屬性就可以得到創建自己的那個表單的參考,然后根據Owner.tag的值來判斷具體是哪個表單。
case (Owner as TCustomForm).tag of
1: ... //form1
2: ... //form2
N: ... //formN
end;
uj5u.com熱心網友回復:
舉個例子form1要獲得sql陳述句:(其他form一樣的方法)1.form1參考filform: uses filform;
2.在filform內宣告一個全域變數sqlStr:string;
3.form1內點擊按鈕彈出filform,filform內輸入條件,然后自己拼接好sql陳述句;
4.filform關閉時在form1內給資料集的sql陳述句賦值qryQuery.sql.text := filform.sqlStr;
5.打開form1資料集:qryQuery.Open
uj5u.com熱心網友回復:
要知道源表單很簡單,直接把源表單的名字傳進去就行了
uj5u.com熱心網友回復:
樓上都說的很詳細了,我就是來混個眼熟的哈哈。uj5u.com熱心網友回復:
查詢窗品 filform 可以加一個 源視窗 屬性源視窗要彈出查詢前,設定一下這個屬性
uj5u.com熱心網友回復:
樓上都說的很詳細了,也說兩句,混點分。對于filform來說,不需要知道是誰呼叫的它。誰呼叫的filform,誰去filform中讀結果。filform只負責生成查詢陳述句,誰呼叫的誰讀這個查詢陳述句。
uj5u.com熱心網友回復:
我的理解是filform相當于一個showmessage效果,不過是自定義的視窗,這個視窗用于設定條件的。哪一個Form去showmoal這個自定義的條件視窗,當在這個自定義的條件視窗設定好“選擇條件”點擊〖確定〗后,這些值將自動傳遞給對應Form的SQL并執行。如果是我做這個功能,我可能想到的方案:
方案一:做5個對應的Form,太累贅直接pass掉;
方案二:通過Application.ActiveForm判斷;
方案三:設定一個全域變數,filform.showmodal之前,賦值全域變數為哪一個Form,在filform點擊〖確定〗按鈕后就讀取全域變數去執行相應的代碼;
uj5u.com熱心網友回復:
--------------------------------------------------------------------------------------
大俠,我按你的方法試了,可以還是有個問題,filform關閉的時候我,我還是需要知道是那個視窗,因為我要呼叫視窗的查詢按紐事件,代碼貼出來看下
procedure TfilterForm.Button3Click(Sender: TObject); //查詢OK
var
i:integer;
begin
for i:=0 to memo1.Lines.Count do
s:=s+memo1.Lines.Strings[i];
源視窗名.Button1Click(Sender: TObject)
這個源視窗名我不知道啊
uj5u.com熱心網友回復:
我的理解是filform相當于一個showmessage效果,不過是自定義的視窗,這個視窗用于設定條件的。哪一個Form去showmoal這個自定義的條件視窗,當在這個自定義的條件視窗設定好“選擇條件”點擊〖確定〗后,這些值將自動傳遞給對應Form的SQL并執行。
如果是我做這個功能,我可能想到的方案:
方案一:做5個對應的Form,太累贅直接pass掉;
方案二:通過Application.ActiveForm判斷;
方案三:設定一個全域變數,filform.showmodal之前,賦值全域變數為哪一個Form,在filform點擊〖確定〗按鈕后就讀取全域變數去執行相應的代碼;
---------------------------------------------------------------------------------------------------------------------------
大俠,可以貼出代碼讓小弟學習一下嗎
uj5u.com熱心網友回復:
可能是我描述的不夠清楚,我在描述一下:from1,form2,form3,form4,form5打開filterform視窗,在filterform視窗中設定查詢條件,點擊查詢按紐,查詢源視窗里的資料
代碼:from1.打開filterform視窗
procedure TForm1.N1Click(Sender: TObject); /////篩選按紐
var
i:integer;
begin
application.CreateForm(Tfilterform,filterform);
filterform.Tag:=2;
filterform.Show;
for i:=0 to DBGridEh1.Columns.Count-1 do
filterform.combobox1.Items.Add(DBGridEh1.Columns[i].FieldName);
form2,from3,form4,form5打開視窗代碼一樣
------------------------------------------------------------------------
filterform查詢按紐代碼:
procedure TfilterForm.Button3Click(Sender: TObject); //查詢OK
var
i:integer;
begin
for i:=0 to memo1.Lines.Count do
s:=s+memo1.Lines.Strings[i];
源視窗名.ADOQuery1.Close;
源視窗名.ADOQuery1.SQL.Clear;
源視窗名.ADOQuery1.SQL.Add(s);
源視窗名.ADOQuery1.Open;
--------------------------------------
請教各位大俠,這個源視窗名,怎么是變數代進去
uj5u.com熱心網友回復:
看了你的代碼,我個人認為,你把S設定成全域變數,執行代碼交給原來的Form不就好了嗎?show還是showmodal的執行順序會觸發暫停效果必須等彈出的視窗執行完畢后才能繼續執行,你自己測驗一下。代碼:from1.打開filterform視窗
procedure TForm1.N1Click(Sender: TObject); /////篩選按紐
var
i:integer;
begin
application.CreateForm(Tfilterform,filterform);
filterform.Tag:=2;
filterform.Show;
ADOQuery1.Close;
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add(s);
ADOQuery1.Open;
for i:=0 to DBGridEh1.Columns.Count-1 do
filterform.combobox1.Items.Add(DBGridEh1.Columns[i].FieldName);
form2,from3,form4,form5打開視窗代碼一樣
------------------------------------------------------------------------
filterform查詢按紐代碼:
procedure TfilterForm.Button3Click(Sender: TObject); //查詢OK
var
i:integer;
begin
for i:=0 to memo1.Lines.Count do
s:=s+memo1.Lines.Strings[i];
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/91733.html
標籤:語言基礎/算法/系統設計
下一篇:求一個程式代碼
