急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!這個問題讓我搞了一下午﹐腦袋有些不清醒了﹐高手幫幫忙吧。明天交任務﹐沒有辦法了。(5分)

  • 主题发起人 主题发起人 hurryman
  • 开始时间 开始时间
H

hurryman

Unregistered / Unconfirmed
GUEST, unregistred user!
這個問題讓我搞了一下午﹐腦袋有些不清醒了﹐高手幫幫忙吧。
急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!急!
明天交任務﹐沒有辦法了。
當我在樹形結構里面選中一個節點后﹕就在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
 
好象你filter之后,你的
datasource1.DataSet.RecNo=datasource1.DataSet.RecordCount是成立的
所以是append状态
 
那么我怎么解決呢﹖
我實在沒有辦法啊﹖
 
你不要用filter,用locate试一下:
qypjtb.locate('proj_num',projnum,[]);
qypetb.locate('proj_num',projnum,[]);
 
这不是你的问题,许多数据库本身就是这样设计的。你做一个最简单的只有INSERT和APPEND功能
的程序就会发现,无论APPEND还是INSERT方式,新增的记录都在数据库尾部。这是大部分数据库
的默认设置,因为这样可以大大提高数据库的运行效率。如果你想插入的记录在数据库中间,则
该数据库表需要进行重新物理排序,会导致数据库的运行效率大大降低。

如果你非要这样做,SQL SERVER的做法是:为该表增加一个簇索引(Clustered Index)
不过再次提醒你,Clustered index会导致你的系统运行效率大打折扣。
 
但是﹐即使我使用了locate可以把那條記錄定位在那里﹐但是當我刷新一次后﹐
剛才我添加的記錄有跑到了最后一條啊﹐
各位 高手 幫忙啊。
 
后退
顶部