這個問題讓我搞了一下午﹐腦袋有些不清醒了﹐高手幫幫忙吧。
急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
明天交任務﹐沒有辦法了。
當我在樹形結構里面選中一個節點后﹕就在qypjtb,qypetb里面過濾出這些數據來。
   with utdata.DataModule1 do
   begin
     qypjtb.Close ;
     qypjtb.Filtered :=false ;
     qypjtb.Filter :='proj_num='+#39+projnum+#39;
     qypjtb.Filtered :=true ;
     qypjtb.Open ;
     qypetb.Close ;
     qypetb.Filtered :=false ;
     qypetb.Filter :='proj_num='+#39+projnum+#39;
     qypetb.Filtered :=true ;
     qypetb.Open ;
   end ;
然后顯示在dbgrid1,dbgrid2里面,
dbgrid1的dataset是qypjtb﹐(table)
dbgrid2的dataset是qypetb。(table)
---------------------------------------------------------------------------
當我點一下導航條的添加按鈕的時候,如果開始在dbgrid2上面選擇的是第一條
或最后一條就append﹐如果是中間某條的時候就insert
procedure TForm6.DBNavigator2Click(Sender: TObject; Button: TNavigateBtn);
begin
  case button of
  nbinsert :
  begin
    if (datasource1.DataSet.RecNo=1) or (datasource1.DataSet.RecNo=datasource1.DataSet.RecordCount)  then
      datasource1.DataSet.Append
    else
      datasource1.DataSet.Insert ;
  end;
  end;
end;
-----------------------------------------------------------------------------------
procedure TForm6.DBGrid2KeyPress(Sender: TObject; var Key: Char);
begin
  IF KEY=#13 THEN
  begin
     IF dbgrid2.SelectedIndex<2 THEN
        dbgrid2.SelectedIndex:=dbgrid2.SelectedIndex+1
     ELSE
     BEGIN  //當在dbgrid2上面回車的時候﹐前三欄的值由用戶手入﹐其它自動錄入。
       with dbgrid2.DataSource.DataSet do
       begin
          if State=dsINSERT then
          begin
            FieldByName('proj_rate').Value :=100;
            FieldByName('proj_allo').Value :=110;
            FieldByName('proj_hres').Value :=1000;
            fieldbyname('item_num').Value :=copy(fieldbyname('proj_num').AsString,1,5);
            fieldbyname('tag').AsString :='Y';
            Post ;
          end;
       end;
     end;
  end;
end;
這樣 ﹐一條記錄添加到了表里面﹐
----------------------------------------------------------------------------
我遇到這么一個問題﹐比如﹐
當我點一下導航條的添加按鈕的時候,如果開始在dbgrid2上面選擇的是中間某條的時候就insert
﹐但是﹐當我post了以后 ﹐為什么我添加的記錄總顯示在dbgrid2的最后﹐我想要實現的是
我在dbgrid2中間添加以后﹐那條記錄就在那個位置﹐而不要出現在最后一條 ﹐怎么解決﹖
我好著急﹐下午試了半天 ﹐不知道錯在那里了﹐
我用的是delphi+sql server  
 
来自:trf, 时间:2003-5-6 18:00:00, ID:1834091 
好象你filter之后,你的
datasource1.DataSet.RecNo=datasource1.DataSet.RecordCount是成立的
所以是append状态
 
 
来自:hurryman, 时间:2003-5-7 8:15:00, ID:1835157 | 编辑 
那么我怎么解決呢﹖
我實在沒有辦法啊﹖
 
 
来自:trf, 时间:2003-5-7 10:16:00, ID:1835771 
你不要用filter,用locate试一下:
qypjtb.locate('proj_num',projnum,[]);
qypetb.locate('proj_num',projnum,[]);
 
 
来自:fccp, 时间:2003-5-7 10:57:00, ID:1836000 
这不是你的问题,许多数据库本身就是这样设计的。你做一个最简单的只有INSERT和APPEND功能
的程序就会发现,无论APPEND还是INSERT方式,新增的记录都在数据库尾部。这是大部分数据库
的默认设置,因为这样可以大大提高数据库的运行效率。如果你想插入的记录在数据库中间,则
该数据库表需要进行重新物理排序,会导致数据库的运行效率大大降低。如果你非要这样做,SQL SERVER的做法是:为该表增加一个簇索引(Clustered Index)
不过再次提醒你,Clustered index会导致你的系统运行效率大打折扣。
 
 
来自:hurryman, 时间:2003-5-7 11:22:00, ID:1836171 | 编辑 
但是﹐即使我使用了locate可以把那條記錄定位在那里﹐但是當我刷新一次后﹐
剛才我添加的記錄有跑到了最后一條啊﹐
各位 高手 幫忙啊。