1、DBGrid如何将向下的光标键封闭。急急急,在线等待!!!
2、DbGrid的运行中出现"Couldn't perform the edit becase another user changed the record"该怎么解决。

解决方案 »

  1.   

    你说封闭向下的光标键,是想不让向下移动吗?要是那样,就在OnKeydown里判断,要是VK_DOWN的话,就返回,其他的就是用默认处理
      

  2.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if Key=vk_Down then Key:=0
    end;
      

  3.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
      if key=40 then key:=0;
    end;
      

  4.   

    procedure Tan.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
    if key=40 then key:=0;
    end;
      

  5.   

    procedure TForm1.DBGrid1KeyDown(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if (Key=vk_Down)or(key=vk_Up)  then Key:=0
    end;
      

  6.   

    应该是更新数据时逻辑上的问题.
    大意就是在你准备进行更新时,你当前所看到的数据在数据库中已经发生了变化
    (也就是被别人改变了),你要知道,TADODataSet也是发SQL去更新数据库的,
    缺省方式其是索引字段与被改变字段作where匹配字段查找字段来更新,(有几种方式
    ,这是缺省的方式)
    类似
    update tbname set *=*
    where 索引字段=*
    and 被改变字段=*....
    如果这些where字段发生了变化会导致本意要更新一条,但准备被更新的记录条数为0
    或多于1条,就会发生你上述的提示.其实这是很符合逻辑的(比如你感冒了,你去看医生,
    而在走了一段路后,感冒可能奇迹般好了,你是否会继续去医院哟?).但有时可能会感到
    不方便.如果是被其他程序所改变,而你希望有这种情况下更新情况,你可以使用wherekeyonly
    更新方式.另外要注意一种情况:缺省值,在这种情况下,没有其他程序更新数据库,也可能
    发生字段值被改变而引发上述提示,解决办法是取消sqlserver或access字段
    的缺省值.
      

  7.   

    我分析是因为Table.Refresh的原因,但若不Refresh则Grid中出现两行一模一样的记录.
      

  8.   

    procedure TForm1.DBGrid1Keypress(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if (Key=vk_Down)or(key=vk_Up)  then Key:=0
    end;
      

  9.   

    procedure TForm1.DBGrid1Keypress(Sender: TObject; var Key: Word;
      Shift: TShiftState);
    begin
       if (Key=vk_Down)or(key=vk_Up)  then Key:=chr(0);
    end;
      

  10.   

    第二個問題可能是有其他USER同時操作一個表
      

  11.   

    你的第二个问题是这样的
    如果没有第二个用户修改你的数据,很可能使这个样子的。
    你操纵的数据表裏面,有的字段有默认值。比如 default "N"之类的冬冬
    在第一次保存了数据之后,数据库里面的实际值由于有default的存在,
    就跟你前端数据集里面的值不一样了。你再修改,保存的时候,就会
    出现错误信息。就像你说得那样。你可以在保存以后刷新数据集 query.refresh
    就不会有问题了
      

  12.   

    确实有一个字段里有default,但我的table里没有取用此字段。
      

  13.   

    第一个问题还是用KenDown 
      Key = VK_Down好一些;
    第二个问题:另一个用户用独占的方式打开了;