請問Form與ADOQuery1之間的應用。 |
尚未結案
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
請問各位。
兩個問題,
第一。
如有兩個Form1/Form2,
Form1有ADOQuery1,DBGRID1
(ADOQuery1 -> select * from CPURA)
Form2中會處理一些判斷式
(RA001='0002')將同時利用Form1.ADOQurey1中,
同時讓Form1的DBGrid1作變化。
因為我有試過好像沒有反應。
比如,如下。 procedure TForm2.SpeedButton1Click(Sender: TObject);
begin Form1.ADOQuery1.Close;
Form1.ADOQuery1.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where ');
Form1.ADOQuery1.SQL.Add(sSQL);//sSQL = RA001='0001'
Form1.ADOQuery1.Open; end; 第二。
當Form2執行完畢後,關閉視窗可以回到Form1的PageControl.TabSheet1.DBGrid.
請問這個部份該如何去控管。 麻煩大家。
謝謝。
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
1,2在Form2 Public區段宣告一ADOQuery
Public InADOQry : TADOQry在Form1建立Form2時傳給他 Form2 := TForm2.Create(Self); Form2.InADOQry := ADOQuery1; Form2.ShowModal; FreeAndNil(Form2); PageControl.ActivePageIndex := 0; DBGrid.SetFocus;這時直接拿傳來的ADOQuery使用 InADOQry.Close; InADOQry.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where '); InADOQry.SQL.Add(sSQL);//sSQL = RA001='0001' InADOQry.Open;我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
Hi Miles:
謝謝。
Public
InADOQry : TADOQuery
要定義如上才不會有錯。
另外,有兩個問題。
1。
InADOQry.Close;
InADOQry.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where ');
InADOQry.SQL.Add(sSQL);//sSQL = RA001='0001'
InADOQry.Open;
好像沒有反應。因為我直接指定。
RA001='0001'時應該在Form1會指標會秀出只有1筆,可是好像只有閃一下。
2。
當我離開Form2時會出現如下的錯誤訊息。
Cannot focus a disable or invisible window.
麻煩您。是否少設定些什麼。
謝謝。
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
插花:
t0288542您好,
1、在Form2中會處理一些判斷式时,将(RA001='0002')改为:(RA001="0002")试试
2、出现Cannot focus a disable or invisible window,是因为当前活动窗体是在Form2,而不是在Form1上。
综合,改成如下试试:
procedure TForm2.Button1Click(Sender: TObject); //var // sSQL:string; begin // sSQL:='ID="0005"'; Form1.ADOQuery1.Close; Form1.ADOQuery1.SQL.Clear; Form1.ADOQuery1.SQL.Add('select * from table1'); Form1.ADOQuery1.SQL.Add('where ' sSQL); //此处的sSQL应为ID="0005" Form1.ADOQuery1.Open; FreeAndNil(Form2); //关闭和释放Form2窗体 Form1.PageControl1.ActivePage:=Form1.TabSheet1; //假设您的DBGrid是放在Form1中的TabSheet1上 Form1.DBGrid1.SetFocus; //获取焦点 end;试试看 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
wameng
版主 發表:31 回覆:1336 積分:1188 註冊:2004-09-16 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
謝謝wameng。
可是排除字串的問題。
似乎一樣無法查詢到那一筆資料。
以下。是我的程式碼。
FCPURM->BUTTON
procedure TFCPURM.SpeedButton3Click(Sender: TObject);
begin
//FCPURM02.ShowModal;//使用此方式可能無法關閉FCPURM
FCPURM02.Show;
end; FCPURM02->BUTTON
procedure TFCPURM02.SpeedButton1Click(Sender: TObject);
begin
case PageControl1.ActivePageIndex of
0 : begin
//Process tabsheet1 .....
if (TRIM(ComboBox1.Text)<>'') AND (TRIM(Edit1.Text)<>'') then begin
sSQL := 'RA001 '+ TRIM(ComboBox1.Text) +' ''' + TRIM(Edit1.Text)+'''';
showmessage(sSQL);
end;
end;
1 : begin
//Process tabsheet2 .....
if (TRIM(ComboBox1.Text)<>'') AND (TRIM(Edit1.Text)<>'') then begin
sSQL := 'RA001 '+ TRIM(ComboBox1.Text) +' ''' + TRIM(Edit1.Text)+'''';
showmessage(sSQL);
end;
end;
else
//Another process .....
end;
if sSQL<>'' then begin FCPURM.ADOQuery1.Close;
FCPURM.ADOQuery1.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where ');
FCPURM.ADOQuery1.SQL.Add(sSQL);
FCPURM.ADOQuery1.Open;
FreeAndNil(FCPURM02);
FCPURM.PageControl1.ActivePage:=FCPURM.TabSheet1;
FCPURM.DBGrid1.SetFocus;
end;
end; 可否幫我看到底那裡出問題,麻煩大家。
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
1. 將組出來的SQL字串拿到SQL Query Analyzer執行看結果是否正確, 並確定ADOQuery沒有設定任何Filter 條件. 2.建議
FCPURM.ADOQuery1.Close; FCPURM.ADOQuery1.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where '); FCPURM.ADOQuery1.SQL.Add(sSQL); FCPURM.ADOQuery1.Open; FCPURM.Show; FCPURM.PageControl1.ActivePage:=FCPURM.TabSheet1; FCPURM.DBGrid1.SetFocus; FreeAndNil(FCPURM02);我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
t0288542 您好: 考虑下面几个问题
1、您的PageControl1、ComboBox1、Edit1、DBGrid几个组件是不是都在FCPURM窗体上。是的话,凡在FCPURM02上使用请在其前面加上FCPURM。如:FCPURM.ComboBox1;
case FCPURM.PageControl1.ActivePageIndex of;
不是的话,就不用了。 2、您的DBGrid有几个,是放在FCPURM.PageControl1的哪个TabSheet上?
因我看您所提问时说:
當Form2執行完畢後,關閉視窗可以回到Form1的PageControl.TabSheet1.DBGrid.
是放在FCPURM.PageControl1.TabSheet1.DBGrid上?
所以是这样给您试范了
FCPURM.PageControl1.ActivePage:=FCPURM.TabSheet1;//先将TabSheet1设当前活动的Page
FCPURM.DBGrid1.SetFocus; //让DBGrid1获得焦点
上面也有了详细的注解!您可以将这两句取消,看能不能得出结果,再来返回焦点。 3、仔细试试,不行可将程式放入求助区。
============================
为什么经过多年以后,得失的过程如此冷漠
============================
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
您好:
procedure TFCPURM02.SpeedButton1Click(Sender: TObject); begin case PageControl1.ActivePageIndex of 0 : begin //Process tabsheet1 ..... if (TRIM(ComboBox1.Text)<>'') AND (TRIM(Edit1.Text)<>'') then begin sSQL := 'RA001 ' TRIM(ComboBox1.Text) ' ''' TRIM(Edit1.Text) ''''; showmessage(sSQL); end; end; 1 : begin //Process tabsheet2 ..... if (TRIM(ComboBox1.Text)<>'') AND (TRIM(Edit1.Text)<>'') then //是ComboBox1与Edit1还是ComboBox2与Edit2,怎么两者一样? begin sSQL := 'RA001 ' TRIM(ComboBox1.Text) ' ''' TRIM(Edit1.Text) ''''; showmessage(sSQL); end; end; else //Another process ..... end; if sSQL<>'' then begin FCPURM.ADOQuery1.Close; FCPURM.ADOQuery1.SQL.Clear; //加上此句,将之前sql语句清除 FCPURM.ADOQuery1.SQL.Add(' Select RA001,RA002,RA003,RA004,RA005 FROM CPURA Where '); FCPURM.ADOQuery1.SQL.Add(sSQL); showmessage(FCPURM.ADOQuery1.SQL.text);//加上此句,看看查询语句是否正确 FCPURM.ADOQuery1.Open; FCPURM.DataSource1.DataSet := FCPURM.ADOQuery1; //FCPURM.ADOQuery1.DataSource := FCPURM.DataSource1; FCPURM.DBGrid1.DataSource := FCPURM.DataSource1; FreeAndNil(FCPURM02); FCPURM.PageControl1.ActivePage:=FCPURM.TabSheet2; FCPURM.DBGrid1.SetFocus; end; end;其他的就没仔细看,应该没什么问题了,Good Luck! PS:下载档案,因设定了数据库,导致打开会长时间停顿并报错,再则因没数据表,所以没具体的测试下,您按上面的方法改进一下,看还有问题否,有的话,我再帮您测试下 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
謝謝deity。
之前的問題已解決。
不好意思,
但是當我查詢結束後,再點選一次查詢鈕。
卻發現錯誤。我利用F7去追踪。
發現是錯誤程式碼在,如下。
procedure TFCPURM.SpeedButton3Click(Sender: TObject);
begin
//FCPURM02.ShowModal;
FCPURM02.Show;
end;
似乎無法開啓FCPURM02表單,如改為ShowModal則畫面好像當掉。
FCPURM02.Show則是發生錯誤訊息,是否沒有結束什麼東西嗎。
錯誤訊息,如下。
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
t0288542
中階會員 發表:216 回覆:254 積分:94 註冊:2004-10-06 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |