取不出所有的資料 |
尚未結案
|
bookworm
中階會員 發表:63 回覆:161 積分:82 註冊:2002-08-03 發送簡訊給我 |
各位前輩,小弟寫了一段程式,是按鍵之後將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 發送簡訊給我 |
引言: 各位前輩,小弟寫了一段程式,是按鍵之後將grid選取的丟到暫存資料表, 然後再將這個資料表給報表檔產生報表。在寫入暫存資料表的時候,資料都能 正確的寫入。報表的設定沒問題,只是資料錯誤。如果我之前選了三筆,會出來三筆同樣的資料,跟丟到暫存資料表的不一樣。看了半天,一直找不到問題。麻煩各位前輩解個惑。「堅持」從洗馬桶做起 Aricprocedure 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;謝謝各位的幫忙! --- 從問中學 ^^ |
minjiu
中階會員 發表:27 回覆:119 積分:69 註冊:2002-06-26 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
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 發送簡訊給我 |
謝謝大家的回覆,可是問題還是沒解決。
如huangeider兄所說,小弟換個資料表,報表就完全沒問題,可是用這個dataset就不行。試過close and open問題仍沒有解決。
我想小弟再將問題說得更清楚一點。
清除暫存資料表那邊應該是沒有問題,經過小弟反覆測試,每次都正常的清掉了。從grid選取之後丟到暫存資料表也沒有問題,選了幾筆,暫存資料庫就會進去幾筆。問題在於從這個暫存資料表繼續丟到報表檔時,出現的筆數跟我在grid選取的筆數是一樣的,如我選了三筆,也一樣會出現三筆,不過出現的是同一筆,有時候是我grid第一筆選的,有時候是最後一筆。本來懷疑是不是指標在最後一筆,但是加了adodataset1.firse還是一樣。不知道bookmark對這個會不會有影響呢? ---
從問中學 ^^
|
huangeider
高階會員 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
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 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |