線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:836
推到 Plurk!
推到 Facebook!

取不出所有的資料

尚未結案
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-16 23:18:52 IP:211.76.xxx.xxx 未訂閱
各位前輩,小弟寫了一段程式,是按鍵之後將grid選取的丟到暫存資料表, 然後再將這個資料表給報表檔產生報表。在寫入暫存資料表的時候,資料都能 正確的寫入。報表的設定沒問題,只是資料錯誤。如果我之前選了三筆,會出來三筆同樣的資料,跟丟到暫存資料表的不一樣。看了半天,一直找不到問題。麻煩各位前輩解個惑。
procedure TForm1.Button5Click(Sender: TObject);
var
  i,j: integer;
begin
  adoconnection2.Connected:=true;
  adodataset2.Active := false;
  adodataset2.active := true;
  adodataset2.First;
  while not adodataset2.Eof do
  begin
   for j:=0 to adodataset2.RecordCount -1 do//確定暫存資料表是空的
    begin
     adodataset2.Delete;
     adodataset2.Next;
    end;
  end;
  for i := 0 to DBGrid1.SelectedRows.Count - 1 do//將資料丟到暫存資料表
    begin
      dbgrid1.DataSource.DataSet.Bookmark:=dbgrid1.SelectedRows.Items[i];
          adodataset2.Append;
    adodataset2.FieldByName('¯輞訏').AsString :=
      adoquery1.FieldByName('¯輞訏').AsString;
       adodataset2.Post;
    end;
  frdbdataset1.DataSet := adodataset2;//丟到報表
  frReport1.LoadFromFile('c:\1.frf');
  frReport1.Preview := Form3.frPreview1;
  if frReport1.PrepareReport then
    frReport1.ShowPreparedReport;
  Form3.ShowModal;
end;  
謝謝各位的幫忙! --- 從問中學 ^^
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-17 03:01:52 IP:61.231.xxx.xxx 未訂閱
引言: 各位前輩,小弟寫了一段程式,是按鍵之後將grid選取的丟到暫存資料表, 然後再將這個資料表給報表檔產生報表。在寫入暫存資料表的時候,資料都能 正確的寫入。報表的設定沒問題,只是資料錯誤。如果我之前選了三筆,會出來三筆同樣的資料,跟丟到暫存資料表的不一樣。看了半天,一直找不到問題。麻煩各位前輩解個惑。
procedure TForm1.Button5Click(Sender: TObject);
var
  i,j: integer;
begin
  adoconnection2.Connected:=true;
  adodataset2.Active := false;
  adodataset2.active := true;
  adodataset2.First;
  while not adodataset2.Eof do
  begin
   for j:=0 to adodataset2.RecordCount -1 do//確定暫存資料表是空的
    begin
     adodataset2.Delete;
     adodataset2.Next;
    end;
  end;
  for i := 0 to DBGrid1.SelectedRows.Count - 1 do//將資料丟到暫存資料表
    begin
      dbgrid1.DataSource.DataSet.Bookmark:=dbgrid1.SelectedRows.Items[i];
          adodataset2.Append;
    adodataset2.FieldByName('¯輞訏').AsString :=
      adoquery1.FieldByName('¯輞訏').AsString;
       adodataset2.Post;
    end;
  frdbdataset1.DataSet :=adodataset2試試換個資料表代入報表中,若情形一樣再把dataset.close 再dataset.open ,若還不行的話檢查是否報表中有啥程式碼;//丟到報表
  frReport1.LoadFromFile('c:\1.frf');
  frReport1.Preview := Form3.frPreview1;
  if frReport1.PrepareReport then
    frReport1.ShowPreparedReport;
  Form3.ShowModal;
end;  
謝謝各位的幫忙! --- 從問中學 ^^
「堅持」從洗馬桶做起 Aric
minjiu
中階會員


發表:27
回覆:119
積分:69
註冊:2002-06-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-17 10:41:17 IP:218.164.xxx.xxx 未訂閱
procedure TForm1.Button5Click(Sender: TObject); var   i,j: integer; begin   adoconnection2.Connected:=true;   adodataset2.Active := false;   adodataset2.active := true;   adodataset2.First;    while not adodataset2.Eof do begin for j:=0 to adodataset2.RecordCount -1 do//確定暫存資料表是空的 begin adodataset2.Delete; adodataset2.Next; end; end; for i := 0 to DBGrid1.SelectedRows.Count - 1 do//將資料丟到暫存資料表 begin dbgrid1.DataSource.DataSet.Bookmark:=dbgrid1.SelectedRows.Items[i]; adodataset2.Append; adodataset2.FieldByName('¯輞訏').AsString := adoquery1.FieldByName('¯輞訏').AsString; adodataset2.Post; end; frdbdataset1.DataSet := adodataset2;//丟到報表 frReport1.LoadFromFile('c:\1.frf'); frReport1.Preview := Form3.frPreview1; if frReport1.PrepareReport then frReport1.ShowPreparedReport; Form3.ShowModal; end; 想必紅色的部份是在清空暫存檔的資料吧... 看了一下..這個部份似乎有問題... 建議改成... while not (adodataset2.Bof and adodataset2.Eof) do adodataset2.Delete;
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-17 10:46:43 IP:218.164.xxx.xxx 未訂閱
1.procedure TForm1.Button5Click(Sender: TObject);
var
  i,j: integer;
begin
  adoconnection2.Connected:=true;
  adodataset2.Active := false;
  adodataset2.active := true;
  adodataset2.First;
  while not adodataset2.Eof do//確定暫存資料表是空的
    begin
     adodataset2.Delete;
     adodataset2.First;
    end;
  for i := 0 to DBGrid1.SelectedRows.Count - 1 do//將資料丟到暫存資料表
    begin
      dbgrid1.DataSource.DataSet.Bookmark:=dbgrid1.SelectedRows.Items[i];
          adodataset2.Append;
    adodataset2.FieldByName('¯輞訏').AsString :=
      adoquery1.FieldByName('¯輞訏').AsString;
       adodataset2.Post;
    end;
  frdbdataset1.DataSet := adodataset2;//丟到報表
  frReport1.LoadFromFile('c:\1.frf');
  frReport1.Preview := Form3.frPreview1;
  if frReport1.PrepareReport then
    frReport1.ShowPreparedReport;
  Form3.ShowModal;
end;
2.紅色那一段是要刪除資料,查了一下Help..應該可以這樣... adodataset2.DeleteRecords(arAll); 一行指令就可以了..TRY TRY SEE..
發表人 - chih 於 2003/11/17 10:55:11
ko
資深會員


發表:28
回覆:785
積分:444
註冊:2002-08-14

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-17 10:57:12 IP:61.221.xxx.xxx 未訂閱
bookworm 你好:  
引言: 如果我之前選了三筆,會出來三筆同樣的資料,跟丟到暫存資料表的不一樣。 while not adodataset2.Eof do begin for j:=0 to adodataset2.RecordCount -1 do//確定暫存資料表是空的 begin adodataset2.Delete; adodataset2.Next; end; end;
既然用 > <>< face="Verdana, Arial, Helvetica">引言: adodataset2.FieldByName('¯輞訏').AsString := adoquery1.FieldByName('¯輞訏').AsString; 這裡是否看過adoquery1.FieldByName('¯輞訏').AsString有沒有變化
------
======================
昏睡~
不昏睡~
不由昏睡~
bookworm
中階會員


發表:63
回覆:161
積分:82
註冊:2002-08-03

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-11-18 00:08:01 IP:211.76.xxx.xxx 未訂閱
謝謝大家的回覆,可是問題還是沒解決。 如huangeider兄所說,小弟換個資料表,報表就完全沒問題,可是用這個dataset就不行。試過close and open問題仍沒有解決。 我想小弟再將問題說得更清楚一點。 清除暫存資料表那邊應該是沒有問題,經過小弟反覆測試,每次都正常的清掉了。從grid選取之後丟到暫存資料表也沒有問題,選了幾筆,暫存資料庫就會進去幾筆。問題在於從這個暫存資料表繼續丟到報表檔時,出現的筆數跟我在grid選取的筆數是一樣的,如我選了三筆,也一樣會出現三筆,不過出現的是同一筆,有時候是我grid第一筆選的,有時候是最後一筆。本來懷疑是不是指標在最後一筆,但是加了adodataset1.firse還是一樣。不知道bookmark對這個會不會有影響呢? --- 從問中學 ^^
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-11-18 01:03:58 IP:61.231.xxx.xxx 未訂閱
procedure TForm1.Button5Click(Sender: TObject);
var
  i,j: integer;
begin
  adoconnection2.Connected:=true;
  adodataset2.Active := false;
  adodataset2.active := true;
  adodataset2.First;
{while not adodataset2.Eof do
  begin
   for j:=0 to adodataset2.RecordCount -1 do//確定暫存資料表是空的
    begin
     adodataset2.Delete;
     adodataset2.Next;
    end;
  end;
  for i := 0 to DBGrid1.SelectedRows.Count - 1 do//將資料丟到暫存資料表
    begin
      dbgrid1.DataSource.DataSet.Bookmark:=dbgrid1.SelectedRows.Items[i];
          adodataset2.Append;
    adodataset2.FieldByName('¯輞訏').AsString :=
      adoquery1.FieldByName('¯輞訏').AsString;
       adodataset2.Post;
    end;}
  frdbdataset1.DataSet := adodataset2;//丟到報表
  frReport1.LoadFromFile('c:\1.frf');
  frReport1.Preview := Form3.frPreview1;
  if frReport1.PrepareReport then
    frReport1.ShowPreparedReport;
  Form3.ShowModal;
end;  
那只能慢慢檢查囉 可先在紅色部份程式加個註解符號 用同一個出錯的table 代入 不行的話再把範圍縮小 慢慢檢查 祝好運 「堅持」從洗馬桶做起 Aric
系統時間:2024-04-27 18:51:32
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!