線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:2134
推到 Plurk!
推到 Facebook!
[<<] [1] [2] [>>]

第一筆不能顯示在dbedit中…

尚未結案
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-09-29 09:45:01 IP:203.77.xxx.xxx 未訂閱
各位高手~ 想請你們幫個忙,我寫的程式出現了一個小問題, 那就是我使用了三個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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-09-29 10:03:43 IP:63.84.xxx.xxx 未訂閱
您好!    在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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-09-29 11:19:15 IP:203.77.xxx.xxx 未訂閱
你好~ 謝謝你的幫忙..但如果我照著這樣寫的話.. 程式就會一直停在query2的第一筆.. so不行耶! [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-09-29 11:24:19 IP:61.220.xxx.xxx 未訂閱
引言: 您好! 要加藍色部分程式碼
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-09-29 11:31:33 IP:61.220.xxx.xxx 未訂閱
加藍色部分程式碼    
引言: 各位高手~ 想請你們幫個忙,我寫的程式出現了一個小問題, 那就是我使用了三個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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-09-29 12:00:30 IP:203.77.xxx.xxx 未訂閱
謝謝你..但還是不行耶! [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-09-29 12:10:32 IP:63.84.xxx.xxx 未訂閱
您好!    請列出完整的程式碼(Button1和Button的OnClick事件). 覺得您的程式碼真的蠻長的, 能否在貼上的時候, 使用<>插入>功能, 將程式碼進行縮排, 就像><>===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
T.J.B
版主


發表:29
回覆:532
積分:497
註冊:2002-08-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-09-29 12:31:37 IP:61.220.xxx.xxx 未訂閱
對不起喔 沒有仔細看你的程式碼就叫你加 not 你把not 拿掉回復才對 至於其他的問題 請你把相關程式碼post上來 幫你看看吧 天行健 君子當自強不息~~@.@
------
天行健
君子當自強不息~~@.@
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-09-29 13:02:52 IP:203.77.xxx.xxx 未訂閱
 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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-09-29 13:36:07 IP:202.39.xxx.xxx 未訂閱
檢查: 1.if query1.Eof then 這 if 條件式有成立嗎? 如果不成立, 底下的 query2 就不會 open 了. 2.成立的話, query2.open 後的 record 是否是空的,  如果是空的, 就不會顯示    --- 歡迎光臨 KTop 研究院
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-09-29 15:23:57 IP:203.77.xxx.xxx 未訂閱
謝謝你... 我出現的問題是...在執行第二個query時... 第二個query的第一筆資料不會顯示在dbedit中... 但之後的每一筆都會顯示... 在執行到第三個query時... 也會發生同樣的問題... 也就是說...只要我執行了下一個query時... 我的下一個query的第一筆都不會顯示出來... [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-09-29 16:02:38 IP:63.84.xxx.xxx 未訂閱
引言: 你好~ 謝謝你的幫忙..但如果我照著這樣寫的話.. 程式就會一直停在query2的第一筆.. so不行耶! [Delphi]=*VaKa*=is~me
您好﹗ 不知您所說的程式就會一直停在query2的第一筆是什么意思﹖Form中有無類似乎DBNavigator等資料感知元件來控制資料錄的移動呢﹖ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟
pprayer
高階會員


發表:35
回覆:185
積分:174
註冊:2002-03-13

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-09-30 16:21:42 IP:211.75.xxx.xxx 未訂閱
引言: 謝謝你... 我出現的問題是...在執行第二個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

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-09-30 16:30:10 IP:203.77.xxx.xxx 未訂閱
你好~ 謝謝你的幫忙,我沒有使用DBNavigator 我是用button來動作 如果沒加你建議的query2.first的話... button會一筆一筆的顯示..但不會顯示query2第一筆... 可是加了,按button就會一直停在第二筆...無法動作... 程式就停在那個畫面...也不會顯示query2第一筆.. so我也不清楚發生了什麼事..頭好大.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#15 引用回覆 回覆 發表時間:2003-09-30 16:35:45 IP:203.77.xxx.xxx 未訂閱
你好~ 謝謝你..是沒有顯示出我要的資料的第一筆.. 就如同你說的我的query1有三筆.. 按了四下才會到query2的第一筆.. 但它按四下時..卻顯示query2的第二筆.. so我不懂為什麼我query2第一筆不會顯示出來.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#16 引用回覆 回覆 發表時間:2003-09-30 16:52:02 IP:202.39.xxx.xxx 未訂閱
加幾行試試:
          if query3.Eof then
            begin
              button2.Show;
              button1.Hide;
              query1.First;
              query2.First;
              query3.First;
            end
          else
--- 歡迎光臨 KTop 研究院
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#17 引用回覆 回覆 發表時間:2003-09-30 16:58:53 IP:63.84.xxx.xxx 未訂閱
您好!    用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

發送簡訊給我
#18 引用回覆 回覆 發表時間:2003-10-01 09:55:39 IP:203.77.xxx.xxx 未訂閱
謝謝你~ 還是不行.. 和原本一樣.. 不過還是謝謝你.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#19 引用回覆 回覆 發表時間:2003-10-01 10:00:35 IP:203.77.xxx.xxx 未訂閱
謝謝你.. 我用了query1.Refresh query2.Refresh query3.Refresh 會當掉.. 不能動.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#20 引用回覆 回覆 發表時間:2003-10-01 10:51:48 IP:63.84.xxx.xxx 未訂閱
您好!    當機? 您的資料筆數有多少? 再試試看如下: (請先將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

發送簡訊給我
#21 引用回覆 回覆 發表時間:2003-10-01 11:37:25 IP:203.77.xxx.xxx 未訂閱
還是不行啦! 我快瘋了! 現在的我是試用期... 如果解決不了! 我可能要走人了!.. 請各位高手幫幫我吧! 謝謝你們了! [
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#22 引用回覆 回覆 發表時間:2003-10-01 12:17:00 IP:63.84.xxx.xxx 未訂閱
您好﹗    我剛才又看了一下程式碼﹐發現有這樣一個問題﹐就是當您的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

發送簡訊給我
#23 引用回覆 回覆 發表時間:2003-10-01 12:52:53 IP:211.76.xxx.xxx 未訂閱
引言: 各位高手~ 想請你們幫個忙,我寫的程式出現了一個小問題, 那就是我使用了三個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

發送簡訊給我
#24 引用回覆 回覆 發表時間:2003-10-01 13:15:24 IP:203.77.xxx.xxx 未訂閱
謝謝你... 我改了... 還是不行... 結果和我以前的一樣... [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
bastard
一般會員


發表:13
回覆:19
積分:6
註冊:2002-03-18

發送簡訊給我
#25 引用回覆 回覆 發表時間:2003-10-01 13:17:17 IP:203.77.xxx.xxx 未訂閱
我確定有進入... 不然query2的第二筆就不會顯示了!... 不過還是謝謝你哦! [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#26 引用回覆 回覆 發表時間:2003-10-01 14:36:42 IP:63.84.xxx.xxx 未訂閱
您好﹗    不好意思喔﹐回覆您那么多次還沒有幫助解決問題﹐剛才用自己的資料表做了個測試﹐問題所在找到了﹐請參考如下﹕
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

發送簡訊給我
#27 引用回覆 回覆 發表時間:2003-10-01 15:00:36 IP:203.77.xxx.xxx 未訂閱
請不要這樣說... 你肯幫我... 我已經阿彌陀佛了!.. 我還要謝謝你呢!.. 可是我不了你的意思.. 那如果是這樣.. 為什麼第二筆就會出現.. 而且我的程式不是已經把query2.next放到最後面了!.. 而且在query2.next之前我要讓他先顯示在dbedit裡啊! [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#28 引用回覆 回覆 發表時間:2003-10-01 15:23:48 IP:63.84.xxx.xxx 未訂閱
您好﹗    第二筆會出現的原因就是剛才提到的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

發送簡訊給我
#29 引用回覆 回覆 發表時間:2003-10-02 08:34:19 IP:61.229.xxx.xxx 未訂閱
謝謝你..可是我還是不知如何下手?.. "盡量減少資料集元件﹐通過程式判斷目前使用的是哪一個資料表會好一些吧" 可是因為我的sql是透過很多個table連結,而且我的這個程式就要讓能分紅的 員工顯示出來,讓使用者能自己輸入考績,再結算能分紅的員工每人能得多少 so我才會這樣寫..可因為符合分紅的條件太多,我才會分三個query來寫.. 但卻發生了這樣的事..真煩人! 不過真的很謝謝你..如果你有什麼好的建議..能否告訴我? 因為我真的不知如何下手才是.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#30 引用回覆 回覆 發表時間:2003-10-02 10:15:41 IP:63.84.xxx.xxx 未訂閱
您好﹗    小弟用手頭上的資料庫寫了一個類似的範例﹐只使用一個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

發送簡訊給我
#31 引用回覆 回覆 發表時間:2003-10-02 11:21:38 IP:61.229.xxx.xxx 未訂閱
讓你見笑了! 我們公司是用delphi4.. so沒有ado.. 謝謝你.. [Delphi]=*VaKa*=is~me
------
[Delphi]=*VaKa*=is~me
[<<] [1] [2] [>>]
系統時間:2024-06-08 6:24:35
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!