第一筆不能顯示在dbedit中… |
尚未結案
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
各位高手~
想請你們幫個忙,我寫的程式出現了一個小問題,
那就是我使用了三個query,我顯示資料的方式是用dbedit來顯示,
但當我執行到第二個query時,我的dbedit不會顯示出query2的
第一筆資料,第三個query也是發生同樣的問題,能否請各位高手幫我
看看我的程式那裡有問題?謝謝! 以下為我部份的程式碼:
procedure TForm1.Button1Click(Sender: TObject);
begin
if query1.Eof then
begin
query2.Open;
dbedit1.DataSource:=datasource2;
dbedit2.DataSource:=datasource2;
dbedit3.DataSource:=datasource2;
dbedit4.DataSource:=datasource2;
dbedit1.DataField:='員工編號';
dbedit2.DataField:='姓名';
dbedit3.DataField:='到職日期';
dbedit4.DataField:='職稱';
if query2.Eof then
begin
query3.Open;
dbedit1.DataSource:=datasource3;
dbedit2.DataSource:=datasource3;
dbedit3.DataSource:=datasource3;
dbedit4.DataSource:=datasource3;
dbedit1.DataField:='員工編號';
dbedit2.DataField:='姓名';
dbedit3.DataField:='到職日期';
dbedit4.DataField:='職稱';
if query3.Eof then
begin
button2.Show;
button1.Hide;
end
else
begin
j:='';
k:=0.0;
x[i,0]:=dbedit1.Text; //員工編號
x[i,1]:=dbedit2.Text; //姓名
x[i,2]:='1'; //年資權數
query3.Next;
end;
end
else
begin
j:='';
k:=0.0;
x[i,0]:=dbedit1.Text; //員工編號
x[i,1]:=dbedit2.Text; //姓名
x[i,2]:='1'; //年資權數
query2.Next;
end;
end
else
begin
j:='';
k:=0.0;
x[i,0]:=dbedit1.Text; //員工編號
x[i,1]:=dbedit2.Text; //姓名
x[i,2]:='1'; //年資權數
query1.Next;
end;
end; ps:這是我第一次寫delphi資料庫的程式,所以程式又臭又長的,讓各位高手
見笑了!希望各位高手能幫個忙!謝謝! [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 在Query2和Query3的Open之后, 加一句Query2.First; 和Query3.First; 如下:
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin query2.Open; query2.First; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then begin query3.Open; query3.First; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; ... ... ...參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 您好! 要加藍色部分程式碼天行健 君子當自強不息~~@.@procedure TForm1.Button1Click(Sender: TObject); begin if not query1.Eof then begin query2.Open; query2.First; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if not query2.Eof then begin query3.Open; query3.First; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; ... ... ...參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
天行健 君子當自強不息~~@.@ |
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
加藍色部分程式碼
引言: 各位高手~ 想請你們幫個忙,我寫的程式出現了一個小問題, 那就是我使用了三個query,我顯示資料的方式是用dbedit來顯示, 但當我執行到第二個query時,我的dbedit不會顯示出query2的 第一筆資料,第三個query也是發生同樣的問題,能否請各位高手幫我 看看我的程式那裡有問題?謝謝! 以下為我部份的程式碼:天行健 君子當自強不息~~@.@procedure TForm1.Button1Click(Sender: TObject); begin ifnot query1.Eof then begin query2.Open; query2.first; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if not query2.Eof then begin query3.Open; query3.first; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if not query3.Eof then begin button2.Show; button1.Hide; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query3.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query2.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query1.Next; end; end;ps:這是我第一次寫delphi資料庫的程式,所以程式又臭又長的,讓各位高手 見笑了!希望各位高手能幫個忙!謝謝! [Delphi]=*VaKa*=is~me
------
天行健 君子當自強不息~~@.@ |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
T.J.B
版主 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin query2.Open; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then begin query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query3.Eof then begin button2.Show; button1.Hide; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 if (dbedit4.Text='組長') or (dbedit4.Text='副組長') or (dbedit4.Text ='代副組長') then //管理權數 x[i,3]:='1.3' else if (dbedit4.Text='課長') or (dbedit4.Text='副課長') or (dbedit4.Text ='代副課長') then x[i,3]:='1.6' else if (dbedit4.Text='處長') or (dbedit4.Text='副處長') or (dbedit4.Text='經理') then x[i,3]:='2' else if (dbedit4.Text='總廠長') or (dbedit4.Text='廠長') or (dbedit4.Text ='副廠長') then x[i,3]:='2.5' else x[i,3]:='1'; if (combobox1.ItemIndex=0) then //考績權數 x[i,4]:='0' else if (combobox1.ItemIndex=1) then x[i,4]:='1.5' else if (combobox1.ItemIndex=2) then x[i,4]:='1.0' else if (combobox1.ItemIndex=3) then x[i,4]:='0.5' else if (combobox1.ItemIndex=4) then x[i,4]:='0'; x[i,5]:=floattostr(strtofloat(x[i,2])*strtofloat(x[i,3])*strtofloat(x[i,4])); //此時的x[i,5]是尚未計算完成的分紅數,是員工個人的年資、管理和考績的乘積 total:=total strtofloat(x[i,5]); i:=i 1; query3.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 if (dbedit4.Text='組長') or (dbedit4.Text='副組長') or (dbedit4.Text ='代副組長') then //管理權數 x[i,3]:='1.3' else if (dbedit4.Text='課長') or (dbedit4.Text='副課長') or (dbedit4.Text ='代副課長') then x[i,3]:='1.6' else if (dbedit4.Text='處長') or (dbedit4.Text='副處長') or (dbedit4.Text='經理') then x[i,3]:='2' else if (dbedit4.Text='總廠長') or (dbedit4.Text='廠長') or (dbedit4.Text ='副廠長') then x[i,3]:='2.5' else x[i,3]:='1'; if (combobox1.ItemIndex=0) then //考績權數 x[i,4]:='0' else if (combobox1.ItemIndex=1) then x[i,4]:='1.5' else if (combobox1.ItemIndex=2) then x[i,4]:='1.0' else if (combobox1.ItemIndex=3) then x[i,4]:='0.5' else if (combobox1.ItemIndex=4) then x[i,4]:='0'; x[i,5]:=floattostr(strtofloat(x[i,2])*strtofloat(x[i,3])*strtofloat(x[i,4])); //此時的x[i,5]是尚未計算完成的分紅數,是員工個人的年資、管理和考績的乘積 total:=total strtofloat(x[i,5]); i:=i 1; query2.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 if (dbedit4.Text='組長') or (dbedit4.Text='副組長') or (dbedit4.Text ='代副組長') then //管理權數 x[i,3]:='1.3' else if (dbedit4.Text='課長') or (dbedit4.Text='副課長') or (dbedit4.Text ='代副課長') then x[i,3]:='1.6' else if (dbedit4.Text='處長') or (dbedit4.Text='副處長') or (dbedit4.Text='經理') then x[i,3]:='2' else if (dbedit4.Text='總廠長') or (dbedit4.Text='廠長') or (dbedit4.Text ='副廠長') then x[i,3]:='2.5' else x[i,3]:='1'; if (combobox1.ItemIndex=0) then //考績權數 x[i,4]:='0' else if (combobox1.ItemIndex=1) then x[i,4]:='1.5' else if (combobox1.ItemIndex=2) then x[i,4]:='1.0' else if (combobox1.ItemIndex=3) then x[i,4]:='0.5' else if (combobox1.ItemIndex=4) then x[i,4]:='0'; x[i,5]:=floattostr(strtofloat(x[i,2])*strtofloat(x[i,3])*strtofloat(x[i,4])); //此時的x[i,5]是尚未計算完成的分紅數,是員工個人的年資、管理和考績的乘積 total:=total strtofloat(x[i,5]); i:=i 1; query1.Next; end; end;這是完整的程式... [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me |
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
pprayer
高階會員 發表:35 回覆:185 積分:174 註冊:2002-03-13 發送簡訊給我 |
引言: 謝謝你... 我出現的問題是...在執行第二個query時... 第二個query的第一筆資料不會顯示在dbedit中... 但之後的每一筆都會顯示... 在執行到第三個query時... 也會發生同樣的問題... 也就是說...只要我執行了下一個query時... 我的下一個query的第一筆都不會顯示出來... [Delphi]=*VaKa*=is~me所謂的不顯示出來,是說dbedit.text is null ?? 還是說沒有顯示出你要的資料? 因為你是按一下button 然後query.next TDataSet.Next的Help有說 1.Sets the Bof and Eof properties to False. 2.Fetches the next record and makes it the active record. 3.Sets the Eof property to True if the last record in the dataset was already active. 如果你query1的record有3筆,你按了第一次會跳到第二筆,第二次會跳到第三筆,這時候還沒有eof,因為你還要按一次,讓他發現這筆資料已經被active了 所以會看到query1的最後一筆兩次 接下來按第四下,query2才會因為query.eof 而open 不知道這個跟你遇到的問題有沒有關係? |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 用Refresh來試試是否可以顯示出第一筆資料錄, 雖然不能算是個好辦法, 但小弟覺得應該可以解決問題, 程式碼改為如下(以下藍色處):
... ... else begin query3.Refresh; j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query3.Next; end; end else begin query2.Refresh; j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query2.Next; end; end else begin query1.Refresh; j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query1.Next; end;參考看看! ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/09/30 17:48:47
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 當機? 您的資料筆數有多少?
再試試看如下: (請先將Query2和Query3 Close)
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin query1.Close; query2.Open; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; query2.First; if query2.Eof then begin query2.Close; query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; query3.First; ... ... ...===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 我剛才又看了一下程式碼﹐發現有這樣一個問題﹐就是當您的Query2開啟時﹐資料錄指針應該是已經指向了Query2中的第一筆資料﹐但所有DBEdit元件的DataField屬性值依然是對應Query1中的欄位名稱﹐接著就是執行Query的Next的方法﹐將資料錄指針移到第二筆了﹐所以問題可能是出在這邊﹐請將您的程式碼改為如下試試﹕(只改這一段﹐其它不用改)
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:='';//先做個清空的動作 query1.Close; query2.Open; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:='';//先做個清空的動作 query2.Close; query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; ... ... ...參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
danny
版主 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 各位高手~ 想請你們幫個忙,我寫的程式出現了一個小問題, 那就是我使用了三個query,我顯示資料的方式是用dbedit來顯示, 但當我執行到第二個query時,我的dbedit不會顯示出query2的 第一筆資料,第三個query也是發生同樣的問題,能否請各位高手幫我 看看我的程式那裡有問題?謝謝! 以下為我部份的程式碼: procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin query2.Open; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then begin query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query3.Eof then begin button2.Show; button1.Hide; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query3.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query2.Next; end; end else begin j:=''; k:=0.0; x[i,0]:=dbedit1.Text; //員工編號 x[i,1]:=dbedit2.Text; //姓名 x[i,2]:='1'; //年資權數 query1.Next; end; end; ps:這是我第一次寫delphi資料庫的程式,所以程式又臭又長的,讓各位高手 見笑了!希望各位高手能幫個忙!謝謝! [Delphi]=*VaKa*=is~me您確定 if query1.Eof then 及 if query2.Eof then 有進入嗎 ? 加上這些判斷好像沒有什麼意義耶 ...
------
將問題盡快結案也是一種禮貌! |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 不好意思喔﹐回覆您那么多次還沒有幫助解決問題﹐剛才用自己的資料表做了個測試﹐問題所在找到了﹐請參考如下﹕
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:=''; query1.Close; query2.Open; dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then //以上這句﹐目前query2的狀態已經是Open了﹐也就是說目前的資料錄指針已經指向第一筆﹐在此判斷其是否為末筆資料錄﹐結果當然不是﹐即會執行else處的query2.Next; 所以您就會看不到第一筆資料錄了﹒ begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:='';//先做個清空的動作 query2.Close; query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query3.Eof then //此處的看不到query3第一筆資料的原因和query2相同. ... ... ...參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 第二筆會出現的原因就是剛才提到的Query2.Next;引起的﹐我們這樣來解釋一下﹐以下只挑選出一個If...else的條件語句﹕
procedure TForm1.Button1Click(Sender: TObject); begin if query1.Eof then //當query1沒有到末筆資料錄﹐則執行下列 begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:=''; query1.Close; query2.Open;//至此句query已經Open dbedit1.DataSource:=datasource2; dbedit2.DataSource:=datasource2; dbedit3.DataSource:=datasource2; dbedit4.DataSource:=datasource2; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; if query2.Eof then //在此做if的判斷﹐目前資料表記錄指針是在第一筆資料上 //判斷的結果﹐這句if不成立﹐就要執行對應的else部分程式碼 begin dbedit1.DataField:=''; dbedit2.DataField:=''; dbedit3.DataField:=''; dbedit4.DataField:='';//先做個清空的動作 query2.Close; query3.Open; dbedit1.DataSource:=datasource3; dbedit2.DataSource:=datasource3; dbedit3.DataSource:=datasource3; dbedit4.DataSource:=datasource3; dbedit1.DataField:='員工編號'; dbedit2.DataField:='姓名'; dbedit3.DataField:='到職日期'; dbedit4.DataField:='職稱'; ...... ......//略 end else begin query2.Next; end; //就是這一句﹐既然以上的if條件式不成立﹐就執行這里的 //else部分程式碼query2.Next;正是將當前資料錄指針(第一筆資料) //向下移動一筆﹐也就是當前資料錄指針就變成第二筆了我覺得使用這樣的方法來變動資料集元件﹐而達到顯示的目的﹐應該不是很好﹐僅僅作用于顯示的目的﹐盡量減少資料集元件﹐通過程式判斷目前使用的是哪一個資料表會好一些吧﹒ 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
謝謝你..可是我還是不知如何下手?..
"盡量減少資料集元件﹐通過程式判斷目前使用的是哪一個資料表會好一些吧"
可是因為我的sql是透過很多個table連結,而且我的這個程式就要讓能分紅的
員工顯示出來,讓使用者能自己輸入考績,再結算能分紅的員工每人能得多少
so我才會這樣寫..可因為符合分紅的條件太多,我才會分三個query來寫..
但卻發生了這樣的事..真煩人!
不過真的很謝謝你..如果你有什麼好的建議..能否告訴我?
因為我真的不知如何下手才是.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 小弟用手頭上的資料庫寫了一個類似的範例﹐只使用一個ADOQuery元件和一個DataSource元件﹐經測試可正常執行﹐使用資料庫為Order.MDB﹐其中有三個資料表﹐分別為客戶﹐產品﹐訂單﹐程式碼如下﹕
uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Grids, DBGrids, Mask, DBCtrls, DB, ADODB, DBCommon; //uses 這一段請加上紅色處的DBCommon函數 procedure TForm1.Button1Click(Sender: TObject); begin ADOQuery1.Next;//Button1中只有Next的方法﹐目的是移動資料錄指針 end; procedure TForm1.DataSource1DataChange(Sender: TObject; Field: TField); begin if ADOQuery1.Eof then begin if GetTableNameFromSQL(ADOQuery1.SQL.Text) = '客戶' then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 產品'); DBEdit1.DataField := '產品編號'; DBEdit2.DataField := '產品名稱'; DBEdit3.DataField := '單價'; ADOQuery1.Open; end else if GetTableNameFromSQL(ADOQuery1.SQL.Text) = '產品' then begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Select * From 訂單'); DBEdit1.DataField := '訂單編號'; DBEdit2.DataField := '客戶編號'; DBEdit3.DataField := '數量'; ADOQuery1.Open; end else if GetTableNameFromSQL(ADOQuery1.SQL.Text) = '訂單' then begin Button1.Enabled := False; Button2.Enabled := True; end; end; end;以上程式碼跟您所要做的要求大同小異﹐根据您的需要再稍做修改即可﹐您參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
bastard
一般會員 發表:13 回覆:19 積分:6 註冊:2002-03-18 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |