全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:930
推到 Plurk!
推到 Facebook!

数据库拷贝问题

答題得分者是:cashxin2002
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-05-28 07:33:19 IP:222.184.xxx.xxx 未訂閱
代码如下: begin ADOTable1.Open; ADOTable2.First ; while not ADOTable2.Eof do begin ADOTable1.Append; ADOTable1.FieldByName('票据号').AsString := label3.Caption; ADOTable1.FieldByName('项目名称').AsString := ADOTable2.FieldByName('项目名称').AsString; (其它行的代码略了,反正和上面两行的意思一样的) ADOTable1.Post; ADOTable2.Next; end; ADOTable1.Close; end; 票据号的值不是在ADOTABLE2中的,项目名称是在ADOTABLE2中的,这样就产生了这样一种情况,如果项目名称有五个,ADOTABLE1中就加了五条记录,五条记录中票据号是一模一样的,项目名称是不同的。那当然不止这两个字段,还有十多个样子,比如还有项目单价,这个内容也是不同的,还有累计应收金额,这个内容和票据号一样,如果有五条记录,那么五条中内容也一样了。这样设计好象数据库中会产生大量相同的记录,比如我所说的五条记录,有十多个字段,其中只有项目名称和单价等是不同的,其它字段在五条记录中是一模一样的内容。如果用MEMO字段加进去,放在一条记录中,那么取这个字段中的内容出来打印又比较困难,因为我要实现比较精确的套打功能,这些字段是关键内容。各位前辈看看有什么改进的方法。如果说只能这样做,那么用什么方法实现这样一个功能,就是如果有五条记录,那么第一条记录中应收金额照填,但下面四条就填为0算了,因为这样便于统计,否则只收了10元钱,统计时就变成50元钱了。
------
我的编程起步于ktop,我将永远支持ktop
ntjrr
高階會員


發表:240
回覆:312
積分:110
註冊:2005-04-24

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-05-28 12:07:46 IP:222.184.xxx.xxx 未訂閱
我改了一下代码,意思是和我想得差不多了, 代码如下: begin ADOTable1.Open; ADOTable2.First ; ADOTable1.Append; ADOTable1.FieldByName('票据号').AsString := label3.Caption; ADOTable1.FieldByName('项目名称').AsString := ADOTable2.FieldByName ('项目名称').AsString; ADOTable1.FieldByName('应收金额).AsFloat :=StrToFloat(edit1.text); ADOTable1.Post; begin while not ADOTable2.Eof do ADOTable2.Next; ADOTable1.Append; ADOTable1.FieldByName('票据号').AsString := label3.Caption; ADOTable1.FieldByName('项目名称').AsString := ADOTable2.FieldByName ('项目名称').AsString; ADOTable1.FieldByName('应收金额).AsFloat :=0; ADOTable1.Post; end; ADOTable1.Close; end; 意思是想ADOTABEL2中有一条以上记录时,第一条全部照填,从第二条记录开始,其它字段都一样,但应收金额都填为0, 运行结果发生了错误在ADOTABEL2表中只有一个记录时,也要有两条记录产生了,我想要的是如果ADOTABEL2表中只有一个记录时,那么ADOTABEL1中也只要一个记录,应收等于实际数据(应该不是0),如果有一条以上记录时,比如三条记录,那么ADOTABLE1中也是三条记录,只是第二第三条中的应收金额为0.
------
我的编程起步于ktop,我将永远支持ktop
cashxin2002
版主


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-05-28 15:24:47 IP:202.62.xxx.xxx 未訂閱
您好﹗    這是因為Post之后﹐ADOTable2的資料錄指針仍然在指向第一筆﹐然后在While Not的時候﹐就會重复了這條記錄﹒    您可試試改成如下﹐在While Not之前﹐前先用Next方法(以下紅色處)移到ADOTable2對應的下一筆資料﹐然后再做While Not中的程式碼﹕
begin
  ADOTable1.Open;
  ADOTable2.First ;
  ADOTable1.Append;
  ADOTable1.FieldByName('票据号').AsString := label3.Caption;
  ADOTable1.FieldByName('项目名称').AsString := ADOTable2.FieldByName
('项目名称').AsString;
  ADOTable1.FieldByName('应收金额).AsFloat :=StrToFloat(edit1.text);
  ADOTable1.Post;
  ADOTable2.Next;
  While Not ADOTable2.Eof do
  begin
    ADOTable1.Append;
    ADOTable1.FieldByName('票据号').AsString := label3.Caption;
    ADOTable1.FieldByName('项目名称').AsString := ADOTable2.FieldByName('项目名称').AsString;
    ADOTable1.FieldByName('应收金额).AsFloat :=0;
    ADOTable1.Post;
  end;
  ADOTable1.Close;
end;
================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟
系統時間:2024-06-22 4:06:43
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!